如何以可靠的方式获取 DICOM 像素数据的颜色深度?
How to get color depth of DICOM pixel data in reliable way?
DICOM 文件可能包含未压缩的像素数据或 compressed pixel data. It's PhotometricInterpretation (0028,0004)
can be MONOCHROME1/MONOCHROME2/RGB/PALETTE COLOR/YBR etc. There is also a Pydicom page about color space。
但是从这些页面或任何其他 DICOM 网站,我不清楚如何获得颜色深度。
BitsAllocated (0028,0100)
或 BitsStored (0028,0101)
标签指的是颜色深度吗?它的颜色深度可以不同于这两个标签值吗?
如何以可靠的方式获取 DICOM 像素数据的颜色深度?
Bits Stored
是用于实际颜色或灰度数据的位数,所以它至少与颜色深度有关。 Bits Allocated
始终是 8 的倍数,因为数据始终以字节组织,其中一些高位可能不会用于数据(除了位数据,它是 1)。
获取位深度并不像看起来那么简单。虽然用于数据的位数大部分可以定义,但数据的分辨率(例如相邻值之间的距离)也可能取决于 Photometric Interpretation
,当然还取决于模态本身提供的分辨率。
最简单的情况是单色数据(Photometric Interpretation
是MONOCHROME1
或MONOCHROME2
),其中颜色深度直接由Bits Stored
定义,典型值为12、14或 16. RGB
数据(例如最初记录为 RGB 的数据)也是如此,虽然 Bits Stored
确实可以有 different values for JPEG2000 encoded images as correctly mentioned by @kritzel_sw, I yet have to see any RGB
data with Bits Stored
different from 8. Update: I still haven't seen this, but found that RTDOSE images can have 32 Bits Stored.
对于 YBR 颜色 space 中的颜色数据(Photometric Interpretation
是 YBR_xxx
),这不太清楚。这在某种程度上取决于您对颜色深度的定义。鉴于使用的颜色 space 是 YBR 而不是 RGB,并且每个分量使用的位数可能不同(例如在 YBR_FULL_422
中,它用于一些 JPEG 压缩图像,我们下采样的 2 个通道),如果转换为 RGB(主要完成的操作),则生成的图像对每个颜色分量使用 8 位,但由于这个原因,可能值的实际数量少于 256。因此,如果您对颜色深度的定义取决于每个 RGB 通道使用的位数,那么在这种情况下答案可能是 8,但是如果您定义每个 YBR 通道的颜色深度,答案可能会有所不同并且取决于 Photometric Interpretation
和 Bits Stored
.
一个特例是 PALETTE COLOR
的 PhotometricInterpretation
,其中可能的颜色在颜色 table 中定义。在这种情况下,每个颜色分量的颜色数在 Palette Color Lookup Table Descriptor (0028,1101-1104) 的第一个值中定义,这对于所有 3 个 table 都是相等的(例如,对于红色,绿色和蓝色分量)。实际颜色深度必须从该值导出。
考虑到所有这些,答案可能是:视情况而定。我还要添加 @kritzel_sw 的说明,即许多 IOD 显着限制了像素数据编码方式的自由度,这将缩小任何具体类型图像的颜色深度的可能性。
如果有人有更直接的答案,我很感兴趣。
DICOM 文件可能包含未压缩的像素数据或 compressed pixel data. It's PhotometricInterpretation (0028,0004)
can be MONOCHROME1/MONOCHROME2/RGB/PALETTE COLOR/YBR etc. There is also a Pydicom page about color space。
但是从这些页面或任何其他 DICOM 网站,我不清楚如何获得颜色深度。
BitsAllocated (0028,0100)
或 BitsStored (0028,0101)
标签指的是颜色深度吗?它的颜色深度可以不同于这两个标签值吗?
如何以可靠的方式获取 DICOM 像素数据的颜色深度?
Bits Stored
是用于实际颜色或灰度数据的位数,所以它至少与颜色深度有关。 Bits Allocated
始终是 8 的倍数,因为数据始终以字节组织,其中一些高位可能不会用于数据(除了位数据,它是 1)。
获取位深度并不像看起来那么简单。虽然用于数据的位数大部分可以定义,但数据的分辨率(例如相邻值之间的距离)也可能取决于 Photometric Interpretation
,当然还取决于模态本身提供的分辨率。
最简单的情况是单色数据(Photometric Interpretation
是MONOCHROME1
或MONOCHROME2
),其中颜色深度直接由Bits Stored
定义,典型值为12、14或 16. RGB
数据(例如最初记录为 RGB 的数据)也是如此,虽然 Bits Stored
确实可以有 different values for JPEG2000 encoded images as correctly mentioned by @kritzel_sw, I yet have to see any RGB
data with Bits Stored
different from 8. Update: I still haven't seen this, but found that RTDOSE images can have 32 Bits Stored.
对于 YBR 颜色 space 中的颜色数据(Photometric Interpretation
是 YBR_xxx
),这不太清楚。这在某种程度上取决于您对颜色深度的定义。鉴于使用的颜色 space 是 YBR 而不是 RGB,并且每个分量使用的位数可能不同(例如在 YBR_FULL_422
中,它用于一些 JPEG 压缩图像,我们下采样的 2 个通道),如果转换为 RGB(主要完成的操作),则生成的图像对每个颜色分量使用 8 位,但由于这个原因,可能值的实际数量少于 256。因此,如果您对颜色深度的定义取决于每个 RGB 通道使用的位数,那么在这种情况下答案可能是 8,但是如果您定义每个 YBR 通道的颜色深度,答案可能会有所不同并且取决于 Photometric Interpretation
和 Bits Stored
.
一个特例是 PALETTE COLOR
的 PhotometricInterpretation
,其中可能的颜色在颜色 table 中定义。在这种情况下,每个颜色分量的颜色数在 Palette Color Lookup Table Descriptor (0028,1101-1104) 的第一个值中定义,这对于所有 3 个 table 都是相等的(例如,对于红色,绿色和蓝色分量)。实际颜色深度必须从该值导出。
考虑到所有这些,答案可能是:视情况而定。我还要添加 @kritzel_sw 的说明,即许多 IOD 显着限制了像素数据编码方式的自由度,这将缩小任何具体类型图像的颜色深度的可能性。
如果有人有更直接的答案,我很感兴趣。