将16位灰度DICOM图像转换为8位:正确的过程

时间:2016-10-25 03:51:12

标签: c++ image-processing dicom decoding grayscale

我一直在尝试为DICOM图像创建图像查看器。我的程序几乎可以正确读取所有8位颜色和灰度图像。但是当我尝试使用图像的前8位打开16位图像时,某些部分缺失(使用16位的像素将显示为暗而不是whilte)。我真的不知道如何使用窗口中心,窗口宽度,rescale slop和拦截。请帮助我给出将16位图像转换为8位图像的确切步骤。此外,我不需要查看使用任何压缩技术来存储像素的文件。提前谢谢。

2 个答案:

答案 0 :(得分:2)

关于Rescale Slope / Intercept:它是一个线性方程,因此每个像素值都是通过

计算的
<output pixel value> = <value from pixeldata attribute> * RescaleSlope + RescaleIntercept

这是窗口方程的输入。确切的窗口方程为here

关于倒像素:属性(0028,0103)可能设置为MONOCHROME1,这意味着:min = white,max = black(或“black bones”惯例,即图像包含由管之间的组织引起的衰减和探测器)。这称为极性变换,发生在像素值转换管道的末尾。

所以你的步骤是:

  • 应用rescale slope / intercept

  • 应用窗口

  • 如果PixelRepresentation == MONOCHROME1 - &gt;反转生成的查找表

答案 1 :(得分:1)

没有独特的回应。

您必须记住,16位图像(存储的位)包含的信息多于具有8位图像的图像。一般来说,这些信息无法同时显示,您必须更改用于显示图像的参数。

在DICOM图像中,有不同的DICOM标记可以告诉您如何解释数据像素。 可能有查找表,\或斜率截距,以及\或窗口宽度 - 窗口中心标记。 我想你必须看看这里

Window width and center calculation of DICOM image