在 Python 中将 dicom 图像与 OpenCV 结合使用

Using dicom Images with OpenCV in Python

我正在尝试使用 dicom 图像并在 Python 环境中使用 OpenCV 对其进行操作。到目前为止,我已经使用 pydicom 库读取 dicom(.dcm) 图像数据并使用像素数组属性使用 OpenCV imshow 方法显示图片。但是输出只是一个空白window。这是我目前正在使用的代码片段。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)

cv2.waitkey()

如果我打印出这里使用的数组,输出结果与我使用普通 numpy 数组得到的结果不同。我也尝试过使用 matplotlib imshow 方法,它能够显示带有一些颜色失真的图像。有没有办法将数组转换为 OpenCV 的清晰格式?

我想出了一种显示图像的方法。正如 Dan 在评论中提到的那样,矩阵的值按比例缩小并且由于 imshow 函数,输出太暗以至于人眼无法区分。所以,最后我唯一需要做的就是将整个垫子数据乘以 128。图像现在显示完美。将矩阵乘以 255 会使图片过度曝光并导致某些特征失效。这是修改后的代码。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
dcm_sample=ds.pixel_array*128
cv2.imshow('sample image dicom',dcm_sample)

cv2.waitkey()

我认为这不是正确答案。它适用于该特定图像,因为您的大部分像素值都在较低范围内。检查此 OpenCV: How to visualize a depth image。它适用于 c++,但很容易适应 Python.

遇到了类似的问题。使用 exposure.equalize_adapthist() (source)。生成的图像不是您使用 DICOM 查看器看到的图像的 100%,但它是我能够获得的最好图像。

import numpy as np
import cv2
import pydicom as dicom
from skimage import exposure

ds=dicom.dcmread('sample.dcm')
dcm_sample=ds.pixel_array
dcm_sample=exposure.equalize_adapthist(dcm_sample)
cv2.imshow('sample image dicom',dcm_sample)

cv2.waitkey()