几天后我使用FO-DICOM处理DICOM文件。
我使用一组dicom文件进行测试,并且我已经打印了光学解释"光度解释" "每像素样本"价值观,以便更好地了解我正在使用的图像。
结果是" MONOCHROME2"用于光度学解释," 1"对于每像素样本。
通过阅读标准的第3部分,我理解的是MONOCHROME2代表一个灰度,从最小值的黑色开始。
但是每个像素的样本究竟是什么?我认为这代表了每个像素的字节(而不是位)的数量(对于灰度等级,这个逻辑是每个像素有8个位?)< / p>
但我的问题是,实际上,我的图像似乎有32 bpp。 我正在处理512 * 512像素的图像,并将它们转换为字节数组。所以我期待512 * 512 = 262144字节的数组。 但是我得到了1048630字节的数组(比4 * 262144多一点)
有人有解释吗?
修改
这是我的一些数据:
PhotometricInterpretation=MONOCHROME2
SamplePerPixel=1
BitsAllocated=16
BitsStored=12
HighBit=11
PixelRepresentation=0
NumberOfFrames=0
答案 0 :(得分:5)
属性(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
)以及这些位中的哪些位确实包含灰度信息(BitsStored
,HighBit
)。 HighBit
从零开始,通常但不一定= BitsStored-1
举例说明:对于CT图像,以hounsfield单位表示灰度值非常常见,范围从-1000到+3000。它们由12位表示,以2字节对齐方式存储,所以
BitsAllocated (0028,0100) = 16
BitsStored (0028,0101) = 12
HighBit (0028,0102) = 11
另一个自由度是PixelRepresentation
,它告诉您像素数据是无符号(0)还是2s补码(1)。我已经看过CT图像,但是对于CT以外的图像类型,有符号像素数据是不常见的。
在您的示例中,我假设分配的位数== 32或(不太可能)您拥有包含多个图像的数据集(“框架”),因此NumberOfFrames (0028,0008)
&gt; 1.如果没有帧数,您可以安全地假设只有一帧。
我在这里过分简化了一下,特别是关于彩色图像,但我觉得这很复杂;-)。基本上,DICOM提供任何可想象的自由度来编码像素数据并描述标题中的编码。
我想我建议你在最近的帖子中看看DCMTK。 DicomImage类具有一个很好的接口(getInterData()
),它关注所有这些东西,并以标准化格式提供从DICOM文件读取的像素数据。
[编辑]:您可以在此处发布数据集的DICOM转储,我会看看它并告诉您如何解释像素数据。