C++ 符号在16位dicom图像中的应用

C++ 符号在16位dicom图像中的应用,c++,type-conversion,dicom,sign,bit-representation,C++,Type Conversion,Dicom,Sign,Bit Representation,我正在尝试开发一个dicom图像查看器。我已成功解码图像缓冲区。在C++中,我将所有图像像素值存储在无符号char < /Cuff>缓冲区中。 现在,当我显示图像时,对于像素表示(00280103)=0的图像,它工作正常。有人能告诉我如何将这个签名转换应用到这些解码缓冲区中吗。我不知道如何将这个有符号位转换成无符号位(我认为通常使用typecast的转换效果不好)。请张贴16位图像的回放,这是我现在真正需要的 我试图从头开始创建一个查看器,它只是将图像放在屏幕上。我已经成功地完成了dicom图像

我正在尝试开发一个dicom图像查看器。我已成功解码图像缓冲区。在C++中,我将所有图像像素值存储在<代码>无符号char < /Cuff>缓冲区中。 现在,当我显示图像时,对于像素表示(00280103)=0的图像,它工作正常。有人能告诉我如何将这个签名转换应用到这些解码缓冲区中吗。我不知道如何将这个有符号位转换成无符号位(我认为通常使用typecast的转换效果不好)。请张贴16位图像的回放,这是我现在真正需要的


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

考虑TransferSyntax(endianess),确保将像素数据正确读取到有符号短数组中。然后应用。在设置ymin=0时,ymax=255可实现8位重缩放

通常,在处理DICOM像素数据时,需要考虑更多因素:

  • 光度解释
  • 存储位,高位
  • 模态LUT(重新缩放斜率/截距或DICOM标头中存储的查找表)
我假设光度学解释是单菱形2,高位=存储位-1,模态LUT是身份转换(斜率=1,截距=0)

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


请提供更多关于您想要实现的目标的详细信息,因为您的问题目前需要的答案比您可能预期的多得多。尤其重要的是,要知道如何在缩小16->8位时控制信息丢失。你使用窗口吗?还是只是缩小原始像素数据的比例?您的查看器是否将支持“按原样显示”以外的功能,例如调整亮度/对比度?您是在使用DICOM库还是真的从头开始构建DICOM文件阅读?的副本?谢谢您的时间,我已经在问题中添加了详细信息。这个问题是关于将16位图像转换为8位图像的问题,我已经成功地完成了。现在我需要知道如何在dicom图像中应用符号位。没有符号位或无符号位。只有位、有符号类型和无符号类型