医学影像“调窗”(window-leveling)的算法

转载 2006年06月25日 16:08:00

图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 CT 里的例子有软组织、骨头、脑组织、肺、腹部等等。

技术问题:
    显示器往往只有 8-bit, 而数据有 12- 至 16-bits。
    如果将数据的 min 和 max 间 (dynamic range) 的之间转换到 8-bit 0-255 去,过程是个有损转换, 而且出来的图像往往突出的是些噪音。

针对这些问题,研究人员先提出一些要求 (requirements),然后根据这些要求提出了一些算法。这些算法现在都很成熟。

要求一:充分利用 0-255 间的显示有效值域
要求二:尽量减少值域压缩带来的损失
要求三:不能损失应该突出的组织部分

算法分析:
A.  16-bit 到 8-bit 直接转换:

   computeMinMax(pixel_val, min, max); // 先算图像的最大和最小值
   for (i = 0; i < nNumPixels; i++)
     disp_pixel_val[i] = (pixel_val[i] - min)*255.0/(double)(max - min);

这个算法必须有,对不少种类的图像是很有效的:如 8-bit 图像,MRI, ECT, CR 等等。

B. Window-leveling 算法: W/L 是专门为 CT 设计的。原理很简单:CT 图像里不同组织的密度 (用 Hounsfield 单位) 是在固定的值域, 与具体设备和成像软件没有关系。因此,要看头颅时, 我们只需将头颅的值域转换到 0-255 就行了。

CT W/L 不讲头颅值域的 min 和 max, 而说 max - min (即 window_width) 和 (max+min)/2 (即 window_center)。

我们还可以用原来的公式,只是 min 和 max 的算法不一样。

  // 先算图像的最大和最小值
  min = (2*window_center - window_width)/2.0 + 0.5;
  max = (2*window_center + window_width)/2.0 + 0.5;
   for (i = 0; i < nNumPixels; i++)
     disp_pixel_val[i] = (pixel_val[i] - min)*255.0/(double)(max - min);

请注意,CT 图像必须先转换成 Hounsfield 值再做 window-level。 这个转换包括将多余高位 bits 变成 0 (clipping), 和用 recale slope 和 rescale intercept 来做单位转换。

HU[i] = pixel_val[i]*rescale_slope + rescale_intercept

C.非线性转换

我刚刚说的是将 min 和 max 间的数值线性转换到 0-255 之间。 如果 max - min 出来是个很大的数值,比如说 25500, 那就说每 100 原始密度会压缩成一个显示灰度。 这样的损失可能会很大。

因为人眼对灰度地反应式是非线性的,非线性转换可以解决一些问题。 常用算法有 log 和 gamma 两种。gamma 比较好调 gamma 值,因此用得比较多。

for (i = 0; i < nNumPixels; i++)
    disp_pixel_val[i] = 255.0 * pow(pixel_value[i]/(max-min), 1.0/gamma);

D. 有效值域:CT 的 Window-level 有标准的定义,请参看 “Practical CT Techniques", by Wladyslaw Gedroyc and Sheila Rankin, Springer-Verlag。最常用到的有 WW = 400, WL = 40 (实用许多部位); WW = 100, WL = 36 (头);WW = 3200, WL = 200 (骨头),等等。

补充几点:

o   在做任何转换时要注意有效灰度域外的数值的处理。
   最好先用 int 而非 unsigned char 来算,再转入矩阵,以避免 overflow 和 underflow。

   double dFactor = 255.0/(double)(max - min);
   int nPixelVal;

   for (i = 0; i < nNumPixels; i++)
   {

     nPixelVal = (int) ((pixel_val[i] - min)*dFactor);

     if (nPixelVal < 0)    
       disp_pixel_val[i] = 0;
     else if (nPixelVal > 255)
      disp_pixel_val[i] = 255;
     else
      disp_pixel_val[i] = nPixelVal;

   }
  

o   做 window-level 时要注意 min 和 max 之外原始数据的处理

   double dFactor, min, max;
   int nPixelVal;

   min = (2*window_center - window_width)/2.0 + 0.5;
   max = (2*window_center + window_width)/2.0 + 0.5;
   dFactor = 255.0/(double)(max - min);

   for (i = 0; i < nNumPixels; i++)
  {
     if (pixel_val[i] < min)
     {
       disp_pixel_val[i] = 0;
       continue;
     }

     if (pixel_val[i] > max)
     {
       disp_pixel_val[i] = 255;
       continue;
     }

     nPixelVal = (int)((pixel_val[i] - min)*dFactor);

     if (nPixelVal < 0)    
       disp_pixel_val[i] = 0;
     else if (nPixelVal > 255)
      disp_pixel_val[i] = 255;
     else
      disp_pixel_val[i] = nPixelVal;

  }

CT影像中的窗宽和窗位指什么?

  • u012918303
  • u012918303
  • 2015年03月20日 15:11
  • 5483

详解:智能医学影像分析的前沿与挑战

[转]  http://www.leiphone.com/news/201701/b7msIh0xvsuBliIr.html 导语:本文整理自雅森科技高级算法研究员杨士霆,在雷锋网硬...
  • xiangz_csdn
  • xiangz_csdn
  • 2017年01月23日 10:53
  • 4269

医疗信息化及医学影像处理开源包

本文是参考博客园(http://www.cnblogs.com/kesalin/),及自己在工作中经常要接触到的医疗术语进行整理。这些都是医疗行业最常用的行业术语。  医疗信息化: ...
  • ccyccy2012
  • ccyccy2012
  • 2015年01月03日 23:57
  • 1253

医学影像调窗技术源码20130618

  • 2013年06月19日 17:59
  • 102KB
  • 下载

医学影像技术-心血管及脑系统算法(分卷二)

  • 2008年08月27日 09:44
  • 4.62MB
  • 下载

医学影像技术-通用剖析算法

  • 2008年08月27日 09:36
  • 6.47MB
  • 下载

医学影像处理算法开发平台的设计与实现

  • 2008年05月06日 16:29
  • 4.4MB
  • 下载

AI医学影像对癌症的诊断准确率超过三甲医生,放射科医生还有饭吃吗?

随着人工智能技术的日益发展,炙手可热的人工智能概念的应用场景越来越广泛,无人驾驶的热潮方兴未艾,如今医疗AI已经跨越而来,快速走入医疗服务场景之中了。 11月份,原百度人工智能首席科学家...
  • tuotiansudai
  • tuotiansudai
  • 2017年12月04日 17:51
  • 179

医疗时鲜资讯:如何玩转医学影像中心?

题记: 北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也,怒而飞,其翼若垂天之云。是鸟也,海运则将徙于南冥。南冥者,天池也…… 鹏之徙于南冥也,水击三千里,抟扶...
  • zssureqh
  • zssureqh
  • 2016年05月06日 23:04
  • 9838

Slice:Drop——基于Web的医学影像浏览工具

本文由Markdown语法编辑器编辑完成。 随着互联网技术在医疗行业的深入发展,通过浏览器来进行医学影像的浏览、分析和诊断也开始变得越来越流行了。这其实也是云技术在医疗行业的应用之一。试想,无论...
  • yelin042
  • yelin042
  • 2017年11月06日 10:03
  • 122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:医学影像“调窗”(window-leveling)的算法
举报原因:
原因补充:

(最多只允许输入30个字)