我有一些从以下网站下载的 DICOM 医学影像文件癌症影像档案。我可以将它们从 DICOM 转换为其他几种格式,但正如您所看到的,大多数情况下转换并不按预期进行。
以下是我迄今为止发现的各种转换:
- DICOM 到 netpbm 格式:
dctopgm8 000005.dcm 000005.pbm
- DICOM 至 pnm 格式:
dctopnm -byteorder little 000005.dcm 000005.pnm
- DICOM 转 png 格式:
dcm2pnm +on 000005.dcm 000005.png
- DICOM 到 png 格式(通过 ImageMagick):
convert 000005.dcm 000005.png
其中,.pbm 似乎是唯一一个能产生良好效果的。它看起来像这样:
.pnm 看起来像这样,它不完全是逆图像,但不知何故看起来不对:
两个 .png 转换结果看起来都像这样,这是一张非常褪色的图像,也许是由于 alpha 通道、gamma 或……存在问题?
问题是我需要这些是 PNG 格式,而不是 PBM 格式。虽然我可以添加从 PBM 到 PNG 的额外转换,但我宁愿convert
只调用一次并在单个命令中完成完整转换。
dcm2pnm
有谁知道在调用ImageMagick 时我可能缺少哪些参数convert
才能使图像达到预期效果?
编辑:包括示例 .dcm 图像: 000005.dcm
答案1
看起来您正在尝试将 16 位图像转换为 8 位。它看起来像 CT 图像,其中像素值通常从 -1000(空气)到 0(水)再到 3000(致密骨骼)。
我猜想 PBM 程序正在通过重新缩放像素值将 16 位映射到 8 位。看起来 PNM 版本只取低 8 位而忽略高 8 位。PNG 图像可能具有整个 16 位数据,因为 PNG 支持它,但您的查看器仅显示高 8 位,而忽略低 8 位。
您需要将像素强度从 -32768-32767 重新缩放到 0-255(如果将它们视为无符号的 16 位整数,则为 0 到 63356)。
您可以使用 Python 中的 SimpleITK 执行此操作,如下所示:
import SimpleITK as sitk
img = sitk.ReadImage("000005.dcm")
# rescale intensity range from [-1000,1000] to [0,255]
img = sitk.IntensityWindowing(img, -1000, 1000, 0, 255)
# convert 16-bit pixels to 8-bit
img = sitk.Cast(img, sitk.sitkUInt8)
sitk.WriteImage(img, "000005.png")
答案2
答案3
如果你可以使用 GIMPhttps://www.gimp.org/您可以轻松打开图像并导出为其他格式。
为什么它不能与你的转换器一起使用是另一个问题。我遇到了同样的问题(不是这种格式或转换器),转换器期望的位数与源图像的位数不同(8 位与 16 位)
答案4
如果你正在使用 Mac,或者可以使用 Mac,https://DICOM-converter.com是一个免费的实用程序,可以通过拖放操作将文件或完整的文件夹结构转换为 JPEG、PNG、(动画)-GIF、MOV 或 MP4。