转换为亨斯菲尔德单位后图像注释正确显示

Image note correctly displayed after transforming to Hounsfield Units

我正在从事 CT 扫描工作,对肝脏区域特别感兴趣。我正在尝试使用 python 中的以下函数将像素值转换为 Hounsfield 单位:

def transform_to_hu(slices): 
    images = np.stack([file.pixel_array for file in slices], axis=-1) #axis=-1 for depth in the last channel
    images = images.astype(np.int16)

    for n in range(len(slices)):
        
        intercept = slices[n].RescaleIntercept
        slope = slices[n].RescaleSlope
        
        if slope != 1:
            images[n] = slope * images[n].astype(np.float64)
            images[n] = images[n].astype(np.int16)
            
        images[n] += np.int16(intercept)
    
    return np.array(images, dtype=np.int16)

为什么转成HU之后,图片看起来像是分成了两个区域?

您的 n 变量是 numpy 数组的第一个索引(对应于冠状切片),而您在应用重新缩放操作时遍历切片的数量。由于切片数小于行数,因此重新缩放操作不会覆盖整个卷。

您应该遍历轴向切片(即使用 numpy 数组的最后一个索引 images[..., n])。这是一个如何使用 pydicom 的 apply_rescale() 函数执行此操作的示例:

from pydicom.data import get_testdata_file
from pydicom.pixel_data_handlers import apply_rescale
import numpy as np

ds = get_testdata_file("CT_small.dcm")
ds_stack = [ds, ds, ds]

images = np.stack([ds.pixel_array for ds in ds_stack], axis=-1).astype('float64')
for idx, ds in enumerate(ds_stack):
    images[..., idx] = apply_rescale(images[..., idx], ds)