想问一下大家 在做CT图像预处理的时候 根据数据集提供的信息 需要先从像素中减去32768获得HU值 再调整窗宽窗位【-1024, 3071】,可是得到的结果是全黑的
不知道你这个问题是否已经解决, 如果还没有解决的话:CT值属于医学领域的概念,通常称亨氏单位(hounsfield unit,HU),反映了组织对X射线的吸收程度。黑影表示低吸收区,即低密度区,如含气体多的肺部;白影表示高吸收区,即高密度区,如骨骼。但是CT 和X线图像相比,CT的密度分辨力高,即有高的密度分辨力(density resolution)。因此,人体软组织的密度差别虽小。吸收系数虽多接近于水,也能形成对比而
成像。解剖成像。灰度值属于计算机领域的概念,指的是单个像素点的亮度,灰度值越大表示越亮。范围一般从0到255,白色为255,黑色为0,故黑白图片也称为灰度图像。
两种最常用的医学图像数据格式:DICOM类型和NIFTI类型
DICOM类型的文件后缀为dcm,常用的python处理库有:SimpleITK,pydicom库
NIFTI类型的文件后缀为nii或nii.gz,常用的python处理库有:SimpleITK,nibabel库
注:无论对于dcm还是nii格式的图片,只要是ct图,为了更好地观察不同器官,都可以选择将储存的原始数据转化为Hu值,因为Hu值即代表了物体真正的密度。
对于nii格式的图片,SimpleITK,nibabel中常用的api接口,都会自动的进行上述转化过程,即取出来的值已经是Hu了。除非专门用nib.load('xx').dataobj.get_unscaled()或者itk.ReadImage('xx').GetPixel(x,y,z)才能取得原始数据
对于dcm格式的图片,SimpleITK,pydicom常用的api接口都不会将原始数据自动转化为Hu。(itk snap软件读入dcm或nii都不会对数据进行scale操作)
公式与代码:
HU = pixel_val*slope + intercept
其中,slope,intercept可以从元数据中读取
def get_pixels_hu(ct_array,slope,intercept):
if slope != 1:
ct_array = slope*ct_array
ct_array += intercept
return ct_array