[英]How to replace an image in DICOM in python?
我需要編輯保存為 dicom 的醫學圖像。 我的目標是編輯,做閾值並將新圖像保存為黑白。
ds = pydicom.dcmread(filename)
png = Image.fromarray(ds.pixel_array)
我可以通過 ImageMagic 編輯並保存圖像。 接下來,我必須將包含圖像的 ds.PixelData 替換為字節。 這就是我這樣做的原因:
imgAsBytes = png.tobytes()
ds.PixelData = imgAsBytes
plt.imshow(ds.pixel_array , cmap=plt.cm.bone)
在這里我收到一個錯誤:
數據集中像素數據的長度(237568 字節)與預期長度(475136 字節)不匹配。 數據集可能已損壞或像素數據處理程序可能存在問題。
所以我補充說:
imgAsByte+= img.tobytes()
結果是:
.dcm 中的圖像被復制了四次,不是黑白的。 為什么我保存為 dicom 的圖像與 from.png 不同? 我試圖解決這個問題的方法:
關於.dcm中原始圖像的信息:
在另存為.dcm 之前,有關.png 中的圖像的信息:
大多數灰度 DICOM 圖像(如 MR 和 CT 圖像)每個像素使用 2 個字節(這可以在BitsAllocated
標記中看到,通常為 16)。 您的圖像操作似乎為這些圖像創建了每個像素 1 個字節 - 因此您必須調整各自的 DICOM 標簽,至少BitsAllocated
和BitsStored
,在這種情況下,它們都必須設置為 8:
ds.BitsAllocated = 8
ds.BitsStored = 8
您可能還需要調整其他標簽,具體取決於您的數據和用例。 如果您有壓縮圖像(在您的示例中似乎不是這種情況),您必須自己壓縮數據(這很容易出錯,所以我不會這樣做),或者更改 DICOM 圖像中的編碼。
如果您想將數據存儲回 PACS,您必須采取更多措施來避免寫入非法 DICOM,例如生成新的 SOP Instance UID,可能將 SOP Class 更改為 Secondary Capture,更改 Image Type 和其他一些標簽 -這是在 SO 的其他問題中處理的,所以我不會在這里 go 進入它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.