【转】DICOM图像像素值(灰度值)转换为CT值

转自: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)

上一篇:杂记-C标准库2(转载)


下一篇:【声学基础】20211007课堂笔记