我正在尝试开发一个 dicom 图像查看器。我已经成功解码了图像缓冲区。我将所有图像像素值存储在 C++ 中的 unsigned char
缓冲区中。
现在,当我显示图像时,像素表示 (0028,0103) =0 的图像工作正常。有人能告诉我如何将这个带符号的转换应用到这些解码缓冲区中吗?我不知道如何将这个有符号位转换为无符号位(我认为使用类型转换的通常转换效果不佳)。请发布 16 位图像的回放,这就是我现在真正需要的。
我正在尝试从头开始创建一个查看器,它只是将图像放在屏幕上。我已经顺利完成了dicom图像的解码和显示。但是当我尝试打开像素表示(标签 0028,0103)=1 的图像时,图像显示不正确。从 16 位到 8 位的转换与应用窗口级别和宽度(在 dicom 图像中找到的值)一起完成,转换只是线性的。
最佳答案
通过考虑 TransferSyntax(字节序),确保将像素数据正确读入带符号的短数组。然后申请 windowing equation from the DICOM Standard .在设置 ymin=0 时,ymax = 255 重新缩放到 8 位。
一般来说,处理 DICOM 像素数据时需要考虑更多因素:
- 光度解释
- 存储的位,高位
- 模态 LUT(重新缩放斜率/截距或存储在 DICOM header 中的查找表)
我假设 Photometric Interpretation 是 MONOCRHOME2,High Bit = Bits Stored - 1,Modality LUT 是 Identity transformation(Slope = 1,Intercept = 0)。
处理此主题的其他 SO 帖子:
关于c++ - 将符号应用于 16 位的 dicom 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372526/