【问题标题】:Dicom Window width & level formula not giving greyvaluesDicom 窗口宽度和级别公式不给出灰度值
【发布时间】:2014-08-25 20:38:53
【问题描述】:

我正在尝试在我的应用程序中实现 de 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

有人知道这怎么可能吗?

【问题讨论】:

    标签: c# image dicom


    【解决方案1】:

    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
    • 天哪,这与将浮点数转换为整数有关。我从来不擅长那个。我已将其更改为以下内容以使其正常工作:oColor = ((pixelData[i] - (wLevel - wWidth / 2)) *255) * wWidth;
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2022-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多