【问题标题】:How to standardize multiple DICOM images?如何标准化多个 DICOM 图像?
【发布时间】:2020-03-13 21:24:58
【问题描述】:

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

【问题讨论】:

  • 您可以人为地将它们转换为任意范围,但您会丢失信息。如果这是可以接受的,你想要什么样的范围? IE。无符号 8 位、有符号 16 位等
  • 任何范围都可以,如果我指定可能 -1024 到 1024,尽管任何范围都可以
  • 使用原始像素值是否正常,还是需要先转换为单位数量(如 HU 或 SUV)?
  • 公平地说,我知道 dicom 数组已经在 HU 值中,如果我错了,请纠正我。如果不是,那么只要它们在相同的范围内,HU 值就会被首选,否则原始像素值就可以了
  • 技术上它们不是,但如果 R​​escaleSlope 为 1 并且 RescaleIntercept 为 0,那么到 HU 的转换已经完成。一般来说,当然没有办法保证

标签: python dicom medical pydicom


【解决方案1】:

如果您为所有数据(例如 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)。转换为特定的 范围 仅意味着决定如何处理所选范围之外的值:

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 应用于两者。开窗操作对类比不太友好,本质上,您将标尺的一个小窗口(例如从 10 厘米到 12 厘米的部分)拉伸到与整个标尺相同的长度。你的尺子不再以厘米为单位,不能用来测量东西,但也许通过扩展该部分,你会看到一些以前不明显的细节 (like a tumour)。对两者应用相同的重新缩放 + 窗口操作的另一个好处是,您仍然可以有意义地将您的两个标尺与彼此进行比较,因为它们都被拉伸了相同的量。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2013-05-17
    • 2022-01-12
    相关资源
    最近更新 更多