1.4 DICOM图像CT值计算

Posted SuperCodeFarmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.4 DICOM图像CT值计算相关的知识,希望对你有一定的参考价值。

  上一篇文章分析了如何解析DICOM图像。在此基础上,本文章将讲解如何计算CT值。

主要流程如图所示:

  不同设备产生的DICOM图像像素格式不同,比如CT图像保存的是Hu值,超声(US)图像保存的是RGB值。
  以最常见的CT图像举例:
  CT值的单位是Hounsfield,简称为Hu,范围是 -1024-3071,数据范围是4096。用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu。
  CT值越高,图像显示越白,比如骨头CT值高,成亮白色,空气CT值低,成黑色。脊柱颜色亮白,肺中空气黑色。

  Dicom图像中PixelData存储的值并不是CT值,CT值需要计算才能获得。
  CT图像一个像素一般占两个字节,其中使用前12个bit存储像素值,即能表示的数据范围在2^12=4096,覆盖了CT值范围。一般医院影像科看CT图像都是在医用显示器上看,能达到12bit灰阶,所以可以完整的显示所有的像素。一般这种显示器价格在数万元。
  而普通的显示器是8bit灰阶,显示范围在0-255,所以只能显示部分像素值,需要通过调整窗宽窗位来显示不同的像素。
  网上很多博客描述CT值计算,需要读取两个DICOM Tag信息,(0028|1052):rescale intercept和(0028|1053):rescale slope.
  然后通过公式:
    Hu = pixel * slope + intercept
  如果通过DCMTK等框架来实现是没有问题,框架已经将PixelData中的像素值计算出来,可以直接用来计算CT值。
  但如果自己实现DICOM解析引擎,则PixelData中的像素值需要进行一些转换才能使用。
CT图像中和CT值计算的Tag:
(0028,0002) Samples per Pixel
  每一个像素的取样数,一般来说,CT,MR,DR等灰度图像都是1,而彩超等彩色图像都是3,分别表示R, G, B三个颜色通道。
(0028,0100)Bits Allocated
  一个像素的像素值占用了多少位bit,一般是两个字节,16bit
(0028,0101)Bits Stored
  一个像素的像素值使用了多少位bit,一般是12bit
(0028,0102)High Bit
   最高位序号,它定义了存储点在分配的内存中的排列方式,它的值是最后一个bit的序号。如果第一个bit放在0位,那么最后一个bit为Bits Stored -1
(0028,0103)Pixel Representation
  像素值的数据表示形式,0表示unsigned integer. 无符号整数,直接保存像素值本身。1表示二补数,保存的是像素值的二补数,其实就是有符号整数,此时像素值可正可负。
(0028,1052)Rescale Intercept
  缩放截距
  CT图像的Hu值有正值和负值,而PixelData中数据通常存储为无符号整数。使用12bit可以存储0-4095的正值,存储同样范围的包含负值和正值需要占用更多的字节。为了可以通过PixelData计算出负值Hu值,可以通过数学公式中的斜率和截距来计算。因此,CT DICOM文件通常具有负截距。线性缩放也适用于这样的情况,一个像素可能有一个大范围的值,而存储的值尽可能少的比特,同时避免量化错误。
(0028,1053Rescale Slope
  缩放斜率

通过如下方式方式获取CT值:

  1. 通过(0002,0010) Transfer Syntax UID判断图像是否压缩格式,如果压缩调用相应的解压缩算法解压
  2. 通过(0002,0010) Transfer Syntax UID判断图像是大端还是小端,进行字节级别的移位。如果是小端则前后字节整体进行互换,字节内bit顺序不变。如果是大端则不变。
  3. 通过(0028,0100)Bits Allocated,(0028,0101)Bits Stored,(0028,0102)High Bit对数据进行操作。
    比如一般Bits Allocated为16,Bits Stored为12,High Bit为11,表示一个像素占用两个字节,其中使用了前12个字节。则Pixel = Pixel && 0x0FFF。
  4. 通过(0028|1052)rescale intercept和(0028|1053)rescale slope计算CT值Hu = pixel * slope + intercept
      以上步骤计算出 -1024-3071范围内的CT值,下篇文章会讲解如何从12位bit CT值转换为8bit RGB值

以上是关于1.4 DICOM图像CT值计算的主要内容,如果未能解决你的问题,请参考以下文章

医学图像之DICOM格式解析

图像识别 | 使用Python对医学Dicom文件的预处理(含代码)

医学图像三维可视化和三维重建的区别

python 读取dicom tag 结果为空值

数字图像处理基础笔记

数字图像处理基础笔记