本文由Markdnwon编辑器编辑完成。
1.前言:
说实话,之前对DICOM中的PixelRepresentation,这个tag, 有一定的了解,但了解不是很深。直到在实际的应用中,遇到了因为这个tag的值,而引发的问题,才开始准备对它,重新认识一下。
由于我们处理的,主要是CT图像。因此,就先从CT图像开始说起。
2. 认识Pixel Representation
要认识dicom tag, 最好的方法,就是从DICOM标准中去看。
从网站: https://dicom.innolitics.com/ciods/ct-image/image-pixel/00280103上搜索到CT图像中的Pixel Representation, 可以看到它所属的位置和tag的说明。
从以上两幅图中,可以看出,Pixel Representation是属于Image Pixel范畴下的一类标签,也就是必须存在的一个标签。
它体现了构成每一张图像的像素点的数据类型。也就是说,是无符号型,还是有符号型的数字。
那么,为什么这个TAG值是如此重要,而且它的两个值,到底影响了哪些结果。我们不妨从测试图像中,找到两个不同的图像,来观察一下。
通过上述比较两个不同患者的检查,分别是PixelRepresentation为0和1, 两种情况下的关键tag的区别,可以看出:
PixelRepresentation | 0 | 1 |
---|---|---|
BitsAllocated | 16 | 16 |
BitsStored | 12 | 16 |
HighBit | 11 | 15 |
RescaleSlope | 1 | 1 |
RescaleIntercept | -1024 | 0 |
从上面的表格对比中,可以看出,
PixelRepresentation, 会影响BitsStored, HighBit, RescaleIntercept的值。
那么为什么会这样呢?
我们接下来再看一下PixelRepresentation对pixel_array的影响。
2.1 读取不同图像的pixel_array
从这两幅截图,可以明显得看出:
1> PixelRepresentation=0时,它的pixel_array的像素值类型是:uint16, 即无符号整型; =1时,则是有符号int16;
2> uint16和int16,它们的值的范围是不一样的;
uint16 | int16 |
---|---|
没有符号位 0 ~ 65535 | 最高位是符号位; 负数范围:从 -2^15 到 -1,即从 -32768 到 -1 正数范围:从 0 到 2^15 - 1,即从 0 到 32767 |
这也可以理解,为什么刚才PixelRepresentation=1时,它的HighBit是15; 而PixelRepresentation=0时,HighBit是12.
因为,对于uint16的类型,它不需要单独拿出一位来表示符号位。
从刚才的两幅CT图像来看,大部分CT图像,它的像素范围,就是正负4000左右。但是为什么DICOM里面,要给每一个像素点,分配16位的来存储呢?这样是不是会造成存储空间的浪费。
带着这个疑问,我在kimi里面进行提问,给出的回答大致如下:
2.2 Rescale Intercept和Rescale Slope
接下来说明,Rescale Slope和Rescale Intercept.
由于CT图像,可以查看人体的各个器官。而由于每个器官的构造不同,因此每个器官,它们的CT值是不同的。