将标记应用于16位DICOM图像

3
我正在尝试开发一个DICOM图像查看器。我已经成功解码了图像缓冲区。我将所有图像像素值存储在C++中的一个unsigned char缓冲区中。
现在,当我显示图像时,对于像素表示(0028,0103)=0的图像,一切正常。请问有人能够向我展示如何将这个带符号的转换应用到这些解码的缓冲区中吗?我不知道如何将这些带符号位转换为无符号位(我认为通常使用类型转换的转换效果不好)。请回复16位图像的内容,这是我现在真正需要的。
我正在尝试从头开始创建一个查看器,它简单地将图像放在屏幕上。我已经成功完成了DICOM图像的解码和显示。但是当我尝试打开一个具有像素表示(tag 0028,0103)=1的图像时,图像显示不正确。将16位转换为8位并应用窗口级别和宽度(在DICOM图像内找到的值)后,转换就变得非常线性。

请提供更详细的信息,说明您想要实现什么,因为您目前提出的问题需要比您预计的回答还要多。特别重要的是要知道当降低16 -> 8位时,您想如何控制信息损失。您是否应用窗口设置?还是只是缩小原始像素数据?您的查看器是否支持除“按原样显示”之外的功能,例如调整亮度/对比度?您是否使用DICOM库,还是真正从头开始构建DICOM文件阅读? - Markus Sabin
是否为 https://dev59.com/r5vga4cB1Zd3GeqP9OqO 的副本? - Severin Pappadeux
谢谢您的时间,我已将细节添加到问题中。 - user6848035
这个问题是关于将16位图像转换为8位图像,我已经成功完成了。现在我需要知道如何在DICOM图像中应用符号位。 - user6848035
没有“有符号位”或“无符号位”,只有位和“有符号类型”和“无符号类型”。 - phuclv
1个回答

0

请确保正确读取像素数据到有符号短整型数组中,并考虑传输语法(字节序)。然后应用DICOM标准中的窗位方程。将ymin=0,ymax=255设置为8位缩放。

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

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

我假设光度解释为MONOCRHOME2,高位=存储位数-1,模态LUT为恒等变换(斜率=1,截距=0)。

其他SO帖子涉及此主题:

将像素数据转换为8位

像素数据解释


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接