如何提取/查看多帧DICOM文件的所有帧?

时间:2017-12-08 04:32:10

标签: python image dicom pydicom

我知道我可以使用以下代码查看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代码读取,但只显示第一帧。如何提取和查看其他框架?

1 个答案:

答案 0 :(得分:3)

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

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

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问题;它是旧版本,但可能会有所帮助。