3

我正在尝试开发一个dicom图像查看器。我已成功解码图像缓冲区。我将所有图像像素值unsigned char存储在 C++ 的缓冲区中。

现在,当我显示图像时,它适用于像素表示 (0028,0103) = 0 的图像。有人可以告诉我如何将此签名转换应用到这些解码缓冲区中。我不知道如何将此有符号位转换为无符号位(我认为通常使用类型转换的转换效果不佳)。请发布 16 位图像的回放,这是我现在真正需要的。

我正在尝试从头开始创建一个查看器,它只是将图像放在屏幕上。我已经成功完成了dicom图像的解码和显示。但是,当我尝试打开像素表示(标记 0028,0103)=1 的图像时,图像显示不正确。从 16 位到 8 位的转换是与应用窗口级别和宽度(在 dicom 图像中找到的值)一起完成的,转换只是线性的。

4

1 回答 1

0

通过考虑 TransferSyntax(字节序),确保将像素数据正确读取到有符号短数组中。然后应用DICOM 标准中的窗口方程。在设置 ymin=0 时,可以实现 ymax = 255 重新缩放到 8 位。

一般来说,在处理 DICOM 像素数据时需要考虑更多:

  • 光度解释
  • 存储位,高位
  • 模态 LUT(重新调整斜率/截距或存储在 DICOM 标头中的查找表)

我假设光度解释是 MONOCRHOME2,高位 = 存储的位 - 1,模态 LUT 是身份转换(斜率 = 1,截距 = 0)。

其他有关此主题的 SO 帖子:

将像素数据转换为 8 位

像素数据解释

于 2016-11-03T07:23:11.600 回答