了解DICOM图像中的BPP

Cha*_*tte 4 dicom

几天后我使用FO-DICOM处理DICOM文件.

我正在使用一组dicom文件进行测试,并且我一直在打印"Photometric Interpretation"和"Sample Per Pixel"值,以便更好地了解我正在使用的图像类型.

对于光度学解释,结果是"MONOCHROME2",对于每像素样本,结果是"1".

通过阅读标准的第3部分,我理解的是MONOCHROME2代表灰度,从最小值开始为黑色.

但是每个像素的样本到底是什么?我认为这代表了每个像素的字节数(而不是位数)(对于灰度等级,这个逻辑是每像素有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
Run Code Online (Sandbox Code Playgroud)

kri*_*_sw 6

属性(0028,0002)SamplesPerPixel仅指彩色图像,并告诉您图像中存在的平面数(例如RGB为3),所以你有

PhotometricInterpretation=RGB
SamplesPerPixel=3
Run Code Online (Sandbox Code Playgroud)

每像素8位(我将在下面重新访问BPP).只要你有PhotometricInterpretation= MONOCHROME1或MONOCHROME2,你可以期望它SamplesPerPixel是1而不是别的.

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

BitsAllocated (0028,0100)
BitsStored (0028,0101)
HighBit (0028,0102)
Run Code Online (Sandbox Code Playgroud)

它们告诉您使用多少位来编码像素值(BitsAllocated)以及这些位中的哪些位实际上包含灰度信息(BitsStored,HighBit).HighBit是零基础的,通常但不一定=BitsStored-1

举例说明:对于CT图像,以hounsfield单位表示灰度值非常常见,范围从-1000到+3000.它们由12位表示,以2字节对齐方式存储,因此

BitsAllocated (0028,0100) = 16
BitsStored (0028,0101) = 12
HighBit (0028,0102) = 11
Run Code Online (Sandbox Code Playgroud)

另一个自由度PixelRepresentation告诉您像素数据是无符号(0)还是2(2)补码(1).我已经看过CT图像,但是对于除CT之外的图像类型,有符号像素数据是相当不寻常的.

在你的例子中,我假设Bits Allocated == 32或(不太可能)你有一个包含多个图像的数据集('frames'),所以NumberOfFrames (0028,0008)> 1.如果没有Frame of Frames,你可以放心地假设有只有一帧.

我在这里过分简化了一些,特别是关于彩色图像,但我觉得这很复杂;-).基本上,DICOM提供任何可想象的自由度来编码像素数据并描述标题中的编码.

我想我已经建议你在最近的帖子中看看DCMTK.DicomImage类具有一个很好的接口(getInterData()),它关注所有这些东西,并以标准化格式提供从DICOM文件读取的像素数据.

[编辑]:您可以在这里发布数据集的DICOM转储,我会看看它并告诉您如何解释像素数据.