转自:https://www.cnblogs.com/xuhui24/p/6193032.html
https://zhuanlan.zhihu.com/p/358770379
CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071。用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu。
在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这个范围,通常是0-4096,这是我们常见到的像素值或者灰度值,这就需要我们在图像像素值(灰度值)转换为CT值。
首先,需要读取两个DICOM Tag信息,(0028|1052):rescale intercept和(0028|1053):rescale slope.
然后通过公式:
Hu = pixel * slope + intercept
计算得到CT值。
HU(Hounsfiled Unit)值,是在做医学图像数据预处理不可避免的事情,反映了组织对X射线吸收程度。以水的吸收程度作为参考,即水的HU=0,衰减系数大于水的为正直,小于水的为负值。并以骨皮质和空气的HU值为上限和下限,是在医学影像图像处理技术,处理CT图像不可避免的事情。
HU值的计算公式:(非常重要)
HU = pixel_val * slope + intercept
(如果Slope为1,Intercept为0,则不需要转化的问题,具体Slope和Intercept的值在头文件中都会有说明的)
代码:
import os
import numpy as np
import pydicom as pyd
import matplotlib.pyplot as plt
import cv2
import SimpleITK as sitk
##查看是否需要转化HU值,如果img.RescaleSlope不为1,img.RescaleIntercept不为0,则需要转化的问题
dcm_file='/Pancreas-CT/PANCREAS_0001/11-24-2015-PANCREAS0001-Pancreas-18957/Pancreas-99667/1-001.dcm'
img=pyd.read_file(dcm_file)
img_array=sitk.GetArrayFromImage(sitk.ReadImage(dcm_file))
print(img_array)
print(np.shape(img_array))
print('----')
print(img.RescaleSlope)
print(img.RescaleIntercept)
HU=np.dot(img_array,img.RescaleSlope)+img.RescaleSlope
print(HU)