1

我正在用 C# 实现一个 DICOM 图像查看器。我不(因为我不允许)使用任何为我进行图像处理的框架或库。

我可以使用哪种算法计算窗口?(带窗口中心和窗口宽度)

我有以下工作要做:

  • 像素数据存储为 byte[]
  • 像素存储在 Hounsfield 单元中(见第一个代码)

我尝试了以下方法:

计算重新缩放:(已编辑)

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[] 中。
例如,Rescale Intercept 为 -1024,Rescale Slope 为 1。当 Window Center 为 40,Window Width 为 350 时,一切都是黑色的。
所以还是有问题。有什么建议么?

4

1 回答 1

1

我认为问题是由于斜率/截距的结果被截断为一个字节并且值的较高部分丢失了

Housfield 值不适合单个字节。此外,可以对 Hounsfield 值进行签名。

于 2017-02-20T13:21:19.560 回答