如何将 DICOM 图像转换为 PNG?

如何将 DICOM 图像转换为 PNG?

我有一些从以下网站下载的 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 似乎是唯一一个能产生良好效果的。它看起来像这样:

pbm 文件

.pnm 看起来像这样,它不完全是逆图像,但不知何故看起来不对:

pnm 文件

两个 .png 转换结果看起来都像这样,这是一张非常褪色的图像,也许是由于 alpha 通道、gamma 或……存在问题?

png 文件

问题是我需要这些是 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

有几种不同的答案,虽然您将其标记为 Linux 和 ImageMagick,但您从未在问题本身中说过您只能使用它们。因此,无论如何,伊凡视界确实支持 DICOM,并且它还具有通过文件/批量转换/重命名(或只需按“B”)的批处理模式。我刚刚成功地用它将大约 150 个 .dcm 文件转换为 .png。

它是免费的,虽然它只适用于 Windows,但在 Wine 下也可以完美运行。只需确保安装插件包,它本身提供 DICOM 支持。

答案3

如果你可以使用 GIMPhttps://www.gimp.org/您可以轻松打开图像并导出为其他格式。

为什么它不能与你的转换器一起使用是另一个问题。我遇到了同样的问题(不是这种格式或转换器),转换器期望的位数与源图像的位数不同(8 位与 16 位)

答案4

如果你正在使用 Mac,或者可以使用 Mac,https://DICOM-converter.com是一个免费的实用程序,可以通过拖放操作将文件或完整的文件夹结构转换为 JPEG、PNG、(动画)-GIF、MOV 或 MP4。

相关内容