我正在使用Evil-DICOM来统一构造2d图像(即texture2d)。与我从其他DICOM观看者那里得到的相比,输出像素值是错误的。我是DICOM开发的新手,无法弄清楚我做错了什么。我已经坚持了好几个星期。任何帮助表示赞赏。
我正在使用以下公式:
https://www.dabsoft.ch/dicom/3/C.11.2.1.2/
我还从以下地方阅读了此答案:
How to Display DICOM images using EvilDICOM in c#?
有关我正在使用的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
答案 0 :(得分:1)
我把pixeldata中的字节顺序取反了。像素值应为:
ushort pixel = (ushort)(pixelData[i + 1] * 256 + pixelData[i]);