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

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

我正在尝试开发一个 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 帖子:

Converting Pixel Data to 8 bit

Pixel Data Interpretation

关于c++ - 将符号应用于 16 位的 dicom 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372526/

相关文章:

python - "TypeError: a bytes-like object is required, not ' str '"将压缩的 DICOM 卷读入 numpy 数组

java - 如何将bmp图像转换成DICOM文件?

DICOM 切片排序

java - 如何在Java中将 float 组转换为 double 组?

date - 如何在 Hive 中将 ISO 日期转换为 UTC 日期

php - php 中一个函数是否可以返回 2 个或多个不同数据类型的值?

c++ - 错误: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'List' )

c++ - 使用 O(1) 空间重新映射数组

c++ - 为什么我们应该为这段代码使用指针?

java - 在从 Java SOAP 接收的 Windows 调用 (C++) 中使用 Unicode 文本