Pydicom.read_file 仅适用于某些 Dicom 图像

2024-01-04

我正在制作一个 python 应用程序,可以使用 pydicom 库将 .dcm 图像转换为 .jpg。这是我的代码:

import pydicom
import cv2
import numpy as np

filename = 'testDicom.dcm'

#get pixel data from image
ds = pydicom.read_file(filename, force=True)
image = ds.pixel_array

new_img = []
max_value = None
min_value = None

#get maximum and minimum pixel values
for i in image:
    for l in i:
        if max_value:
            if l > max_value:
                max_value = l
        else:
            max_value = l

        if min_value:
            if l < min_value:
                min_value = l
        else:
            min_value = l

#use maximum and minimum pixel values to map pixel values between 0 and 255
for i in image:
    row = []
    for pixel in i:
        row.append((pixel - min_value) / (max_value / 255.0))
    new_img.append(row)

#convert to numpy array
new_img = np.array(new_img)

#save image
cv2.imwrite(filename.replace('.dcm', '.jpg'), new_img)

我已经在两个文件上进行了测试。第一个,

https://github.com/MaxwellMarcus/Training-Data-Creator/blob/master/testDicom.dcm

工作得很好。

第二个,

https://github.com/MaxwellMarcus/Training-Data-Creator/blob/master/testDicom2.dcm

给出了一个错误:

Traceback (most recent call last):
  File "C:\Users\Max Marcus\github\Training-Data-Creator\creator.py", line 6, in <module>
    image = ds.pixel_array
  File "C:\Python38\lib\site-packages\pydicom\dataset.py", line 1615, in pixel_array
    self.convert_pixel_data()
  File "C:\Python38\lib\site-packages\pydicom\dataset.py", line 1324, in convert_pixel_data
    self._convert_pixel_data_without_handler()
  File "C:\Python38\lib\site-packages\pydicom\dataset.py", line 1409, in _convert_pixel_data_without_handler
    raise RuntimeError(msg + ', '.join(pkg_msg))
RuntimeError: The following handlers are available to decode the pixel data however they are missing required dependencies: GDCM (req. GDCM)

有谁知道为什么只有两个文件之一发生这种情况,或者如何修复它?


您有一个包含压缩数据的数据集像素数据。通过它自己pydicom只能处理像素数据还没有被压缩,但是如果你安装一个或多个可选库 https://pydicom.github.io/pydicom/stable/tutorials/installation.html#install-the-optional-libraries然后它可以处理各种压缩。这张表 https://pydicom.github.io/pydicom/stable/old/image_data_handlers.html#supported-transfer-syntaxes告诉您需要哪个包。

For JPEG 无损、非分层、一阶预测(1.2.840.10008.1.2.4.70),唯一列出的可用软件包是 GDCM,不幸的是,这意味着您要么需要 Conda 安装(并且在 conda-forge 上,它的仅适用于 Python 3.6 及以下版本的 Windows https://anaconda.org/conda-forge/gdcm/files)或Linux。幸运的是,我一直在开发一个新的软件包,它也支持 JPEG Lossless:pylibjpeg https://github.com/pydicom/pylibjpeg-libjpeg https://github.com/pydicom/pylibjpeg-libjpeg plugin.

$ pip install pylibjpeg pylibjpeg-libjpeg pydicom
from pydicom import dcmread
import pylibjpeg

ds = dcmread("testDicom2.dcm")
arr = ds.pixel_array

看看你的数据,我会说光度解释值也是错误的。首先将其更改为 YBR_FULL:

from pydicom import dcmread
import pylibjpeg

ds = dcmread("testDicom2.dcm")
ds.PhotometricInterpretation = 'YBR_FULL'
arr = ds.pixel_array
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pydicom.read_file 仅适用于某些 Dicom 图像 的相关文章