C# 使用Dicom输出像素颜色(灰度)错误
我正在使用邪恶的DICOM构建统一的2d图像(即纹理2d)。与我从其他DICOM查看器获得的结果相比,输出像素值是错误的。我是DICOM开发新手,不知道自己做错了什么。我已经被困在这几个星期了。感谢您的帮助 我使用以下公式:C# 使用Dicom输出像素颜色(灰度)错误,c#,evil-dicom,C#,Evil Dicom,我正在使用邪恶的DICOM构建统一的2d图像(即纹理2d)。与我从其他DICOM查看器获得的结果相比,输出像素值是错误的。我是DICOM开发新手,不知道自己做错了什么。我已经被困在这几个星期了。感谢您的帮助 我使用以下公式: 我还从以下地方读到了这个答案: 关于我正在使用的DICOM文件的已知信息: 分配的位:16 存储位:16 高位:15 行、列:512 像素表示:0(即未压缩) 窗口中心:40 窗宽:350 重缩放截距:-1024 重新缩放坡度:1 //Convert pixel dat
我还从以下地方读到了这个答案:
关于我正在使用的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
}
//将像素数据转换为8位灰度
对于(int i=0;i
左边是我的输出,右边是其他DICOM查看器的输出
我将像素数据中的字节顺序颠倒过来。像素值应为:
ushort pixel = (ushort)(pixelData[i + 1] * 256 + pixelData[i]);