如何标准化多个 DICOM 图像?

How to standardize multiple DICOM images?

我正在处理多个 DICOM 文件,其中大部分文件的像素差异很大。例如,一个范围从 -1024 到 2815,另一个范围从 0 到 2378。有没有办法将它们全部标准化到同一范围内。还要注意我正在使用 python 和 pydicom 库。 提前致谢。

如果您为所有数据(例如 CT 图像)处理相同的 IOD,并且图像数据已经在 HU 中(并且要确定这一点,您可以使用 pydicom 中的 apply_modality_lut() 函数):

from pydicom import dcmread
from pydicom.pixel_data_handlers.util import apply_modality_lut

ds = dcmread('filename.dcm')
arr = ds.pixel_array  # Raw unitless pixel data 
hu = apply_modality_lut(arr, ds)  # Pixel data has been converted to HU (for CT)

那么你的数据已经是特定的数量(即HU)。要转换为特定的 range 则意味着决定如何处理所选范围之外的值:

import numpy as np
# Clip values outside the range to the min/max of the range
clipped_hu = np.clip(hu, -1024, 1024)

当然,这意味着不应再将任何裁剪像素视为输入数据的准确表示。

重新缩放与窗口化

我将添加一些关于重新缩放 DICOM 数据和窗口化数据之间的区别的解释。

假设您有两把尺子,一把以厘米为单位,一把以英寸为单位。您将 DICOM rescale operation 应用于两者 - 在 pydicom 中您使用 apply_modality_lut() - 您将得到两个以厘米为单位的标尺。现在你可以用你的尺子来测量东西,你会从两者中得到相同的值,整洁!

现在你拿起你的尺子并应用相同的 DICOM windowing operation to both. The windowing operation is a bit less analogy friendly, in essence you're taking a small window of your rulers (say the section from 10 to 12 cm) and stretching it to be the same length as the entire ruler was beforehand. Your rulers are no longer in cm and can't be used to measure stuff, but perhaps by expanding that section you see some detail that wasn't obvious before (like a tumour)。对两者应用相同的重新缩放 + 窗口操作的另一个好处是,您仍然可以有意义地将两个标尺与 彼此 进行比较,因为它们都被拉伸了相同的量。

因此,重新缩放操作是关于将原始数据转换为数量以允许直接相互比较,而窗口操作是关于可视化某些东西。如果您想知道 CT 扫描的最高密度区域,您可以使用没有窗口的重新缩放操作。如果您想查看放射科医生在撰写报告时看到的内容,您可以同时应用重新缩放和开窗操作。