Dicom窗宽和窗位公式无法给出灰度值

4

我正在尝试在我的应用程序中实现Dicom规范中的窗宽和水平公式。但目前它没有返回任何灰度值。Dicom将公式指定如下:

这些属性按照以下伪代码应用,其中x是输入值,y是具有从ymin到ymax范围的输出值,c是窗口中心(0028,1050),w是窗口宽度(0028,1051):

if (x <= c - 0.5 - (w-1)/2), then y = ymin
else if (x > c - 0.5 + (w-1)/2), then y = ymax,
else y = ((x - (c - 0.5)) / (w-1) + 0.5) * (ymax - ymin)+ ymin

所以我已经将其翻译成以下C#语法:

if (pixelData[i] <= wLevel - 0.5 - (wWidth - 1) / 2)
    oColor = 0;
else if (pixelData[i] > wLevel - 0.5 + (wWidth - 1) / 2)
    oColor = 255;
else
    oColor = (int)((pixelData[i] - (wLevel - 0.5)) / (wWidth - 1) + 0.5) * (255 - 0) + 0;

然而,公式的最后一部分为:
oColor = (int)((pixelData[i] - (wLevel - 0.5)) / (wWidth - 1) + 0.5) * (255 - 0) + 0;

只返回0

示例

有人知道这是怎么可能的吗?

1个回答

7
VOI LUT的意思是将给定的像素范围映射到可显示的值(通常为0..0xFF),对于超出范围的像素值使用夹紧。这意味着,对于给定的窗口/水平线,我们可以计算出可显示范围:level-window/2 , level + window/2。对于在该范围内的像素值,使用线性变换:((pixel - lower_window_limit) / window) * displayable_range,其中lower_window_limitlevel - window/2。你的公式中缺少了-window/2

好的,嗯,只有当我将代码的最后一部分更改为 oColor = ((pixelData[i] - (wLevel - wWidth / 2)) / wWidth) * 255; 我仍然得到相同的结果 o.O - Timo Willemsen
哦天啊,它涉及到浮点数被转换为整数。我从来不擅长处理这个。我已经将其更改为以下内容以使其正常工作:oColor = ((pixelData[i] - (wLevel - wWidth / 2)) *255) * wWidth; - Timo Willemsen

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