将符号应用于16位的dicom图像

时间:2016-11-02 04:31:37

标签: c++ type-conversion dicom sign bit-representation

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

现在,当我显示图像时,它对于具有像素表示(0028,0103)= 0的图像工作正常。有人可以告诉我如何将这个带符号的转换应用到这些解码缓冲区中。我不知道如何将这个有符号的位转换成无符号位(我认为使用类型转换的常规转换并不能很好地工作)。请发布16位图像的重播,这就是我现在真正需要的。

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

1 个答案:

答案 0 :(得分:0)

确保通过考虑TransferSyntax(endianess)将像素数据正确读入带符号的短数组。然后应用windowing equation from the DICOM Standard。在设置ymin = 0时,ymax = 255,实现重新缩放到8位。

一般来说,还有更多要考虑处理DICOM像素数据:

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

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

处理此主题的其他SO帖子:

Converting Pixel Data to 8 bit

Pixel Data Interpretation