我知道我可以使用以下代码查看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代码读取,但只显示第一帧。如何提取和查看其他框架?
答案 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问题;它是旧版本,但可能会有所帮助。