【发布时间】:2014-07-09 21:51:52
【问题描述】:
我正在使用 c# ClearCanvas 库制作图像查看器,并且我正在尝试显示图像,并将其存储的窗口中心和应用于图像的窗口宽度值。为此,我从 Dicom 文件中读取窗口中心、窗口宽度和原始像素数据,并将其转换为字节数组,然后使用以下代码应用窗口设置:
int lower_bound = window_center - window_width / 2;
int upper_bound = window_center + window_width / 2;
//copy matrix and do window caluclations
float[] wlpixels = new float[pixels.Length];
for (int i = 0; i < w * h; i++)
{
if (pixels[i] <= lower_bound)
wlpixels[i] = 0;
else if (pixels[i] > upper_bound)
wlpixels[i] = 255;
else
{
wlpixels[i] = ((pixels[i] - lower_bound) / window_width) * 255;
}
}
这对于某些图像来说就像一个魅力,而其他图像,特别是具有低或负窗口中心值的图像,显示不正确。它们显示了大量不应该是白色的白色像素。
我的窗口/级别计算是否正确?如果没有,我该如何正确执行它们?如果是这样,我还需要做什么才能使其适用于所有场景?
【问题讨论】:
-
获取原始
pixels值时,是否考虑了Rescale Intercept (0028,1052) 和Rescale Slope (0028,1053) ?如果我没记错的话,窗口级别和宽度对应于重新缩放的像素(如果适用)。 -
不,我还没有考虑到这一点,但我正在使用的工作图像和损坏图像的重新缩放斜率为 1,截距为 0
-
您需要同时使用窗口和重新缩放,但是对于您的情况,重新缩放并不重要,因为它是身份调整。
-
您的窗口/级别计算似乎是正确的,我将尝试查找一些测试数据,以便尝试此代码。当然,您的图像总是有可能具有不正确的窗口窗口/中心值,您可能想尝试在其他查看器中查看这些图像,看看他们的反应。
-
谢谢。但是我得到了 clearcanvas 的 drawToBitmap() 函数来创建初始图像,然后可以从提取的像素矩阵中进行窗口/级别计算。
标签: c# pixels dicom clearcanvas