【问题标题】:How to extract/view all frames of a multi-frame DICOM file?如何提取/查看多帧 DICOM 文件的所有帧?
【发布时间】:2017-12-08 04:32:09
【问题描述】:

我知道我可以使用以下代码查看 dicom 文件:

import dicom
from dicom.contrib.pydicom_PIL import show_PIL

f = "CT-MONO2-8-abdo.dcm"
ds = dicom.read_file(f, force=True)
show_PIL(ds)

但是,如何从多帧 DICOM 文件中提取和查看所有帧?我尝试使用上面的代码,但出现以下错误:

File "/home/auser/.local/lib/python3.5/site-packages/dicom/dataset.py", line 399, in _get_pixel_array
  raise NotImplementedError("Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array")
NotImplementedError: Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array

我曾尝试使用位于http://www.barre.nom.fr/medical/samples/ 的一些多帧文件。像素大小等可用于这些文件。

如何提取和/或查看多帧 DICOM 文件的不同帧?


编辑:使用 gdcm 的以下命令可在 Linux 上将这些文件转换为未压缩文件:

$ gdcmconv --raw compressed.dcm uncompressed.dcm

(提取后我使用http://www.barre.nom.fr/medical/samples/files/US-PAL-8-10x-echo.gz文件)。

然后由上面的 python 代码读取,但只显示第一帧。如何提取和查看其他帧?

【问题讨论】:

  • 您使用了哪些图片?错误消息对我来说似乎很清楚 - 像素数据被压缩,并且 pydicom 中没有合适的编解码器来解压缩它。作为一种解决方法,您可以尝试使用 dcmtk 命令行工具(例如 dcmdjpeg)更改格式(传输语法)。见 www.dcmtk.org
  • 我认为@Amit Joshi 现在提供了一个全面的答案(因此,我投了赞成票)。

标签: python image dicom pydicom


【解决方案1】:

pydicom 支持读取像素数据。请参阅this 文档。

pydicom 在解释 DICOM 数据时往往“懒惰”。例如,通过 默认它不会对像素数据做任何事情,除了读取原始数据 字节:

import dicom
ds=dicom.read_file("MR_small.dcm")
ds.PixelData
'\x89\x03\xfb\x03\xcb\x04\xeb\x04\xf9\x02\x94\x01\x7f ...
...

关于pixel_array

Dataset 的一个名为 pixel_array 的属性提供了更多有用的像素 未压缩图像的数据。 NumPy 数值包必须是 安装在您的系统上以使用此属性,因为 pixel_array 返回一个 NumPy 数组:

import dicom
ds=dicom.read_file("MR_small.dcm")
ds.pixel_array
array([[ 905, 1019, 1227, ...,  302,  304,  328],
       [ 628,  770,  907, ...,  298,  331,  355],
       [ 498,  566,  706, ...,  280,  285,  320],
       ...,
       [ 334,  400,  431, ..., 1094, 1068, 1083],
       [ 339,  377,  413, ..., 1318, 1346, 1336],
       [ 378,  374,  422, ..., 1369, 1129,  862]], dtype=int16)
ds.pixel_array.shape
(64, 64)

文档还解释了在http://pydicom.readthedocs.io/en/stable/viewing_images.html查看图像。

如错误消息中所述(以及@kritzel_sw 在评论中),pydicom 尚不支持源图像的传输语法。在尝试提取帧之前,使用其他工具更改传输语法。

Rony 的另一个有用的博客http://dicomiseasy.blogspot.in/2012/08/chapter-12-pixel-data.html

同时检查this Stack Overflow 问题;这是关于旧版本的,但可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2012-09-29
    相关资源
    最近更新 更多