image-processing - 如何以可靠的方式获取 DICOM 像素数据的颜色深度?

标签 image-processing colors rgb dicom

DICOM 文件可能包含未压缩的像素数据或 compressed pixel data .它的PhotometricInterpretation(0028,0004)可以是MONOCHROME1/MONOCHROME2/RGB/PALETTE COLOR/YBR等。还有一个Pydicom page about color space .

但是从这些页面或任何其他 DICOM 网站,我不清楚如何获得颜色深度。

BitsAllocated (0028,0100)BitsStored (0028,0101) 标签指的是颜色深度吗?它的颜色深度可以不同于这两个标签值吗?

如何以可靠的方式获取 DICOM 像素数据的颜色深度?

最佳答案

Bits Stored 是用于实际颜色或灰度数据的位数,因此它至少与颜色深度有关。 Bits Allocated 始终是 8 的倍数,因为数据始终以字节为单位组织,其中某些高位可能不会用于数据(Bit Data 除外,它为 1) .

获取位深度并不像看起来那么简单。虽然用于数据的位数大部分可以定义,但数据的分辨率(例如相邻值之间的距离)也可能取决于Photometric Interpretation,当然还取决于由模态本身。

最简单的情况是单色数据(Photometric InterpretationMONOCHROME1MONOCHROME2),其中颜色深度直接由定义Bits Stored 典型值为 12、14 或 16。RGB 数据也是如此(例如,数据最初记录为 RGB),而 Bits Stored 确实如此 可以有 different values对于@kritzel_sw 正确提到的 JPEG2000 编码图像,我还必须看到任何 RGB 数据的 Bits Stored 不同于 8。更新:我仍然没有看到这个,但发现 RTDOSE 图像 can have 32 Bits Stored .

对于 YBR 颜色空间中的颜色数据(Photometric Interpretation is YBR_xxx),这不太清楚。这在某种程度上取决于您对颜色深度的定义。鉴于使用的颜色空间是 YBR 而不是 RGB,并且每个分量使用的位数可能不同(例如在 YBR_FULL_422 中,它用于一些 JPEG 压缩图像,我们对 2 个 channel 进行了下采样) ,如果将生成的图像转换为 RGB(主要完成的),每个颜色分量使用 8 位,但由于这个原因,可能值的实际数量少于 256。因此,如果您对颜色深度的定义取决于每个 RGB channel 使用的位数,那么在这种情况下答案可能是 8,但是如果您定义每个 YBR channel 的颜色深度,答案可能会有所不同并且取决于 光度学解释Bits Stored

一个特例是 PALETTE COLORPhotometricInterpretation,其中可能的颜色在颜色表中定义。在这种情况下,每个颜色分量的颜色数在 Palette Color Lookup Table Descriptor 的第一个值中定义。 (0028,1101-1104),这对所有 3 个表都是相等的(例如,对于红色、绿色和蓝色组件)。实际颜色深度必须从该值导出。

考虑到所有这些,答案可能是:视情况而定。我还将添加@kritzel_sw 的注释,许多 IOD 限制了像素数据编码方式的自由度,这将缩小任何具体类型图像的颜色深度的可能性。

如果有人有更直接的答案,我很感兴趣。

关于image-processing - 如何以可靠的方式获取 DICOM 像素数据的颜色深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69446381/

相关文章:

node.js - 使用OpenCV从X射线图像进行3D重建所需的信息

image - 图像的结构如何

bash - 将 RGB 转换为 8 位

opencv - OpenNI RGB 图像到 OpenCV BGR IplImage 的转换?

python - 平均颜色有点错误。 (np.mean())

python - 将 .overrideColor 值分配给 Maya 中的按钮

python - 如何在图像中找到矩形轮廓?

image - 二值图像中的去偏斜字符

twitter-bootstrap - 如何更改链接颜色( Bootstrap )

python - 如何使用 OpenCV 找到红色区域?