0

我正在使用 Evil-DICOM 统一构建 2d 图像(即 texture2d)。与我从其他 DICOM 查看器获得的相比,输出像素值是错误的。我是 DICOM 开发的新手,不知道我做错了什么。我已经坚持了好几个星期了。任何帮助表示赞赏。

我正在使用以下公式:
https ://www.dabsoft.ch/dicom/3/C.11.2.1.2/

我还阅读了以下答案:
如何在 c# 中使用 EvilDICOM 显示 DICOM 图像?

关于我正在使用的 DICOM 文件的已知信息:

分配位:16
位存储:16
高位:15
行,列:512
像素表示:0(即未压缩)
窗口中心:40
窗口宽度:350
重新缩放截距:-1024
重新缩放斜率:1

//Convert pixel data to 8 bit grayscale
for (int i = 0; i < pixelData.Count; i += 2)
{
    //original data - 16 bits unsigned
    ushort pixel = (ushort)(pixelData[i] * 0xFF + pixelData[i + 1]);

    double valgray = pixel;
    valgray = slope * valgray + intercept;    //modality lut

    if (valgray <= level - 0.5 - (window - 1)/2)
    {
        valgray = 0;
    }
    else if (valgray > level - 0.5 + (window - 1)/2)
    {
        valgray = 255;
    }
    else
    {
        valgray = ((valgray - (level - 0.5)) / (window - 1) + 0.5);
    }

    //Assign valgray to RGBA
    colors[i / 2].r = (byte)(valgray);
    colors[i / 2].g = (byte)(valgray);
    colors[i / 2].b = (byte)(valgray);
    colors[i / 2].a = 0xFF    //Alpha = max
}

左边是我的输出,右边是其他 DICOM 查看器的输出 https://drive.google.com/file/d/1IjL48_iZDXAVi4_gzG6fLN3A2td2rwfS/view?usp=sharing

4

1 回答 1

1

我得到了反转像素数据中的字节顺序。像素值应为:

ushort pixel = (ushort)(pixelData[i + 1] * 256 + pixelData[i]);
于 2019-05-04T01:05:46.790 回答