[英]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.