CT数据中骨的等值面绘制程序的设计与实现课程设计.doc

上传人:laozhun 文档编号:2396043 上传时间:2023-02-17 格式:DOC 页数:33 大小:866KB
返回 下载 相关 举报
CT数据中骨的等值面绘制程序的设计与实现课程设计.doc_第1页
第1页 / 共33页
CT数据中骨的等值面绘制程序的设计与实现课程设计.doc_第2页
第2页 / 共33页
CT数据中骨的等值面绘制程序的设计与实现课程设计.doc_第3页
第3页 / 共33页
CT数据中骨的等值面绘制程序的设计与实现课程设计.doc_第4页
第4页 / 共33页
CT数据中骨的等值面绘制程序的设计与实现课程设计.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《CT数据中骨的等值面绘制程序的设计与实现课程设计.doc》由会员分享,可在线阅读,更多相关《CT数据中骨的等值面绘制程序的设计与实现课程设计.doc(33页珍藏版)》请在三一办公上搜索。

1、中南大学本科生毕业论文(设计)题 目 CT数据中骨的等值面绘制程序的设计与实现 学生姓名 指导教师 学 院 信息科学与工程学院 专业班级 计算机科学与技术1002班 完成时间 2014年2月 目录目录I摘 要IIIABSTRACTIV第一章 绪论11.1课题的研究内容与意义11.1.1课题的研究内容11.1.2课题的研究意义11.2课题的研究现状21.2.1基于CT数据的特殊MC方法(SMC法)31.2.2用中点法简化线形插值41.2.3等值面顶点的矢量平滑51.2.4 MT算法简述51.2.5 MC算法的效率改进61.3本文的组织结构61.4本章小结6第二章 课题相关算法及开发工具介绍72.

2、1 Marching Cubes算法72.1.1 Marching Cubes算法介绍72.1.2 Marching Cubes算法基本原理72.1.3标准MC算法的计算过程92.2开发语言及工具介绍112.2.1开发语言C+介绍112.2.2界面开发语言C#介绍112.2.3编程工具VS2010介绍122.2.4开发工具VTK概述122.3本章小结13第三章 设计与实现143.1程序的总体设计143.1.1系统的需求分析143.1.2程序的总体设计思想143.2程序的实现163.2.1读取Dicom格式的CT图像功能的实现163.2.2实现提取等值面163.2.3视觉属性的设置163.2.4

3、界面的设计实现173.3本章小结18第四章 实验结果194.1等值面阈值不同时的绘制效果194.2漫反射光颜色参数不同时的绘制效果204.3镜面光系数不同时的绘制效果214.4实验结果总结21第五章 总结235.1 总结235.1.1 毕业设计所做的工作235.1.2 毕业设计的心得体会235.2展望24结束语26参考文献27摘 要在三维图像的可视化方法中,等值面绘制是对科学计算数据的常用绘制方法。它从数值特性接近的三维点集中构建出三维网格,同时利用GPU(Graphic Processing Unit,图像处理单元)加速,便于实时绘制。面绘制有原理简单,容易实现,显示直观等优点,是医学三维图

4、像可视化中的重要算法。本课题采用C+语言设计了基于VTK库的等值面绘制程序。该程序实现了CT数据中骨的等值面绘制,即用户可操作程序选择等值面参数,并能读取Dicom格式的CT图像,从而进行骨的三维显示。此外,为了方便用户使用,该程序有着简单易用的图形界面。本文首先概述了本课题的内容、意义和研究现状,并结合课题要求,介绍了面绘制方法中用到的关键技术和开发工具等。然后重点阐述了本课题的设计过程和实现过程,以及在实现过程中遇到的一些问题和解决办法,并进行了实验分析。最后,针对程序中出现的一些不足之处提出了一些改进方案。关键词 CT图像 等值面绘制 MC算法 VTK ABSTRACT Isosurfa

5、ce rendering is a common rendering method for scientific computing data in computer graphics. It builds a three-dimensional triangular mesh from 3D point set that has closed numerical characteristics. The rendering of triangular meshes can be hardware-accelerated by modern graphics processing units

6、(GPUs). Isosurface renderingissimple. Then it is easy to implement,visual displayand has other advantages. So it is an important algorithm of3D medicalimage visualization. This topic using C+ language designs isosurface rendering program that base on VTK. This programimplements isosurfacerendering o

7、f bones in CT data. The user canoperate theprogram to set up isosurface parameters and rendering parameters. The CT image data of Dicom format can be read to achievesimple space manipulate. In addition, for the convenience of users, the program has a simple graphical user interface. This paper outli

8、nes the content, significance and status of this project. And it combines with the requirements of the subject to introduce the key technology and development tools used in the surface rendering method. And then, this paper focuses on the design and realization of the program, including giving a sol

9、ution for appearing question during realizing program. At the end of this paper, some useful suggestions are given for the improvement of this program.Keywords CT image isosurface rendering MC algorithm VTK 第一章 绪论1.1课题的研究内容与意义1.1.1课题的研究内容CT(Computed Tomography 计算机断层扫描技术)是指使用计算机科学中相关的手段对被检测物体的截断层进行扫描

10、而得到图像实施三维重建而得到三维断层图像的扫描方法,是医学中常用的成像方式【1】。CT影像能揭示人体组织器官的三维结构与形态,对于医学诊断具有重要的参考价值。而等值面绘制是计算机图形学中对科学计算数据的常用绘制方法,它从数值特性接近的三维点集中构建出三维网格,便于实时绘制。本课题拟针对CT数据中的骨,设计实现一个采用等值面绘制方法的三维骨形态显示程序。本课题的目标是运用已经学过的程序设计知识,结合计算机图形图像处理的现有技术,设计实现一个采用等值面绘制方法的三维骨形态显示程序。用户可以操作该程序选择等值面参数和绘制参数,可以读取Dicom格式的CT影像数据进行骨的三维显示。本课题有助于锻炼我们

11、的程序设计能力,尤其是对图形图像相结合的分析和编程能力,此外也可以拓展我们对医学影像处理的了解和认识。为了完成本课题,需要我们具有扎实的数据结构和程序设计基础,而且需要自主学习医学影像处理相关的基本知识,以及医学影像显示方面的编程方法。在设计和实现本课题程序的过程中要遵循一般的软件工程要求,具有比较规范的基础文档,具备比较完备代码注释,且进行了比较全面的系统测试。研究内容概括如下:(1)了解医学影像处理相关基本知识。(2)理解MC算法基本原理。(3)用一种编程语言结合VTK库实现等值面绘制程序。其中,程序的主要功能如下:(1)读取Dicom格式的CT影像。(2)用户可以设置等值面参数。(3)等

12、值面绘制。(4)骨的三维显示。1.1.2课题的研究意义计算机断层扫描(Computed Tomography,简称CT)技术及核磁共振成像(Magnetic Resonance Imaging,简称MRI)技术已普遍应用在病患的医疗领域中,然而,像这样一些医学设备只可提供物体内部的二维图像。医师需要凭借多年经验根据很多幅二维图像去预想病患部位的大小和形状,这无疑给医疗诊断带来了巨大困难【1】。随着科学技术的不断发展,社会的日益进步,医学诊断的精确性与直观程度的要求也愈来愈高。由于医学图像可视化的重要性日益显著,所以在诊疗科学、整容美形以及外科手术、射线与化学治疗等技术中已经广泛应用【2】。19

13、89年,美国国家图书馆根据专家的讨论和建议,首先提出了一项被称为可视人(Visible Human)的计划【3】,并委托科罗拉多大学医学院进一步研究。这项计划的内容就是建立一个完整的男女人体的拥有详尽剖解结构的数字化图像库。通过这项计划的实施,能够分析和重新建立出人体内部相应的器官和组织结构并将其三维显示出来,最终构建出具有实在感觉的可视化人体三维效果,同时可以对重建出的虚拟可视人体进行各种透明处理、解剖分析等设置,便于进一步理解人体各组织器官的解剖结构。这对医学教育及解剖分析起着非常重要的作用。不久前,一个令无数人为之激动的新闻在重庆市第三军医大学公布:中国第一个数字化可视人体已经在该校实验

14、建立完成,并且向海内外同时发布了这一系列“中国可视人”的数据集【3】,这一消息在海内外都引起了极大反响,这一成果也为我国给出了目前为止最为齐整、完备和详尽的一套人体结构的基本数据和图像资料,这一成果也向所有人宣布,中国已经发展为世界上除美国和韩国外,唯一具有本国可视化人体数据集的国家。1.2课题的研究现状移动立方体(Marching Cubes)方法是目前为止最为流行的一种等值面三角化算法之一【4】,用于从三维标量场提取一个多边形网格的等值面。它是基于基本立方体中剖分出来的体数据,随后在每个立方体中都进行标准的三角剖分。在传统方法中,MC算法是基于15个基本的三角剖分算法和由旋转、反射、共轭等

15、运算得出的256个基本三角剖分算法的组合。它的运算简单高效,因为它的工作原理几乎是完全关于查找表的【5】。但是传统的MC算法中有很多缺点和需要改进的地方,许多学者对传统MC算法的优化进行了不懈的研究和创新。本文主要介绍了传统MC算法的基本原理以及计算过程,并对传统MC算法中的缺点进行了分析,列举并比较了其他几种改进和优化的MC算法,包括SMC算法,MT算法,以及中点法简化线性插值法,等值面顶点矢量平滑等方法。MC算法最主要有三个方面的问题:首先,由于移动立方体方法的原理所导致的局限性,所生成的三角面片仅仅能近似显示出了需要求的等值面;第二点就是在体元的同一平面中,将两条相邻棱上的重合点采用线段

16、随便地连接起来只能趋于相似地表示所求等值面;另外,在移动立方体求等值面的方法中,若是体元的一个平面上的标为1和标为0的角点各处于立方体对角线的两头,那末就可以出现2种不同的连接形式,即出现所谓“二义性”【6】。面对移动立方体算法的这些缺陷,我们可以从以下三个方面对移动立方体算法进行改善:(1)选择边界跟踪的方法确定边界上的立方体。经过学者们的多次实验证实,大致有九成以上的六面体都是在边界里或边界外,因为这样一些六面体并不是边界立方体,所以它们之间不存在等值面,如果只对剩下约占十分之一的边界立方体进行处理,就能简化算法的运算过程,从而显著提高算法的效率。当开始选定边界立方体时,可以利用查找每层断

17、面上的边界线与之相交的立方体表面的方法,即将所有的边界线顺次操作完就能够得到全部的边界立方体;(2)选择利用立方体棱边的中点作为三角面片顶点的方法,而不是采用三次插值计算的方法,能够节约大部分的运算时限。同时,考虑到两相邻断层间的距离较小,其最大误差只有立方体边的长度的一半,并且一些显示设备的分辨率比这个长度精度更小,因此该算法是可行的。(3)在知道的这几种各不相同的鉴别和避免二义性的办法中,渐进线法当之无愧的成为最为常用的办法之一。当发生二义性问题时,边界平面被双曲线中的两支切割成三个部分,容易得出的是,在双曲线中两条渐近线的重合点必定会与边界中处于对顶线的两个焦点落在相同的一个部分内【7】

18、。通过此法可以消除二义性。以下分别简单介绍几种MC算法的优化。1.2.1基于CT数据的特殊MC方法(SMC法)针对标准移动立方体算法的缺陷及计算机断层扫面技术图像的特点,另外有一种特殊的MC算法,对原有的算法进行了一些改进,称之为SMC算法【8】。(1) SMC算法的基本理论假设所有CT切片包含了一系列轮廓线P1,P2,Pn,对于体数据的每一个体素都定义了一个状态函数f(x,y,z): 公式(1.1)在通过这样的变换后,三维空间中的数据就会转化为三维场,每个体元顶点(x,y,z)的状态值根据这个点与这个点位于的平面上所有轮廓线之间的关联来判断,即在其上、在其内或在其外。因为所有的体元都有八个角

19、点,按照状态值可以将体元上各个角点标为0、-1或+1,且体元的各条边上的数值是线性变化的。所以容易得出,边界面通过的顶点状态值为0;假如体元上一条边的两个顶点分别为-1和+1,则可以得出等值边界面与该棱相交;假如某个棱的所有顶点都是同号的,显然有等值边界面与该棱不存在交点。当等值边界面与某条棱相交,则该棱的中点可以当作交点。(2) SMC算法的实现及结果SMC算法是在有序二值图像上进行的【9】。首先在内存中读入4张相邻的CT二值图像,按顺序记为CT1,CT2,CT3,CT4,其中CT2和CT3是需要构建三维的断层,而利用中心差分法计算各个顶点的法向时将会用到CT1和CT2。然后计算这4张CT中

20、各点的状态值,进行预处理后,可直接根据该点的灰度值:灰度0对应状态1,灰度128对应状态0,灰度255对应状态+1。再根据状态值,利用中心差分方法,可以算出CT2和CT3中各个点的法向。如果f(x,y,z)表示体素(x,y,z)的状态值,则这个点的法向可以通过以下三个式子来表示为: 公式(1.2) 只要得出这条边上两个端点法向的平均值,就可以得出这条边上中点的法向。接下来用上述的方法生成体元,并在体元内重新构建出三角面。通过这个结构,重建出的三角形通过双向链表的方式将数据存储在相应内存中,而且通过J顷序的顺序生成,就可以得到需要的三维几何图像【9】。1.2.2用中点法简化线形插值在规范的移动立

21、方体算法中,每一个内部包着等值面的立方体都十分有可能会有一个以上乃至更多的三角面片,如此一来就会使每一个三角片都非常小,乃至比像素更加微小,因此用中点代替顶点造成的更动对最后成像质量的影响不明显。选择中点法而不是两个端点能够躲开线形插值中的运算相重复的部分,进一步让计算变得简单【10】。每一次线形插值都得进行代数运算四次,想得出三个顶点就必须进行十二次运算。如果使用中点法代替顶点,确定顶点位置仅需要3次计算,进而能够明显减少计算量,显著提高运算速度。中点法保留等值面的拓扑结构而仅仅变化的是产生几何多边形等值面的端点的位置,所以使用中点法的最大误差小于或等于半个立方体【11】。同理对于只有两个值

22、的相应体数据(数据的值仅为0或1)来讲,如果所求等值面为相对大的值,则此近似误差就是最大的近似误差;如果范围在0到1,就没有近似误差。三角面片数量越多,相对误差越小,在三角面片极多的情况下,其近似误差是几乎可以忽略的。另外,中点法可以缩小立方体中的三角面片的数目,进而令各立方体内部或相邻立方体之间衔接的三角面片归只并成一个空间几何多边形。1.2.3等值面顶点的矢量平滑利用MC算法重建出的三维图像,其显示结果的可视性和清晰度常常并不能十分令人满意。由于体数据场中的各种噪声往往会对立方体单元内部的三角面片的位置和方向造成影响,严重的情况下,会招使三维显示的效果出现明显的“鳞状效应”【11】。为了获

23、得更加理想的三维显示效果,可以将等值面的数据场剖化成两部分,一部分是三维坐标,另一部分则是法向矢量场,利用对等值面剖化出的法向矢量场的矢量实施平滑操作的方法,可以获得相对合适的平滑结果与平滑速率【12】。等值面矢量平滑方式保留了曾经等值面上三角片的坐标的位置和状态值,还可以凭借光照模型中的浓淡绘制原理,利用增加面片上法向矢量之间连续相关性,进一步取得三维绘制的平滑效果。1.2.4 MT算法简述MC算法中,在体素的同一个平面上,若标记为1的端点和标记为0的端点(1、0分别表示位于等值面内部或者位于等值面外部),各在对角线的两头,就会导致表现出一对不同的衔接形式,即存在所谓“二义性”,这种结果会进

24、一步造成冲突的拓扑流型在相交平面上产生,所生成的等值面就会出现“孔”的问题。Marching Tetrahedral(移动四面体)方法简称为MT算法,此算法发明时间较MC算法较晚,但已经显示出巨大的发展潜力。它是根据移动立方体方法的基本原理和计算过程开发的,同时,它与移动立方体方法还有很多不同的地方。其一,MT算法最初会将体素立方体化解成四面体,接下来在它里面提取等值面。在四面体剖分完成后,四面体中等值面的剖分模式缩减,算法实现更加简单。而且,MT算法生成的等值面比MC算法产生的等值面精度要高。而采用此方法最重要的原因是以其改善MC算法中存在二义性问题【1】。等值面在四面体中有重合部分时,只会

25、产生有重合部分的三角形或有重合部分的平行四边形,从而有效的避免了二义性问题。1.2.5 MC算法的效率改进 标准的MC算法需要处理和计算三维数据场中的所有立方体体素。但一般来说,等值面仅仅与三维体数据场中的个别体素有重合部分,所以这样一来,致使白白消耗了计算的时间,也是算法效率不高的重要原因。因此,没有必要依次处理整个数据场。以至于解决这种现象带来的困扰,有学者提出了对MC算法效率方面的创新:假如立方体体素与等值面有重合部分,那么等值面必然会在这个六面体的各个面的方向上持续延长。若一个立方体与等值面有交点,则该立方体的六个面中有若干个面将与等值面有交线,且与该立方体相邻的立方体(前后左右上下各

26、个方向相邻的立方体)中的三角片将会按照特定的顺序延伸。综合上述考虑,可以令数字0、3、4、5、或6来给十五种基础等值面构造类型分别加上一个标识,以显示该体素必需交流的周边六面体的数量。大量实验表明,百分之九十的等值面是由六种常见情况构成的【13】,所以上述方法可以大量节省计算时间。1.3本文的组织结构第一章,绪论。主要介绍了本课题的研究内容,研究意义,研究现状以课题的应用和发展,并进行了本文的内容组织。第二章,详明阐述了移动立方体算法的基本原理和计算方法。也介绍了等值面绘制程序的开发语言及开发工具等。第三章,详细介绍了骨的等值面绘制程序的开发过程和实现过程,以及实现过程中遇到的问题和解决方法。

27、第四章,对实验结果进行比较分析。第五章,对本次设计进行了简单总结,并对骨的等值面绘制程序中存在的不足提出改进方案。1.4本章小结通过调研大量文献和相关资料,全面了解了课题的研究内容与实践意义,并根据课题的发展现状,考察了关于面绘制中重要算法MC算法的一些改进方法,对MC算法的优缺点进行了对比。最后,列出了本文的组织结构。第二章 课题相关算法及开发工具介绍2.1 Marching Cubes算法2.1.1 Marching Cubes算法介绍医学图像的三维可视化的各种方法中,主流情况下可以分成两种,即面绘制和体绘制。体绘制更能真实地反映对象的具体构造,但因为它的运算量巨大,即使使用高性能的计算机

28、也不能完全满足实际应用与工作中交互操作的需要【14】。因此,面绘制是目前医学图像三维可视化中的主流算法。 Marching Cubes(移动立方体,简称MC)方法是三维等值面面绘制方法法中的传统算法,它是由W.Lorensen等人在二十世纪八十年代提出来的一种体素级重建算法【15】。由于它的原理简单,容易实现,所以得到了广泛的应用。MC算法散布在每一个体素中都进行等值面提取,所以也被称为分而治之的方法。在各个被操作的体数据单元中,利用三角面片来逼近表示体数据单元里面的等值面。三维体数据中的每个体素就是一个小立方体,对每个体素都“扫描”一遍来生成三角面片,似乎是一个小型的运算机在每个体数据单元上

29、转移一样,MC算法的名字就是这么来的。移动立方体方法就是在产生等值面的过程当中将一套二维切片的数据看作是一个三维的体数据场,并且在里面把具备某种特定的值的结构剖分出来,再以某种特别的拓扑形式衔接成三角面片,所以MC方法有时也可以叫做 “等值面提取”方法【14】。当实施在医疗领域中时,利用MC方法能够重建出人体外面的轮廓线条、内部的组织结果甚至器官的表面褶皱,这样医师就可以直接在三维图像上观察需要观察的部位。2.1.2 Marching Cubes算法基本原理在移动立方体算法中,需要先假设原始数据相当于有规律的离散三维空间数据场,例如实施于医学诊疗的计算机断层扫描CT图像就属于这一类型。移动立方

30、体方法的核心思路是依次对数据场中的每个立方体进行操作,寻找那些与等值面有重合部分的立方体,接下来利用线性插值的方法得出等值面与六面体棱的重合点【14】。然后凭借六面体上每个角点与等值面的相互坐标关系,把等值面与六面体棱上的重合点按特定的形式衔接,构造出等值面,以其成为等值面在该立方体里面的一个逼近的表示。因而,移动立方体方法中每个体数据最小单元里面的等值面生成办法简单分析可知有这样几个步骤:(1)体数据最小单元中利用三角面片逼近的等值面运算;(2)三角面片各顶点法向量计算。移动立方体方法的基本原理是:首先在三维体数据场中构造出等值面,接下来寻找通过该等值面的体数据最小单位元,再得出该体元里面的

31、等值面并得出相应数值,这样做十分有利于利用经常使用的工具包或图像硬件应用程序构造出等值面【16】。在医疗领域的应用中,利用MC算法能够有效地重建出人体外的外部轮廓、内部组织及器官,使医师可以方便直观地在三维图像上考察需要的器官与相邻组织之间的相互位置关联。 另外,MC 算法可以充分、高效地使用GPU加速,不仅便于实时绘制,而且重建出的图像质量较高【16】。移动立方体算法的基本过程如下:1) 每次读出两张切片,形成一层。2) 将上下一对切片所相呼应的总共八个点构成一个六面体,就像图2.1所示。3) 按照从左向右、从前向后的一定次序操作一层中的六面体(提取每个六面体中的等值面) ,然后再按从下向上

32、的次序同上操作至n-1层【16】。上层切片下层切片图2.1 Cubes示意图在每个体素六面体中,六面体的八个角点的值能够通过从输入的体数据中获得。而需要构造的等值面的阈值则应该是由用户设定,因为构造出来的组织的密度值就是根据等值面的阈值来构造的。例如,骨骼的密度是比较大的,所以需要设定的等值面阈值也就相应地要大一点,接下来按照体数据的信息就能够提取出等值面中的三角面网格。2.1.3标准MC算法的计算过程移动立方体算法首先设当原始数据是有规律的离散的三维空间数据场(例如CT、MRI等图像)时,沿立方体的棱方向上的数据场是线性的、连续变化的【16】。若六面体一条棱上的一对角点的状态值各是大于、小于

33、等值面的阈值,则在这条棱上有且仅有唯一的一个点是这条棱与等值面的重合点。当三维体数据场中的体元被顺次依序进行移动立方体操作,即寻找等值面与这些体元的重合点,从而进一步找出体元内部的等值面,这就是移动立方体的基本算法。上述提到的体元是指由相接两层的相接的八个体数据最小单元所形成的六面体,且八个体数据最小单元刚好组成六面体的八个顶点。如图2.3。(i,j+1,k-1)(i,j,k)(i+1,j+1,k-1)(i+1,j+1,k)(i,j,k-1)(i+1,j,k)(i+1,j,k+1)第k+1层第k层图2.3 数据场中的一个体素三维数据场中取值相同的全部点的集合构成了等值面。它能够用以下函数关系来

34、表示:(x , y , z)|f(x , y , z)=c,c为常数由上式显然可知,等值面的值为c,所以对于每个体元来说,当体元的八个角点值都大于阈值c或者都小于阈值c时,则体元里面没有等值面;如果有的顶点值大于c,有的顶点值小于c,体元内存在等值面。严格来说,等值面属于几何曲面,其解析表达式非常复杂。为了能更加容易地对其进行描述,我们近似地认为等值面是许许多多由三角形组合的等值面片构成的。所以,提取等值面的问题就可以等效为在每个体素内找出由三角形组合成的等值面片的问题。对于每个体元,我们把函数值大于c的顶点标为1,把值小于c的顶点标为0,则依据一条棱上两个顶点的状态,就能够确定等值面是否与它

35、相交。因为所有的体元都有有八个角点,且每个角点都能够取两种的状态值,所以每一个体元将有28=256个能够出现的状况。利用三维空间的等效对称性,通过旋转、平移等简单空间操作,我们可以把这256个状态简化成15种互不相同的状态【16】。图2.4列出了能够取到的十五种形态的等值面的分布。01234567891011121314图2.4移动立方体算法的基本组合。黑色的圆圈代表等值面内的体素。等值面的标准三角化是在每一个立方体中进行的。通过旋转和反射的基本原则可以得到所有可能的组合。对于立方体中的某条棱边,假如它的两个顶点V1、V2标记的状态值不是相同的,那么选定的等值面必然与此棱边有相互重合的部分。(

36、a)当体素的一条棱边与X轴方向相同时候,假设该边的两顶点分别为V1( i , j , k),V2( i+1, j , k),则等值面与体素重合点为V( x , j , k),且c是等值面值,就有以下关系: 公式(2.1)(b)同理,当体素这条棱边与Y轴方向相同时候,假设这条棱边的两顶点分别为V1( i , j , k),V2( i , j +1, k), 那么等值面与体素重合点为V( i , y , k),则有: 公式(2.2)(c)当体素的这条棱与Z轴方向相同的时候,先设置这条棱的两角点分别为V1( i , j , k),V2( i , j , k+1),那么等值面与体素重合点为V1( i

37、, j , z),则有: 公式(2.3)为了成功绘制出能够直观体现的等值面,等值面中每个三角面片的法向量都是必需的。在实际工程应用当中,因为直接计算三角面片法向量时复杂性十分巨大,所以一般不直接给出三角面片的法向,取而代之的,是给出三角面片各个顶点的法向,即实际计算时是采用中心差分方法计算的【14】。在三维体数据场中,设有一个点的取值用f(xi,yj,zk)进行运算,且在X轴、Y轴、Z轴方向上相邻两点间的距离分别为x、y、z。则这个点的梯度矢量(gx,gy,gz)能以下面这个关系式子得出: 公式(2.4) 2.2开发语言及工具介绍本程序将采用C+语言开发,界面用C#编写,并基于VTK库实现。本

38、节将对C+、C#、VS2010及VTK进行简单的介绍。2.2.1开发语言C+介绍C+是一款常用的,且应用十分普遍的计算机编程类语言。它是一种由非动态数据类型验收的、并且支持许多种编程方法的通用计算机程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。其编译器比目前其他几种计算机语言的编译技术更为复杂。最新正式标准C+11【18】已于二零一一年八月十二日公布。2.2.2界面开发语言C#介绍C#(C Sharp)是微软公司在两千年七月份开发完成的一种崭新的、便捷的、安全的、面向对象的程序设计语言,是特意为.NET的应用程序而开发的语言【19】。它借鉴了C

39、+、Visual Basic、Delphi、Java等各种程序设计语言的长处,归纳了VB中便捷的可视化处理机制和C+的高超运行效能。由于C#具有强大的操作能力、优美的语法风格、独树一帜的语言特性和简单快捷的面向对象编程的支持,而使它成为.NET程序开发设计的首选语言,显示了现今最新的程序开发设计技术的功能和精髓。.NET框架也为C#提供了一个强大的、简单易用的、逻辑结构一致的程序设计环境。另外,公共语言工作时也为C#程序提供了一个工作时可以托管的环境,使程序比以前更加稳定、安全。2.2.3编程工具VS2010介绍由微软公司开发设计的开发环境Visual Studio【20】是当前最为流行的Wi

40、ndows平台下的应用程序开发环境。Visual Studio的 2010版本于二零一零年四月份正式发行,它重新设计和构造了集成开发环境(IDE)的界面,变得更加通俗易懂。Visual Studio 2010同时也带来了NET Framework4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP)等程序开发框架,而且它还支持开发和设计实现面向Windows 7操作系统的各类应用程序。在连接数据库方面,VS2010不仅支持Microsoft SQL Server,还支持IBM DB2和Oracle数据库。2

41、.2.4开发工具VTK概述VTK(Visualization Toolkit 可视化工具包)是一个面向对象的可视化类库,由美国 Kitware 公司开发。它支持体绘制并支持提供多种不同的体绘制技术,降低了开发难度【21】。当前,使用VTK实现对医学图像的可视化是一个热门。VTK是基于Windows/Unix环境下的,并支持多种编程语言,比如C+、TCL、JAVA、PYTHON。VTK采用流水线【22】机制。其中,流水线利用source当作开始来读取源数据。接下来Filter对源数据进行预处理,同时产生数据输出。源数据经过filter进行操作后得到所需的结果,接下来使该结果利用 mapper 映

42、射成为图形数据。当进行数据效果的体现时,利用actor作为绘制窗口的实际对象来领受 mapper 传过来的已经处理好的数据相关属性。最后使用Render 来显示最终结果的图形。另外,就算只有一个Render,也是可以同时示范多个实际对象Actor的。使用可视化工具包VTK来实现CT图像的可视化,根据算法和数据结构判断,实质上是一个类似读取数据和图形显示的问题【23】。对与已经给出的计算机断层扫描CT图像,由于这些图像肯定与DICOM3. 0标准相符,所以想要读取它们比较容易, 即在设计程序时只须设置好必需的数值,就能够打成对一幅计算机断层扫描CT图像甚至计算机断层扫描CT图像序列的读取。在可视

43、化工具包VTK中,为了更加高效地操作如此巨大的类库,我们不妨根据某一个类在类库中的功能,将类库中的类分成如下几个部份:公共部分( common) 、图形处理部分(graphics) 、图像处理部分( imaging) 、读写文件部分( I/O ) 、渲染绘制部分( rendering) 以及数据转换部分( filtering)等,每一个部分都已经被编译成相应的动态链接库。2.3本章小结对面绘制中的重要算法,移动立方体(Marching Cubes)算法进行了深入学习研究,掌握了MC算法的基本原理和计算过程,并与第一章中所述的改进算法做比较,体会MC算法的中心思路。最后,介绍了关于本程序的开发语

44、言和开发工具。第三章 设计与实现3.1程序的总体设计3.1.1系统的需求分析作为三维可视化中的重要方法,面绘制有着非常重大的实际意义。该程序的目标是从本地读取显示Dicom格式的CT图像,用等值面绘制的方法进行骨的三维显示,且用户可通过界面修改等值面参数,从而比较绘制出的不同效果。为了使该程序使用更加简单方便、功能更加完善、执行效能更高,则本程序设计应满足以下需求:(1)具备完善的程序操作界面,确保应用程序能够简单、便捷的操作;(2)能方便地查看检测结果以及检测信息;(3)运行较快速,显示直观;(4)正常使用时避免出错,若运行时遇到突发错误,程序不会影响到本地文件。3.1.2程序的总体设计思想

45、本程序是基于VTK库实现的,需要对VTK的应用实例进行大量调研,包括用到的主要类和参数。首先应设计实现程序中读取Dicom格式的CT图像的功能(可以利用vtkDICOMImageReader、vtkVolume16Reader),然后调用VTK中已经实现的经典等值面三角化算法,即移动立方体算法(vtkMarchingCubes)生成三角面片,用于提取等值面。同时将生成的三角面片拼接成等值面(vtkStripper),最后建立映射(vtkPolyDataMapper),将经过的CT数据映射为多项式的几何数据。另外,为了能使程序清晰直观的进行骨的三维显示,还需要创建一个绘制对象(vtkRender

46、er)和绘制窗口(vtkRenderWindow),同时创建一个Camera(vtkCamera),并设置视觉属性,使用户可以对生成的三维图像进行旋转、平移等简单空间操作。程序的界面设计方面是用C#语言编写的,用C#编写界面有简单易懂,可操作性强等优点。界面的主要功能是让用户可以通过界面修改等值面参数,从而通过对比不同参数的绘制结果,了解阈值不同部位的三维显示情况,以达到应用医疗,获取病变信息的目的。并且界面一定要简单易懂,让用户可以容易操作。界面的设计思路是在绘制程序中,将需要修改的参数(等值面参数)设为变量,通过C+中的方法将变量设为读取一个本地文件(txt)中的数据,然后用C#设计一个界面,把界面中的等值面参数写入本地文件(txt)中,进而实现了用户可以通过界面修改等值面参数的功能。同时根据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号