理解DICOM图像中的BPP

5

最近几天,我一直在使用FO-DICOM处理DICOM文件。

我使用了一组dicom文件进行测试,并打印了“光度解释”和“每像素样本”值,以便更好地了解我正在使用的图像种类。

结果显示,“Photometric Interpretation”是“MONOCHROME2”,“Sample Per Pixel”是“1”。

通过阅读标准的第3部分,我了解到MONOCHROME2表示从最小值开始的灰度级别。

但“Sample Per Pixel”到底是什么?我认为这代表每像素的字节数(而不是位数)(对于灰度级比例来说,每像素8个位很常见吧?)

我的问题是,我的图像似乎实际上有32 bpp。我正在使用512*512像素的图像,并将它们转换为字节数组。因此,我期望得到512*512=262144字节的数组。但我得到的数组是1048630字节(略大于4*262144)

有人能解释一下吗?

编辑:

以下是我的一些数据:

PhotometricInterpretation=MONOCHROME2
SamplePerPixel=1
BitsAllocated=16
BitsStored=12
HighBit=11
PixelRepresentation=0
NumberOfFrames=0

关于样本数据:无符号12位数据以16位对齐编码,低12字节是像素值。0为黑色,4096为白色。如果是CT扫描,我期望它附近有一个RescaleSlope属性接近-1000,将像素值映射到Hounsfield单位。当行=列=512时,像素数据必须为0.5 MB(512 * 512 * 2字节),否则数据集未正确编码。NumberOfFrames = 0肯定是编码错误。 - Markus Sabin
假设数据集未经压缩。 - Markus Sabin
谢谢,我会操作这些数据来训练自己,如果还有什么不明白的地方,我可能会再回来的 :) - Charrette
1个回答

8

属性(0028,0002)SamplesPerPixel 仅适用于彩色图像,并告诉您图像中存在的平面数量(例如RGB为3),因此您有:

PhotometricInterpretation=RGB
SamplesPerPixel=3

每像素8位(下面将再次讨论BPP)。只要PhotometricInterpretation = MONOCHROME1或MONOCHROME2,您就可以期望SamplesPerPixel为1,没有其他内容。

您需要考虑的是每像素的位数:

BitsAllocated (0028,0100)
BitsStored (0028,0101)
HighBit (0028,0102)

这些指示您用于编码像素值的位数(BitsAllocated)以及其中哪些位真正包含灰度信息(BitsStoredHighBit)。HighBit从零开始计数,通常但不一定等于BitsStored-1
以下是一个示例:对于CT图像,非常常见的是使用范围为-1000到+3000的豪氏单位表示灰度值。这些由12位表示,并以2字节对齐方式存储。
BitsAllocated (0028,0100) = 16
BitsStored (0028,0101) = 12
HighBit (0028,0102) = 11

另一个自由度是PixelRepresentation,它告诉您像素数据是以无符号(0)还是以二进制补码(1)编码的。我已经看到CT图像中有两种情况,但对于除CT之外的图像类型,带符号的像素数据相当罕见。
在您的示例中,我会假设Bits Allocated == 32或者(不太可能)您有包含多个图像('frames')的数据集,因此NumberOfFrames (0028,0008)>1。如果没有帧数,您可以安全地假设只有一个帧。
这里我有点过于简化了,特别是关于彩色图像,但我认为这已经足够复杂了 ;-)。基本上,DICOM提供了任何想象得到的自由度来编码像素数据并在标头中描述编码方式。
我想我在最近的帖子中推荐您查看DCMTK。DicomImage类具有一个很好的接口(getInterData()),它关心所有这些事情并以规范化的格式提供从DICOM文件读取的像素数据。
[编辑]:请随意在此处发布您的数据集的DICOM转储,我会查看它并告诉您如何解释像素数据。

谢谢你的回答,我还在尝试使用fo-dicom,也许稍后我会看一下DCMTK,目前我正在尝试理解它是如何工作的!我已经编辑了我的帖子。 - Charrette
不想强迫你使用DCMTK,但我不了解FO-DICOM。 - Markus Sabin
如果样本每像素(0028:0002)的值大于1(RGB图像为3),则平面配置(0028:0006)的值为0表示按像素颜色(RBG,RGB,RGB),而值为1表示按平面颜色(红色平面,绿色平面和蓝色平面)。 - LEADTOOLS Support

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接