我在C#中实现了DICOM-Image Viewer。我没有(因为我不允许)使用任何为我进行图像处理的框架或库。
我可以使用哪种算法计算窗口? (使用窗口中心和窗口宽度)
我有以下几点可以使用:
我尝试了以下内容:
var intArray = new int[PixelData.Length];
for (int i = 0; i < this.PixelData.Length; i++)
{
intArray[i] = rescaleSlope*this.PixelData[i] + rescaleIntercept;
}
var lowestVisibleValue = (windowCenter - 0.5 - ((windowWidth - 1) / 2));
var highestVisibleValue = (windowCenter - 0.5 + ((windowWidth - 1) / 2));
for (int i = 0; i < this.PixelData.Length; i++)
{
if (intArray[i] <= lowestVisibleValue)
{
PixelData[i] = 0;
}
else if (intArray[i] > highestVisibleValue)
{
PixelData[i] = 255;
}
else
{
PixelData[i] =(byte)((PixelData[i] - (windowCenter - 0.5))/((windowWidth -1) + 0.5)*(highestVisibleValue - lowestVisibleValue) + lowestVisibleValue);
}
}
第二个代码几乎一直返回0,因此图像几乎是黑色的。我有什么想法我做错了吗?
编辑21.02.2017
我按照Paolo Brandolis的建议编辑了代码。我将HU存储在int []中 重新缩放拦截例如是-1024和Rescale Slope为1.当Window Center为40且Window Width为350时,一切都是黑色的 所以有些事情仍然是错的。有什么建议吗?
答案 0 :(得分:1)
我认为这个问题是由于斜率/截距的结果被截断为一个字节并且值的较高部分丢失而引起的。
Housfield值不适合单个字节。此外,Hounsfield值可能已签名。