DICOM图像中灰度理解

如题所述

第1个回答  2022-07-14

前段时间项目组开发了一款在线影像文件质控的web工具,当时研究员提出了这样一个需求,当点击图像的某一个点时,将这个点不同时间上的(MRI扫描是持续一段时间的,扫描相同部位时,根据扫描频率就会产生多张图像)灰度值用折线图描绘出来。要想完成这个需求,首先就要弄清楚灰度值是什么。

从百度百科上可以看出灰度通俗的讲就是用一个数字描述的黑白程度,值越小图片越暗。这样的理解对应想知道概念的人基本足够了,但是对于咱们coding的工程师,还需要进一步了解。

先来看看常见的的一些概念

RGB :我们生活中通过三原色深浅组成不同的颜色,前端开发中常用RGB来指定色彩,R、G、B 都是 0-255, 比如 (255,255,255) 表示白色,用16进制表示255就是ff, 所以255,255,255 可以表示为 ffffff, 在css样式表中写为 #ffffff。
像素 :图片我们都知道是由多个像素组成的,是图像的最小单元,如果这个单元里只有一个bit大小,也就是只有0和1两个值,由这种像素组成的图像称二值图像,显然它可以表示一个黑白图。这个单位里也可以存一个16位二进制数,24位..., 可以想象存储的越大,一个像素能表达的颜色就越丰富,整体图像呈现就越精细,当然图片占用的空间也就越大。

灰度级 : 灰度级表明图像中不同灰度的最大数量。灰度级越大,图像的亮度范围越大。二值图像一个像素只能存0和1,它的灰度级就为2,8位图一个像素表示0-255共256个灰度值,所有它的灰度级为256, 那么存储一张512*512,256级灰度的图片需要的空间就为 512*512*8=2,097,152 bit ≈ 1.7 Mb 。

图像的灰度化 :

图像的灰度化是让像素点矩阵中的每一个像素点都满足关系:R=G=B,此时的这个值叫做灰度值。如RGB(100,100,100)就代表灰度值为100,RGB(50,50,50)代表灰度值为50。

回顾背景中提到的需求,要想获取到灰度值,首先需要读取到DICOM中的像素数据,DICOM标准中定义PixelData(7FE0,0010)标签表示像素数据,以下使用dcm4che演示获取像素方法

获取到像素数据之后,还是无法确定某一点的灰度值,要实现这样的需要,还需要知道DICOM标准中定义的下面几个Tag

输出结果:

从结果可以看出本例使用的是一张16位灰度图,像素为 900*900 。16位图一个像素使用两个字节(1字节为8bit),所以900*900 总字节长度 = 900*900*2 = 1620000 ,与上面打印的结果也是一致的。假如现在要取第10行第2列的像素值,那么数组下标计算如下:

由于是灰度图像,取到的像素里的内容就是灰度值。至此,要实现最开始需求,只需要完成如下几步即可:

大概思路是这样的,本文主要探讨了灰度值的一种获取方式,部分内容参考了以下文章:

相似回答