详见:http://pan.baidu.com/s/1gfFLbJ9

DICOM医学图像窗口变换的加速算法*

张尤赛 ,陈福民

( 同济大学计算中心, 上海 200092 )

(华东船舶工业学院电子与信息系,江苏 镇江 212003)

E_mail:yszhang100@sina.com

 

摘 要:研究DICOM医学图像的显示技术,提出了一种图象窗口变换的加速算法,该算法简洁、实用、加速效果理想, 可以在动态连续调节图像窗值的情况下实时地显示DICOM医学图像。

关键词: DICOM; 医学图像;DIB;窗口变换

中图分类号: TP391  TP445-39        文献标识码:A

A Fast Algorithm of the Window Transformation for DICOM Medical Images

Zhang Yousai  Chen Fumin

( Center of Computer, Tongji University,  Shanghai  200092  )

( Dept. of Electronics and Information, East China Shipbuilding Institute, Zhenjiang Jiangsu, 212003 )

Abstract:  This paper introduces the display approach of DICOM medical images, and presents a fast algorithm of the window transformation of images, which is able to realtimely display DICOM medical images under the condition of continuously adjusting window values of them.

Key words:  DICOM; medical image; DIB; window transformation

 


1        
引言

90年代中期,美国放射学会(American College of Radiology,ACR)和美国国家电器制造协会(National Electrical Manufactures Association,NEMA)制定了医学数字影像存档和传输标准DICOM(Digital Imaging
and Communication in Medicine)3.0[1],为不同厂家所生产的各种医疗影像设备(如CT、核磁共振、内窥镜、超声波等)提供了接口标准和交互协议,大力推动了PACS (Picture Archiving and Communication System)的发展及应用。由于通用计算机并不直接支持DICOM医学图像的显示,因此DICOM医学图像的计算机实时显示技术是PACS系统的关键技术之一[2]。

本文在简单介绍DICOM文件基本格式的基础上,研究了基于DICOM医学图像的显示技术,重点讨论了DICOM医学图像窗口变换的加速算法,实现了动态连续调节(如利用鼠标拖动)图像窗值时DICOM医学图像的实时显示。

2   DICOM文件的基本格式

DICOM 3.0标准以信息对象、业务类描述的形式,采用规定的数据结构对各种医学信息和图像数据进行编码,形成标准的DICOM文件格式。其数据结构采用数据元素(Data Element)的存储方式,每个数据元素均由标签(Tag)、值的类型(Value
Representation,VR)、值域的长度 (Value Length) 和值域(Value Field)四个基本单元组成,如图1所示。其中,“标签”作为数据元素的标识符唯一地定义数据元素的物理意义(如病人姓名、年龄、设备、图像类型、图像窗值、图像数据等);“值的类型”是取决于DICOM语义的可选项,它描述了数据元素值域的数据类型(如字符串、整型数、浮点数等);“值域的长度”定义了“值域”的字节数;“值域”则含有该数据元素的值。

 DICOM提供了三种语义:IMPLICIT VR、BIG ENDIAN和LITTLE ENDIAN。这些语义规定了数据元素的“值的类型”项是否出现、“值域的长度”项的字节数以及字节在内存中的存储次序等。

目前各种医学影像设备(如CT、MRI等)通常都带有DICOM标准数字接口,可以方便地获得DICOM文件,对于其它非标准的医学图像文件也可以通过计算机处理转换为DICOM的格式。

3  
DICOM医学图像的显示方法

由于在通用计算机中不能直接支持DICOM医学图像的显示,因此需将DICOM文件转换为其它计算机所支持的文件格式,如设备无关位图(Device Independent
Bitmap, DIB)等。

3.1 DIB位图

DIB位图[3]是计算机中普遍应用的位图文件格式,如图2所示。位图文件头说明了文件的组成信息;位图信息头说明了图像数据的基本信息;颜色表则描述了图像显示的色彩信息,即红、绿、蓝三颜色分量。

由于在内存中,只需要位图信息头、颜色表和图像数据即可以显示位图,因此在将DICOM医学图像转换为DIB位图时,只需要根据DICOM文件的相关数据元素完成上述的数据结构和图像数据的转换。由于医学影像一般为灰度图像,因此颜色表中每一个像素的三个颜色分量rgbBlue = rgbGreen = rgbRed。由此可见,采用 DIB位图显示灰度图像的最大灰度级为256级。

3.2  图象数据的窗口变换

由于医学图像数据动态范围大(像素深度通常不低于4096灰度级),因此,一般显示器很难提供如此高的动态范围一次显示整幅图像的全部信息细节。为了逼真地显示出医学图像的全部信息,可以采用下述图象数据窗口变换的方法[4]。

所谓图象数据的窗口变换是指通过限定一个数据观察窗口,将窗口区域的图像数据线性地转换到显示器的最大显示范围内,高于或低于窗口上下限的图像数据则分别设置为最亮或最暗的显示值。这样通过动态地调节窗口的窗宽(图像数据的显示范围)和窗位(显示的图像数据的中心值),可以依次观察到医学图像的全部信息细节。图3为窗口变换图像数据与显示值的关系图,图中V为图像数据,G为显示器显示值,gm为显示器的最大显示值(对应于DIB位图rgbBlue
= rgbGreen = rgbRed = 255),为窗宽,为窗位,(1)式为转换公式。

3.3 窗口变换的加速算法

在利用图像窗值对DICOM医学图像数据作窗口变换时,如果直接用(1)式对所有图像数据(每个像素点)进行变换,则会明显影响图像的显示速度,在视觉上产生延迟。为此,我们提出了下述快速查表的加速算法,以满足动态连续调节图像窗值(如利用鼠标拖动)下实时显示图像的要求。

首先,在打开DICOM医学图像时,根据DICOM数据元素得到图像数据的最大值和最小值以及图像窗值,获得图像数据的分布和对应于(1)式的转换区域(如图4所示),然后根据(1)式在内存中建立一张图像数据转换表,最后采用查表的方法将DICOM图像数据转换为显示数值。这里假设图像显示数值为{0,1,2,…,255}共256级。

图4窗口变换的加速算法的原理图

从图中可以看出,在形成图像数据转换表时,只需在DICOM图像数据的值域内(而不是对所有的像素)按(1)式进行一次计算,然后再利用图像数据指针查表的方法即可实现DICOM图像数据的窗口变换。而且,在动态调节窗值时,无须重新计算整个转换表,只要对窗宽变化范围内的表数据作局部调整。下面是用Visual C++编写的快速查表算法原理程序。程序中采用循环叠加窗口变换斜率Ratio的方法,将(1)式中的乘法全部转换为加法,进一步提高转换速度。

float Wmin = c – w/2;   // c:窗位

float Wmax = c + w/2;  //w:窗宽

float Ratio = 255/w;      //窗口变换的斜率

float TableData = 0;   //窗口下沿数据归零

/*形成图像数据转换表*/

// Pixelmin、Pixelmax:DICOM图像数据的极值

//pTable:转换表的数据指针

int i;

for ( i = Pixelmin; i <=
Pixelmax; i++, pTable++ )

{

if ( i < Wmin )

*pTable = 0;

else if ( I < Wmax )

{

*pTable = TableData;

TableData = TableData + Ratio;

}

else

*pTable = 255;

}

/*调整转换表数据指针到Pixel = 0 处*/

pTable = pTable – ( Pixelmax
+ 1 );

/*图像数据窗口变换*/

//AllPixels:图像像素总数;pDICOMData、pDIBData://DICOM、DIB图像的数据指针

unsigned int j;

for ( j=0; j<AllPixels;

j++, pDIBData++,
pDICOMData++ )

*pDIBData = *( pTable + *pDICOMData );

图5是利用该算法所得到的不同窗值下的腹腔CT断层图像。图6就是采用图7所示的窗口曲线所得到图5(b)的反白图像(负片)。

(a) w:342 c:28     
     (b)
w:65 c:20

图5 不同窗值下的腹腔CT图像

图6 图4 (b)的负片   图7 图像反白窗口曲线

4  
结果分析

窗口加速算法将数据处理范围从图像的全部像素缩小到图像数据的值域内,对于512×512像素、4096灰度级的图像,数据量减少了64倍;程序中采用循环叠加窗口变换斜率,将(1)式中的乘法运算转换为加法运算,窗宽愈宽加速效果愈明显,如窗宽为500时,可以减少500次乘法。

5   结束语

本文基于DICOM 3.0标准,采用加窗显示技术在通用计算机中实现了DICOM医学图像的实时显示。文中提出的图像窗口变换的加速算法缩小了图像数据的处理范围,采用循环叠加代替乘法运算,从两个方面大大减少了图像数据转换的计算量,明显提高了显示速度,达到了窗值动态连续调节下实时显示的要求。该算法简洁、实用、加速效果理想,可推广应用到其它类似场合。

参考文献

[1] National Electrical
Manufacturers Association, Digital Imaging and Communications in Medicine, PS
3.5-1998: 9-34.

[2]
贾克斌、沈波,实现医学影象存档和传输系统中的若干关键技术,中国图象图形学报,2000.7

[3]王华, 等. Visual C++ 6.0 编程实例与技巧. 机械工业出版社, 1999. 223-231.

[4]
康晓东, 现代医学影像技术. 天津科技翻译出版公司, 2000. 198-199.


*基金项目:上海市科学技术发展基金项目资助(编号:015115045)

作者简介:张尤赛,副教授,博士生,主要研究方向为图象处理和三维可视化。陈福民,教授,博士生导师,主要研究方向为虚拟现实、网络多媒体、图象处理。

DICOM医学图像窗口变换的加速算法的更多相关文章

  1. DICOM医学图像显示算法改进与实现——LUT

    引言 随着Ul(超声成像).CT(计算机断层成像).MRI(核磁共振成像).CR(计算机X线成像).电子内窥镜.盯(正电子发射断层成像)和MI(分子影像)等医学影像设备不断涌现,利用计算机对医学影像设 ...

  2. ARCore中Pose类变换点的算法实现

    ARCore中Pose类变换点的算法实现,主要分为两步,分别是平移和旋转. 1. 旋转向量:通过四元数计算旋转后的向量 参数列表:q表示四元数, v是长度为4的float数组,表示待旋转的向量,   ...

  3. Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配

    题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆   输入文件:transform.in   输出文 ...

  4. CNN 模型压缩与加速算法综述

    本文由云+社区发表 导语:卷积神经网络日益增长的深度和尺寸为深度学习在移动端的部署带来了巨大的挑战,CNN模型压缩与加速成为了学术界和工业界都重点关注的研究领域之一. 前言 自从AlexNet一举夺得 ...

  5. OpenCV——距离变换与分水岭算法的(图像分割)

    C++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize) 参数详解: I ...

  6. <Perl算法小菜>排序加速--Schwatzian变换及Guttman-Rosler变换

    原创博客,转载请联系博主! perl里的数据都是以双精度为单元存储的,也就是相当于C/Cpp中的double型,而正则的解析是由perl内置的正则引擎完成的,那么除了重写一个属于自己的排序方法之外,我 ...

  7. SSE图像算法优化系列二十一:基于DCT变换图像去噪算法的进一步优化(100W像素30ms)。

    在优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码) 一文中,我们曾经优化过基于DCT变换的图像去噪算法,在那文所提供的Demo中,处理一副1000*1000左右的灰度噪音图像耗时 ...

  8. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  9. Python3实现打格点算法的GPU加速

    技术背景 在数学和物理学领域,总是充满了各种连续的函数模型.而当我们用现代计算机的技术去处理这些问题的时候,事实上是无法直接处理连续模型的,绝大多数的情况下都要转化成一个离散的模型再进行数值的计算.比 ...

随机推荐

  1. 20145212《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDE)

    20145212<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDE) 实验内容及步骤 1.命令行下的JAVA程序开发 建立并进入实验目录: 撰写简单的Hello ...

  2. Java 6.15习题

    1.定义一个ClassName接口,接口中只有一个抽象方法getClassName();设计一个类Company,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类 ...

  3. Android学习笔记——ProgressBar

    该工程的功能是实现进度条的显示,按以下按钮进度条增加10% 以下代码是MainActivity.java中的代码 package com.example.progressbar; import and ...

  4. php栈数据结构和括号匹配算法

    栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_u ...

  5. php之thinkphp部署Linux

    今天在学习thinkphp时遇到很多的问题,为了能够更好的学习今天抽出下午时间,对lamp环境下的开发进行了一些尝试,毕竟以前做过很多与Linux相关的工作,再加上php本身最优的搭配就是lamp环境 ...

  6. Nginx安装配置(转)

    Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/ ...

  7. poj3070 Fibonacci

    Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...

  8. C#深入浅出 修饰符(二)

    1.函数参数前的修饰符 params ,ref ,out params修饰的数据类型只能数组,用于参数不固定时:且此参数位于所有形式参数的最后: public static int GetMax(pa ...

  9. Entity Framework浅析

    1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http:/ ...

  10. php——文件下载

    php——.doc 文件下载 先看简单实例: 同目录下有两个文件ib.php,test.php与供下载 .doc 文件: test.php文件内容: <?php $attr = glob(&qu ...