医学图像可视化自动编程平台的设计

医学图像可视化自动编程平台的设计
    陈德星,郭雷,聂晶鑫
(西北工业大学自动化学院,陕西西安710072
 
 
摘    要:为了充分利用现有的各种医学图像处理算法,避免重复开发,提高开发效率,设计并实现了一个基于OpenCV图像处理基础算法库的医学图像可视化自动编程平台,该平台在开放源代码的基础上,充分整合了OpenCV算法库,避免了算法的重复开发。通过对可视化编程技术的研究,实现了该平台中编程过程的可视化与自动化?同时利用OpenCV平台无关的特性,使用makeflle文件来控制生成程序代码的编译,舞现了生成的程序代码的可移植性。并讨论了平台的整体结构设计与各个模块具体实现。最后给出一个开发买例,证明了该平台在算法测试和开发方面的高效性与简洁性。
关键词:基础算法库;医学图像处理;可视化编程;跨平台
中图分类号:TP 311    文献标识码:A
L引言
    20世纪70年代以来,随着CT,MRI,超声等先进医学成像技术的成熟与发展,医学图像处理已成为医学技木中发展最快的领域之一。医学图像处理技术作为这些成像技术的发展基础,驱使现代医学诊断技术发生深刻变革.
    丰富的医学图像处理算法在满足不同处理需求的同时,也带来了一些新的问题。过多的算法使得生物医学研究者开销大量时间设计、测试一些基础算法,严重影Ⅱ向了生物医学方面的研究进度。且用不同的编程语言写出的算法难以重用,不适应生物医学研究过程对处理工具的简单化、自动化的要求。
    本文设计并实现的基于OpenCV的医学图像可视化自动编程平台解决了上述问题。该平台实现了可视化编程,能够在用户的指导下自动生成并运行源程序,简单而直观。且生成的目标程序具有可移植性。
2医学图像可视化自动编程平台的结构设计
  为了方便用户进行算法测试和算法流程开发,医学图像可视化自动编程平台的设计目标如下:
    ①集成一个完备的基础算法库用户可以从该基础算法库中任意调用各种基础算法进行测试和流程开发,有效地提高了用户工作效率。
    ②统一的编程风格由此实现了不同用户对平台算法数据库某一特定算法进行复用与修改的过程。
    ③可视化编程直接利用图形模块来操作源程序中的变量和函数”一,简化了程序流程设计与编写过程。
    ④自动化编程基于图形模块建立的处理流程,能自动生成相应的程序源码和可执行程序。
    ⑤可移植性为获得期望的目标程序可移植性。
    根据医学图像可视化自动编程平台的设计目的和功能要求,设计该平台的系统框架结构,如图1所示。
 
   用户界面设计,如图2所示。
     
    以调用一个存在于OpenCV中的基础算法为例,说明其工作流程如下:
    ①平台启动后,根据当前数据库的版本号调用对应的数据库,然后读取模块中的函数,从而读出并存储数据库,再利用树形列表显示数据库的内容。
  ②从树形列表中选择特定算法,拖人平台的工作区,形成一个图形模块。
  ③在算法参数设置区设置算法的属性参数,并在顺序调整区设置执行顺序。
  ④点击保存剐生成C源程序。在参数输入区输人参数后点击执行则进行需要的处理。
医学图像可视化自动编程平台的实现
    根据前面进行的系统设计,医学图像可视化自动编程平台细分为4个模块,其关系图,如图3所示。
   
    1)数据库操作模块由前面的讨论可以看出,平台必须有一个存有OpenCV中算法函数相关信息的数据库。数据库中的信息是平台实现各种功能的基础,为了实现信息从数据库到平台的传递,还需要一个能从数据库中读取信息的数据库操作类。
    ①数据库的设计与实现因为平台的数据库存储的是OpenCV中算法函数的信息,用XML文件可满足需求。在XML数据库中用根节点的属性DBVersion表示数据库的版本号;用FunctionSet节点表示一系列功能类似的算法函数集合;用Function节点存储了一个函数的相关信息,而Parameters节点则存储了一个变量的相关信息。可看出一个FunctionSet节点中可以有多个Function节点,而一个Function节点中可以有多个Parameter节点。
    ②数据库的读取考虑到随着平台的升级和发展.数据库的结构可能也会有所变化,所以在数据库的读取部分设计了一个数据库版本选择器,实现针对不同版本的数据库调用其对应的读取程序。由于整个数据库的结构是完全递归的,因此在具体的读取程序中采用的是递归的读取算法。
  2)数据操作模块从图3可以看出,数据操作模块的主要作用就是存储、修改平台中的各种数据,是模块间信息存储、传递和处理的核心。数据操作模块主要包括底层的数据存储结构和平台中算法函数相关数据的传递路径。
  ①底层数据结构在软件进行所有操作之前,必须要有一个存储和描述模块之间传递的信息的数据结构。模块间传递的数据主要是数据库中的函数信息,这里所说的函数信息包括函数名、函数的返回值、函数的出口和人口参数信息以及数据库中对函数的描述等。传递的信息可分为五类:数据流、函数、输入变量、输出变量和常量。
    由图1中可见,通过可视化编程完成的XML格式的程序(又叫程序流图)应该是可以通过平台打开并进行修改的,程序流图经过下文的格式转换模块才会生成C语言源文件。在平台中也有一个对应的数据存储类CDataModel专门用来存储程序流程图。所有对程序流程图的增减修改操作都是基于底层数据结构的设计,如图4所示。
   
  ②算法函数相关数据的流动线路主要有2条  可视化编程的过程当中,若用户创建数据流连线时路径。一是从数据库中调用对应算法函数相关数据  使得某个算法的输人间接地依赖于该算法的输出流.二是通过平台生成给定变量时的数据流。数据  则会导致数据流死循环。可以通过检测偏序关系来流所涉及的各个相关类的作用图,如图5所示。 
 
    其中,比较重要的是模型可视化部分和视窗状态类。模型可视化部分的主要作用是实现CDataModel类中对应部分的图形显示,比如定位鼠标,决定如何绘制图形等;而视窗状态类昀作用则是设置视窗类的一些状态以及和文档类配合实现平台的回退和前进操作。
  ③基于偏序特性的数据流死循环检测算法在可视化的过程当中,若用户创建数据流连线时是的某个算法的输入间接地依赖于该算法的输出,则会导致数据流死循环。可以通过检测偏序关系来发现这个问题。
  先考察一下偏序的定义:若一个关系满足传递性和反自反性,则称此关系为偏序关系。设A是一个非空集a,b,c是A中的任意元素,P是A上的一个关系,不难想到,程序中数据流的传递正是一个偏序关系。可以用偏序关系的特性来判断某一数据流是否会造成死循环。用偏序关系的传递性可以减少比较次数,在一定程度上提高了检测机制的效率。
  3)数据显示模块结构和数据操作模块类似,实际上是对数据操作模块中每一个类都进行了封装,实现了诸如定位、绘制图形模块及其出人口、响应鼠标动作等功能。
  4)格式转换模块通过以上几个模块的共同作用,平台实现了从读取数据库的数据信息到产生XML格式程序流程图的一系列操作。但产生程序流程图不是平台的最终目标,还要把XML格式的程序流程图转化为可直接编译运行的C语言源文件。这样才能大大简化程序设计的过程,提高用户工作效率。格式转换的主要流程,如图6所示。  
 
   
4医学图像可视化自动编程平台开发
    以Canny边缘检测算法的使用为例,简单展示基于本平台的算法流程开发。Canny边缘检测算法是John F Canny于1986年开发的一个多级边缘检测算法。这种检测算法能适应不同的场合,它的参数允许根据不同实现的特定要求进行调整,以识别不同的边缘特征。Canny算法的参数主要有两个:阂值和高斯滤波器的大小。下面在本平台中使用Canny算子处理nuclei图像。
    1)拖曳左边树形结构中的算法函数节点到工作区来构建一个程序流图,如图7所示。
   
  2)通过选择算法函数对应的图形模块来进行算法参数的设置,见图7。
  3)还可通过顺序调整区来设置算法函数执行的顺序,
  4)执行。本平台支持带参数的批处理执行,可一次处理多个目标对象,实现处理的自动化。
    以上4个步骤隐匿了繁琐的函数调用与变量定义,用户所要做的只是拖动图形模块,连接端口,调节参数。只要选择合适的参数就能获得期望的结果,具体结果如图8所示。
5结语
    基于OpenCV的医学图像可视化自动编程平台在Visual C十+.Net 2003环境下编写代码并调试通过。运行测试表明使用该平台可实现充分利用各种现有的医学图像处理算法,避免算法的重复开发,实现了自动化编程与提高开发效率的目标。该平台目前已经应用于斑马鱼的研究,获得了良好的评价。平台目前仅集成了OpenCV算法库,可进一步实现对现今常用的医学图像处理算法库(如ITK,VTK)的集成,拓展平台的使用前景,更好地服务于生物医学研究者。
 
 
posted @ 2010-08-19 11:40  微笑的艾米  阅读(855)  评论(0编辑  收藏  举报