毕业设计ct数据中骨的等值面绘制程序的设计与实现.docx
《毕业设计ct数据中骨的等值面绘制程序的设计与实现.docx》由会员分享,可在线阅读,更多相关《毕业设计ct数据中骨的等值面绘制程序的设计与实现.docx(28页珍藏版)》请在冰豆网上搜索。
毕业设计ct数据中骨的等值面绘制程序的设计与实现
中南大学
本科生毕业论文(设计)
题目CT数据中骨的等值面绘制程序的设计与实现
学生姓名
指导教师
学院信息科学与工程学院
专业班级计算机科学与技术1002班
完成时间2014年2月
摘要
在三维图像的可视化方法中,等值面绘制是对科学计算数据的常用绘制方法。
它从数值特性接近的三维点集中构建出三维网格,同时利用GPU(GraphicProcessingUnit,图像处理单元)加速,便于实时绘制。
面绘制有原理简单,容易实现,显示直观等优点,是医学三维图像可视化中的重要算法。
本课题采用C++语言设计了基于VTK库的等值面绘制程序。
该程序实现了CT数据中骨的等值面绘制,即用户可操作程序选择等值面参数,并能读取Dicom格式的CT图像,从而进行骨的三维显示。
此外,为了方便用户使用,该程序有着简单易用的图形界面。
本文首先概述了本课题的内容、意义和研究现状,并结合课题要求,介绍了面绘制方法中用到的关键技术和开发工具等。
然后重点阐述了本课题的设计过程和实现过程,以及在实现过程中遇到的一些问题和解决办法,并进行了实验分析。
最后,针对程序中出现的一些不足之处提出了一些改进方案。
关键词CT图像等值面绘制MC算法VTK
ABSTRACT
Isosurfacerenderingisacommonrenderingmethodforscientificcomputingdataincomputergraphics.Itbuildsathree-dimensionaltriangularmeshfrom3Dpointsetthathasclosednumericalcharacteristics.Therenderingoftriangularmeshescanbehardware-acceleratedbymoderngraphicsprocessingunits(GPUs).Isosurfacerendering is simple.Thenitiseasytoimplement, visualdisplay andhasotheradvantages.Soitisanimportantalgorithmof 3Dmedical imagevisualization.
ThistopicusingC++languagedesignsisosurfacerenderingprogramthatbaseonVTK.Thisprogram implementsisosurface renderingofbonesinCTdata.Theusercan operatethe programtosetupisosurfaceparametersandrenderingparameters.TheCTimagedataofDicomformatcanbereadtoachieve simplespacemanipulate.Inaddition,fortheconvenienceofusers,theprogramhasasimplegraphicaluserinterface.
Thispaperoutlinesthecontent,significanceandstatusofthisproject.Anditcombineswiththerequirementsofthesubjecttointroducethekeytechnologyanddevelopmenttoolsusedinthesurfacerenderingmethod.Andthen,thispaperfocusesonthedesignandrealizationoftheprogram,includinggivingasolutionforappearingquestionduringrealizingprogram.Attheendofthispaper,someusefulsuggestionsaregivenfortheimprovementofthisprogram.
KeywordsCTimageisosurfacerenderingMCalgorithmVTK
第一章绪论
1.1课题的研究内容与意义
1.1.1课题的研究内容
CT(ComputedTomography计算机断层扫描技术)是指使用计算机科学中相关的手段对被检测物体的截断层进行扫描而得到图像实施三维重建而得到三维断层图像的扫描方法,是医学中常用的成像方式【1】。
CT影像能揭示人体组织器官的三维结构与形态,对于医学诊断具有重要的参考价值。
而等值面绘制是计算机图形学中对科学计算数据的常用绘制方法,它从数值特性接近的三维点集中构建出三维网格,便于实时绘制。
本课题拟针对CT数据中的骨,设计实现一个采用等值面绘制方法的三维骨形态显示程序。
本课题的目标是运用已经学过的程序设计知识,结合计算机图形图像处理的现有技术,设计实现一个采用等值面绘制方法的三维骨形态显示程序。
用户可以操作该程序选择等值面参数和绘制参数,可以读取Dicom格式的CT影像数据进行骨的三维显示。
本课题有助于锻炼我们的程序设计能力,尤其是对图形图像相结合的分析和编程能力,此外也可以拓展我们对医学影像处理的了解和认识。
为了完成本课题,需要我们具有扎实的数据结构和程序设计基础,而且需要自主学习医学影像处理相关的基本知识,以及医学影像显示方面的编程方法。
在设计和实现本课题程序的过程中要遵循一般的软件工程要求,具有比较规范的基础文档,具备比较完备代码注释,且进行了比较全面的系统测试。
研究内容概括如下:
(1)了解医学影像处理相关基本知识。
(2)理解MC算法基本原理。
(3)用一种编程语言结合VTK库实现等值面绘制程序。
其中,程序的主要功能如下:
(1)读取Dicom格式的CT影像。
(2)用户可以设置等值面参数。
(3)等值面绘制。
(4)骨的三维显示。
1.1.2课题的研究意义
计算机断层扫描(ComputedTomography,简称CT)技术及核磁共振成像(MagneticResonanceImaging,简称MRI)技术已普遍应用在病患的医疗领域中,然而,像这样一些医学设备只可提供物体内部的二维图像。
医师需要凭借多年经验根据很多幅二维图像去预想病患部位的大小和形状,这无疑给医疗诊断带来了巨大困难【1】。
随着科学技术的不断发展,社会的日益进步,医学诊断的精确性与直观程度的要求也愈来愈高。
由于医学图像可视化的重要性日益显著,所以在诊疗科学、整容美形以及外科手术、射线与化学治疗等技术中已经广泛应用【2】。
1989年,美国国家图书馆根据专家的讨论和建议,首先提出了一项被称为可视人(VisibleHuman)的计划【3】,并委托科罗拉多大学医学院进一步研究。
这项计划的内容就是建立一个完整的男女人体的拥有详尽剖解结构的数字化图像库。
通过这项计划的实施,能够分析和重新建立出人体内部相应的器官和组织结构并将其三维显示出来,最终构建出具有实在感觉的可视化人体三维效果,同时可以对重建出的虚拟可视人体进行各种透明处理、解剖分析等设置,便于进一步理解人体各组织器官的解剖结构。
这对医学教育及解剖分析起着非常重要的作用。
不久前,一个令无数人为之激动的新闻在重庆市第三军医大学公布:
中国第一个数字化可视人体已经在该校实验建立完成,并且向海内外同时发布了这一系列“中国可视人”的数据集【3】,这一消息在海内外都引起了极大反响,这一成果也为我国给出了目前为止最为齐整、完备和详尽的一套人体结构的基本数据和图像资料,这一成果也向所有人宣布,中国已经发展为世界上除美国和韩国外,唯一具有本国可视化人体数据集的国家。
1.2课题的研究现状
移动立方体(MarchingCubes)方法是目前为止最为流行的一种等值面三角化算法之一【4】,用于从三维标量场提取一个多边形网格的等值面。
它是基于基本立方体中剖分出来的体数据,随后在每个立方体中都进行标准的三角剖分。
在传统方法中,MC算法是基于15个基本的三角剖分算法和由旋转、反射、共轭等运算得出的256个基本三角剖分算法的组合。
它的运算简单高效,因为它的工作原理几乎是完全关于查找表的【5】。
但是传统的MC算法中有很多缺点和需要改进的地方,许多学者对传统MC算法的优化进行了不懈的研究和创新。
本文主要介绍了传统MC算法的基本原理以及计算过程,并对传统MC算法中的缺点进行了分析,列举并比较了其他几种改进和优化的MC算法,包括SMC算法,MT算法,以及中点法简化线性插值法,等值面顶点矢量平滑等方法。
MC算法最主要有三个方面的问题:
首先,由于移动立方体方法的原理所导致的局限性,所生成的三角面片仅仅能近似显示出了需要求的等值面;第二点就是在体元的同一平面中,将两条相邻棱上的重合点采用线段随便地连接起来只能趋于相似地表示所求等值面;另外,在移动立方体求等值面的方法中,若是体元的一个平面上的标为1和标为0的角点各处于立方体对角线的两头,那末就可以出现2种不同的连接形式,即出现所谓“二义性”【6】。
面对移动立方体算法的这些缺陷,我们可以从以下三个方面对移动立方体算法进行改善:
(1)选择边界跟踪的方法确定边界上的立方体。
经过学者们的多次实验证实,大致有九成以上的六面体都是在边界里或边界外,因为这样一些六面体并不是边界立方体,所以它们之间不存在等值面,如果只对剩下约占十分之一的边界立方体进行处理,就能简化算法的运算过程,从而显著提高算法的效率。
当开始选定边界立方体时,可以利用查找每层断面上的边界线与之相交的立方体表面的方法,即将所有的边界线顺次操作完就能够得到全部的边界立方体;
(2)选择利用立方体棱边的中点作为三角面片顶点的方法,而不是采用三次插值计算的方法,能够节约大部分的运算时限。
同时,考虑到两相邻断层间的距离较小,其最大误差只有立方体边的长度的一半,并且一些显示设备的分辨率比这个长度精度更小,因此该算法是可行的。
(3)在知道的这几种各不相同的鉴别和避免二义性的办法中,渐进线法当之无愧的成为最为常用的办法之一。
当发生二义性问题时,边界平面被双曲线中的两支切割成三个部分,容易得出的是,在双曲线中两条渐近线的重合点必定会与边界中处于对顶线的两个焦点落在相同的一个部分内【7】。
通过此法可以消除二义性。
以下分别简单介绍几种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)的状态值根据这个点与这个点位于的平面上所有轮廓线之间的关联来判断,即在其上、在其内或在其外。
因为所有的体元都有八个角点,按照状态值可以将体元上各个角点标为0、-1或+1,且体元的各条边上的数值是线性变化的。
所以容易得出,边界面通过的顶点状态值为0;假如体元上一条边的两个顶点分别为-1和+1,则可以得出等值边界面与该棱相交;假如某个棱的所有顶点都是同号的,显然有等值边界面与该棱不存在交点。
当等值边界面与某条棱相交,则该棱的中点可以当作交点。
(2)SMC算法的实现及结果
SMC算法是在有序二值图像上进行的【9】。
首先在内存中读入4张相邻的CT二值图像,按顺序记为CT1,CT2,CT3,CT4,其中CT2和CT3是需要构建三维的断层,而利用中心差分法计算各个顶点的法向时将会用到CT1和CT2。
然后计算这4张CT中各点的状态值,进行预处理后,可直接根据该点的灰度值:
灰度0对应状态1,灰度128对应状态0,灰度255对应状态+1。
再根据状态值,利用中心差分方法,可以算出CT2和CT3中各个点的法向。
如果f(x,y,z)表示体素(x,y,z)的状态值,则这个点的法向可以通过以下三个式子来表示为:
公式(1.2)
只要得出这条边上两个端点法向的平均值,就可以得出这条边上中点的法向。
接下来用上述的方法生成体元,并在体元内重新构建出三角面。
通过这个结构,重建出的三角形通过双向链表的方式将数据存储在相应内存中,而且通过J顷序的顺序生成,就可以得到需要的三维几何图像【9】。
1.2.2用中点法简化线形插值
在规范的移动立方体算法中,每一个内部包着等值面的立方体都十分有可能会有一个以上乃至更多的三角面片,如此一来就会使每一个三角片都非常小,乃至比像素更加微小,因此用中点代替顶点造成的更动对最后成像质量的影响不明显。
选择中点法而不是两个端点能够躲开线形插值中的运算相重复的部分,进一步让计算变得简单【10】。
每一次线形插值都得进行代数运算四次,想得出三个顶点就必须进行十二次运算。
如果使用中点法代替顶点,确定顶点位置仅需要3次计算,进而能够明显减少计算量,显著提高运算速度。
中点法保留等值面的拓扑结构而仅仅变化的是产生几何多边形等值面的端点的位置,所以使用中点法的最大误差小于或等于半个立方体【11】。
同理对于只有两个值的相应体数据(数据的值仅为0或1)来讲,如果所求等值面为相对大的值,则此近似误差就是最大的近似误差;如果范围在0到1,就没有近似误差。
三角面片数量越多,相对误差越小,在三角面片极多的情况下,其近似误差是几乎可以忽略的。
另外,中点法可以缩小立方体中的三角面片的数目,进而令各立方体内部或相邻立方体之间衔接的三角面片归只并成一个空间几何多边形。
1.2.3等值面顶点的矢量平滑
利用MC算法重建出的三维图像,其显示结果的可视性和清晰度常常并不能十分令人满意。
由于体数据场中的各种噪声往往会对立方体单元内部的三角面片的位置和方向造成影响,严重的情况下,会招使三维显示的效果出现明显的“鳞状效应”【11】。
为了获得更加理想的三维显示效果,可以将等值面的数据场剖化成两部分,一部分是三维坐标,另一部分则是法向矢量场,利用对等值面剖化出的法向矢量场的矢量实施平滑操作的方法,可以获得相对合适的平滑结果与平滑速率【12】。
等值面矢量平滑方式保留了曾经等值面上三角片的坐标的位置和状态值,还可以凭借光照模型中的浓淡绘制原理,利用增加面片上法向矢量之间连续相关性,进一步取得三维绘制的平滑效果。
1.2.4MT算法简述
MC算法中,在体素的同一个平面上,若标记为1的端点和标记为0的端点(1、0分别表示位于等值面内部或者位于等值面外部),各在对角线的两头,就会导致表现出一对不同的衔接形式,即存在所谓“二义性”,这种结果会进一步造成冲突的拓扑流型在相交平面上产生,所生成的等值面就会出现“孔”的问题。
MarchingTetrahedral(移动四面体)方法简称为MT算法,此算法发明时间较MC算法较晚,但已经显示出巨大的发展潜力。
它是根据移动立方体方法的基本原理和计算过程开发的,同时,它与移动立方体方法还有很多不同的地方。
其一,MT算法最初会将体素立方体化解成四面体,接下来在它里面提取等值面。
在四面体剖分完成后,四面体中等值面的剖分模式缩减,算法实现更加简单。
而且,MT算法生成的等值面比MC算法产生的等值面精度要高。
而采用此方法最重要的原因是以其改善MC算法中存在二义性问题【1】。
等值面在四面体中有重合部分时,只会产生有重合部分的三角形或有重合部分的平行四边形,从而有效的避免了二义性问题。
1.2.5MC算法的效率改进
标准的MC算法需要处理和计算三维数据场中的所有立方体体素。
但一般来说,等值面仅仅与三维体数据场中的个别体素有重合部分,所以这样一来,致使白白消耗了计算的时间,也是算法效率不高的重要原因。
因此,没有必要依次处理整个数据场。
以至于解决这种现象带来的困扰,有学者提出了对MC算法效率方面的创新:
假如立方体体素与等值面有重合部分,那么等值面必然会在这个六面体的各个面的方向上持续延长。
若一个立方体与等值面有交点,则该立方体的六个面中有若干个面将与等值面有交线,且与该立方体相邻的立方体(前后左右上下各个方向相邻的立方体)中的三角片将会按照特定的顺序延伸。
综合上述考虑,可以令数字0、3、4、5、或6来给十五种基础等值面构造类型分别加上一个标识,以显示该体素必需交流的周边六面体的数量。
大量实验表明,百分之九十的等值面是由六种常见情况构成的【13】,所以上述方法可以大量节省计算时间。
1.3本文的组织结构
第一章,绪论。
主要介绍了本课题的研究内容,研究意义,研究现状以课题的应用和发展,并进行了本文的内容组织。
第二章,详明阐述了移动立方体算法的基本原理和计算方法。
也介绍了等值面绘制程序的开发语言及开发工具等。
第三章,详细介绍了骨的等值面绘制程序的开发过程和实现过程,以及实现过程中遇到的问题和解决方法。
第四章,对实验结果进行比较分析。
第五章,对本次设计进行了简单总结,并对骨的等值面绘制程序中存在的不足提出改进方案。
1.4本章小结
通过调研大量文献和相关资料,全面了解了课题的研究内容与实践意义,并根据课题的发展现状,考察了关于面绘制中重要算法MC算法的一些改进方法,对MC算法的优缺点进行了对比。
最后,列出了本文的组织结构。
第二章课题相关算法及开发工具介绍
2.1MarchingCubes算法
2.1.1MarchingCubes算法介绍
医学图像的三维可视化的各种方法中,主流情况下可以分成两种,即面绘制和体绘制。
体绘制更能真实地反映对象的具体构造,但因为它的运算量巨大,即使使用高性能的计算机也不能完全满足实际应用与工作中交互操作的需要【14】。
因此,面绘制是目前医学图像三维可视化中的主流算法。
MarchingCubes(移动立方体,简称MC)方法是三维等值面面绘制方法法中的传统算法,它是由W.Lorensen等人在二十世纪八十年代提出来的一种体素级重建算法【15】。
由于它的原理简单,容易实现,所以得到了广泛的应用。
MC算法散布在每一个体素中都进行等值面提取,所以也被称为分而治之的方法。
在各个被操作的体数据单元中,利用三角面片来逼近表示体数据单元里面的等值面。
三维体数据中的每个体素就是一个小立方体,对每个体素都“扫描”一遍来生成三角面片,似乎是一个小型的运算机在每个体数据单元上转移一样,MC算法的名字就是这么来的。
移动立方体方法就是在产生等值面的过程当中将一套二维切片的数据看作是一个三维的体数据场,并且在里面把具备某种特定的值的结构剖分出来,再以某种特别的拓扑形式衔接成三角面片,所以MC方法有时也可以叫做“等值面提取”方法【14】。
当实施在医疗领域中时,利用MC方法能够重建出人体外面的轮廓线条、内部的组织结果甚至器官的表面褶皱,这样医师就可以直接在三维图像上观察需要观察的部位。
2.1.2MarchingCubes算法基本原理
在移动立方体算法中,需要先假设原始数据相当于有规律的离散三维空间数据场,例如实施于医学诊疗的计算机断层扫描CT图像就属于这一类型。
移动立方体方法的核心思路是依次对数据场中的每个立方体进行操作,寻找那些与等值面有重合部分的立方体,接下来利用线性插值的方法得出等值面与六面体棱的重合点【14】。
然后凭借六面体上每个角点与等值面的相互坐标关系,把等值面与六面体棱上的重合点按特定的形式衔接,构造出等值面,以其成为等值面在该立方体里面的一个逼近的表示。
因而,移动立方体方法中每个体数据最小单元里面的等值面生成办法简单分析可知有这样几个步骤:
(1)体数据最小单元中利用三角面片逼近的等值面运算;
(2)三角面片各顶点法向量计算。
移动立方体方法的基本原理是:
首先在三维体数据场中构造出等值面,接下来寻找通过该等值面的体数据最小单位元,再得出该体元里面的等值面并得出相应数值,这样做十分有利于利用经常使用的工具包或图像硬件应用程序构造出等值面【16】。
在医疗领域的应用中,利用MC算法能够有效地重建出人体外的外部轮廓、内部组织及器官,使医师可以方便直观地在三维图像上考察需要的器官与相邻组织之间的相互位置关联。
另外,MC算法可以充分、高效地使用GPU加速,不仅便于实时绘制,而且重建出的图像质量较高【16】。
移动立方体算法的基本过程如下:
1)每次读出两张切片,形成一层。
2)将上下一对切片所相呼应的总共八个点构成一个六面体,就像图2.1所示。
3)按照从左向右、从前向后的一定次序操作一层中的六面体(提取每个六面体中的等值面),然后再按从下向上的次序同上操作至n-1层【16】。
图2.1Cubes示意图
在每个体素六面体中,六面体的八个角点的值能够通过从输入的体数据中获得。
而需要构造的等值面的阈值则应该是由用户设定,因为构造出来的组织的密度值就是根据等值面的阈值来构造的。
例如,骨骼的密度是比较大的,所以需要设定的等值面阈值也就相应地要大一点,接下来按照体数据的信息就能够提取出等值面中的三角面网格。
2.1.3标准MC算法的计算过程
移动立方体算法首先设当原始数据是有规律的离散的三维空间数据场(例如CT、MRI等图像)时,沿立方体的棱方向上的数据场是线性的、连续变化的【16】。
若六面体一条棱上的一对角点的状态值各是大于、小于等值面的阈值,则在这条棱上有且仅有唯一的一个点是这条棱与等值面的重合点。
当三维体数据场中的体元被顺次依序进行移动立方体操作,即寻找等值面与这些体元的重合点,从而进一步找出体元内部的等值面,这就是移动立方体的基本算法。
上述提到的体元是指由相接两层的相接的八个体数据最小单元所形成的六面体,且八个体数据最小单元刚好组成六面体的八个顶点。
如图2.3。
图2.3数据场中的一个体素
三维数据场中取值相同的全部点的集合构成了等值面。
它能够用以下函数关系来表示:
{(x,y,z)|f(x,y,z)=c},c为常数
由上式显然可知,等值面的值为c,所以对于每个体元来说,当体元的八个角点值都大于阈值c或者都小于阈值c时,则体元里面没有等值面;如果有的顶点值大于c,有的顶点值小于c,体元内存在等值面。
严格来说,等值面属于几何曲面,其解析表达式非常复杂。
为了能更加容易地对其进行描述,我们近似地认为等值面是许许多多由三角形组合的等值面片构成的。
所以,提取等值面的问题就可以等效为在每个体素内找出由三角形组合成的等值面片的问题。
对于每个体元,我们把函数值大于c的顶点标为1,把值小于c的顶点标为0,则依据一条棱上两个顶点的状态,就能够确定等值面是否与它相交。
因为所有的体元都有有八个角点,且每个角点都能够取两种的状态值,所以每一个体元将有28=256个能够出现的状况。
利用三维空间的等效对称性,通过旋转、平移等简单空间操作,我们可以把这256个状态简化成15种互不相同的状态【16】。
图2.4列出了能够取到的十五种形态的等值面的分布。
图2.4移动立方体算法的基本组合。
黑色的圆圈代表等值面内的体素。
等值面的标准三角化是在每一个立方体中进行的。
通过旋转和反射的基本原则可以得到所有可能的组合。
对于立方体中的某条棱边,假如它的两个顶点V1、V2标记的状态值不是相同的,那么选定的等值面必然与此棱边有相互重合的部分。