如何extract/view多帧DICOM文件的所有帧?

How to extract/view all frames of a multi-frame DICOM file?

我知道我可以使用以下代码查看 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/ 的一些多帧文件。像素大小等可用于这些文件。

如何提取 and/or 查看多帧 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 支持读取像素数据。请参阅 this 文档。

pydicom tends to be “lazy” in interpreting DICOM data. For example, by default it doesn’t do anything with pixel data except read in the raw bytes:

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

A property of Dataset called pixel_array provides more useful pixel data for uncompressed images. The NumPy numerical package must be installed on your system to use this property, because pixel_array returns a NumPy array:

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