簡體   English   中英

如何在 python 中替換 DICOM 中的圖像?

[英]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中原始圖像的信息:

  • len(ds.PixelData) = 475136
  • len(ds.pixel_array[0]) = 464
  • len(ds.pixel_array) = 512

在另存為.dcm 之前,有關.png 中的圖像的信息:

  • img.size = (464, 512)
  • img.mode = L
  • len(imgAsByte) * 2 = 475136 # 乘以 2 后,我的長度與原始圖像相同

大多數灰度 DICOM 圖像(如 MR 和 CT 圖像)每個像素使用 2 個字節(這可以在BitsAllocated標記中看到,通常為 16)。 您的圖像操作似乎為這些圖像創建了每個像素 1 個字節 - 因此您必須調整各自的 DICOM 標簽,至少BitsAllocatedBitsStored ,在這種情況下,它們都必須設置為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM