【医学图像分割】CT医学图像的预处理(重采样) 您所在的位置:网站首页 python中slice 【医学图像分割】CT医学图像的预处理(重采样)

【医学图像分割】CT医学图像的预处理(重采样)

2023-04-12 13:40| 来源: 网络整理| 查看: 265

CT图像中存在两个基本概念,窗口(window width)和窗位(window center),用于选取感兴趣的CT值范围,因为人体各组织结构不同,对X线吸收程度各异,形成不同的CT值,因此可以利用CT值来鉴别组织的性质。CT值的单位为Hounsfield

Hounsfield单位(HU)是计算机断层扫描(CT)中普遍使用的无量纲单位,用于标准、便捷的表达CT数值。Hounsfield单位是通过对测量得到的衰减系数进行线性变换得到的。这种转换是基于空气和的密度,其中纯水被定义为0 Hounsfield单元,空气被定义为-1000 Hounsfield单元。组织密度越大,x射线吸收越强,其值为正,呈亮信号;密度较低的组织,x射线吸收较少,显示负值,呈暗信号。Hounsfield单位是以1979年诺贝尔生理学或医学奖得主Godfrey Hounsfield爵士的名字命名的,以表彰他在CT的发明中所做的贡献。

窗宽是CT图像上显示的CT值范围,在此CT值范围内的组织和病变均以不同的模拟灰度显示。而CT值高于此范围的组织和病变,无论高出程度有多少,均以白影显示,不再有灰度差异; 反之,低于此范围的组织结构,不论低的程度有多少,均以黑影显示,也无灰度差别。增大窗宽,则图像所示CT值范围加大,显示具有不同密度的组织结构增多,但各结构之间的灰度差别减少。减小窗宽,则显示的组织结构减少,然而各结构之间的灰度差别增加。如观察脑质的窗宽常为-15~+85H,即密度在-15 ~+85H范围内的各种结构如脑质和脑脊液间隙均以不同灰度显示。而高于+85H的组织结构如骨质几颅内钙化,其间虽有密度差,但均以白影显示,无灰度差别;而低于-15H组织结构如皮下脂肪及乳突内气体均以黑影显示,其间也无灰度差别。

窗位是窗的中心位置,同样的窗宽,由于窗位不同,其所包括CT值范围的CT值也有差异。例如窗宽同为100H,当窗位为0H时,其CT值范围为-50 ~ +50H ; 如窗位为+35H时,则CT值范围为-15~+85H。通常,欲观察某以组织结构及发生的病变,应以该组织的CT值为窗位。例如脑质CT值约为+35H,则观察脑组织及其病变时,选择窗位以+35H为妥。

常见的人体组织CT值

(1) 液体CT值:-10~10Hu,水的CT值为0Hu;

(2) 空气CT值:-1000Hu;

(3) 脂肪CT值:-10~90Hu;

(4) 肝脾肾、脑实质等软组织CT值:20~50Hu;

(5) 骨性组织CT值一般超过300Hu;骨皮质一般CT值超过+1000Hu;

(6) 腹部常用CT值:-160~240Hu

下边是对腹部窗口的图像预处理:

# 腹部窗口的选取 def pretreatmentImage(image): image[image < -160] = 0 image[image > 240] = 0 return image 医疗图像重采样:

对于一张大小为128*128的彩色图像,其在计算机中可以表示为128*128*3的矩阵,其中每一个像素点的取值范围为0-255,不同的数值代表不同的亮度。但是对于医疗图像其是由若干个slice组成的,假设每一个slice的大小为512*512的单通道的图像,其中每一个像素点表示的是一个体素的取值,其范围可以-1000~2000之间。接下来通过以胰腺分割数据集中PANCREAS_0015.nii.gz为例,对医疗图像中体素这个概念进行讲解。Spacing(0.78125, 0.78125, 1.0)表示的是原始图像体素的大小,也可以将Spacing想象成大小为(0.78125, 0.78125, 1.0)的长方体。而原始图像的Size为 (512, 512, 247),表示的是原始在X轴,Y轴,Z轴中体素的个数。原始图像的size*对应的Spacing既可以得到真实3D图像大小(512*0.78125,512*0.78125,247*1 ),在图像重采样只是修改体素的大小,而真实3D图像大小是保持不变的,因此假设我们将Spacing修改成(1.0, 1.0, 2.0)的时候,则修改之后其对应的size应该为((512*0.78125)/ 1.0,(512*0.78125)/ 1.0,(247*1 )/ 2.0)即(400, 400, 124)。

import pydicom path = "" dcm_data = pydicom.read_file(path) print(dcm_data.PixelSpacing, dcm_data.SliceThickness) # 查看医学图像的体素大小和切片间距

重采样代码:

def img_resmaple(path, new_spacing=[1.0, 1.0, 1.0]): data = STK.ReadImage(path) image = STK.GetArrayFromImage(data) # 获取图像 # print(image.shape) original_spacing = data.GetSpacing() # print(original_spacing) original_size = data.GetSize() # print(data.GetOrigin(), data.GetDirection()) new_shape = [ int(np.round(original_spacing[0] * original_size[0] / new_spacing[0])), int(np.round(original_spacing[1] * original_size[1] / new_spacing[1])), int(np.round(original_spacing[2] * original_size[2] / new_spacing[2])), ] resmaple = STK.ResampleImageFilter() resmaple.SetInterpolator(STK.sitkLinear) resmaple.SetDefaultPixelValue(0) resmaple.SetOutputSpacing(new_spacing) resmaple.SetOutputOrigin(data.GetOrigin()) resmaple.SetOutputDirection(data.GetDirection()) resmaple.SetSize(new_shape) data = resmaple.Execute(data) image = STK.GetArrayFromImage(data) # print(image.shape) return image

按照图像的中心裁剪:

def centerCrop(image, label, output_size): if image.shape[0]


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有