我正在c#.net中开发一个dicom查看器。我需要一些帮助来计算Pixel的HU值。我知道计算HU的公式是,
HU = Pixel Value * Rescale Slope + Rescale Intercept
我做了一些计算,并从我原来的dicom像素值中检索出来,但那并没有给我正确的HU值。我的问题是什么才是像素值。任何人都帮助我。
这是我的代码
public void calculateHU(string x,string y)
{
Int32 intercept, slope,pix;
intercept = -1024;
slope = 1;
int xx, yy;
xx = Convert.ToInt32(x);
yy = Convert.ToInt32(y);
xx = xx +Convert.ToInt32( imagerect.X);
yy = yy + Convert.ToInt32( imagerect.Y);
pix = getpixelvalue(xx,yy);
double hu = pix * slope + intercept;
}
public Int32 getpixelvalue(int x, int y)
{
string c;
c = pix16[imgno][y * bmd.width + x].ToString();
return Convert.ToInt32(c);
}
答案 0 :(得分:2)
如果像素表示(0028,0103)设置为0(无符号),则像素数据值应为非负数。根据您的截距和斜率分别为-1024和1的示例,原始像素值必须为-4才能产生HU值-1028。
如果您希望获得低至-1028的结果HU值,则很可能通过负足够的Rescale Intercept值(以及可能的Rescale Slope)值来管理。
不是硬编码Rescale Intercept和Slope,而是分别从图像,标签(0028,1052)和(0028,1053)中获取这些值,并应用于HU计算。