在 DICOM 中计算窗口
Calculate Windowing in DICOM
我正在用 C# 实现 DICOM 图像查看器。我不(因为不允许)使用任何为我进行图像处理的框架或库。
我可以使用哪种算法计算窗口? (Window 中心和 Window 宽度)
我需要处理以下内容:
- 像素数据存储为字节[]
- 像素存储在亨斯菲尔德单位(见第一个代码)
我尝试了以下方法:
正在计算重新缩放:(已编辑)
var intArray = new int[PixelData.Length];
for (int i = 0; i < this.PixelData.Length; i++)
{
intArray[i] = rescaleSlope*this.PixelData[i] + rescaleIntercept;
}
计算Window计算
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);
}
}
第二个代码return几乎一直都是0,所以图像几乎是黑色的。知道我做错了什么吗?
编辑 21.02.2017
我按照 Paolo Brandolis 的建议编辑了代码。我将 HU 存储在一个 int[].
中
Rescale Intercept 是例如-1024 且 Rescale Slope 为 1。当 Window Center 为 40 且 Window Width 为 350 时,所有内容均为黑色。
所以还是有问题。有什么建议吗?
我认为问题是由于slope/intercept的结果被截断为一个字节而丢失了值的较高部分
Housfield 值不适合单个字节。此外,可以对 Hounsfield 值进行签名。
我正在用 C# 实现 DICOM 图像查看器。我不(因为不允许)使用任何为我进行图像处理的框架或库。
我可以使用哪种算法计算窗口? (Window 中心和 Window 宽度)
我需要处理以下内容:
- 像素数据存储为字节[]
- 像素存储在亨斯菲尔德单位(见第一个代码)
我尝试了以下方法:
正在计算重新缩放:(已编辑)
var intArray = new int[PixelData.Length];
for (int i = 0; i < this.PixelData.Length; i++)
{
intArray[i] = rescaleSlope*this.PixelData[i] + rescaleIntercept;
}
计算Window计算
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);
}
}
第二个代码return几乎一直都是0,所以图像几乎是黑色的。知道我做错了什么吗?
编辑 21.02.2017
我按照 Paolo Brandolis 的建议编辑了代码。我将 HU 存储在一个 int[].
中
Rescale Intercept 是例如-1024 且 Rescale Slope 为 1。当 Window Center 为 40 且 Window Width 为 350 时,所有内容均为黑色。
所以还是有问题。有什么建议吗?
我认为问题是由于slope/intercept的结果被截断为一个字节而丢失了值的较高部分
Housfield 值不适合单个字节。此外,可以对 Hounsfield 值进行签名。