版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、医学图像三维重建摘 要图像的三维重建和显示是科学计算可视化的一个重要分支,尤其在医学领域得到很大的重视,也成为现今的一大研究热点,具有广泛的应用前景。本文设计实现了基于断层投影(ct)、核磁共振(mri)二维断层图像序列的三维重建系统,并同时介绍了三维重建的典型面绘制算法比如mc算法,以及在这过程中相关的图像处理关键技术,比如:图像平滑、图像分割、图像配准、和插值等。同时还着重介绍了可视化工具vtk(visualization toolkit)特点及其在vc+6.0编程中的配合使用,最后还讨论了运用matlab实现单张ct图片上感兴趣区域的测量功能,以结合重建出来的三维图形辅助分析和诊断,具有
2、实用意义。该系统采用vc+6.0和vtk作为开发工具,以windows xp操作系统为开发平台.通过vc+实现在图像处理中的核心算法,并调用vtk库类来实现图像的重建和显示以及旋转和缩放,实现全方位的观察。并可根据不同需要自行选取多种不同的重建方法来实现。整个系统的设计遵循面向对象的指导思想,保证了系统的可维护性和扩充性。关键词:三维重建;vtk;面绘制;图像分割;图像配准medical image 3d reconstructionabstractimages 3d reconstruction and display is an important embranchment of the
3、visualization in scientific computing. especially in medical field, it becomes a hot research today, and we can set eyes on great potential application in the future.in this paper, we realize a medical image 3d reconstruction system, which is based on the 2d image sequences such as ct (computed tomo
4、graphy) and mri (magnetic resonance imaging). at the same time, the typical surface rendering arithmetic such as mc and other key technologies of image processing are discussed, which are well related to this design. for example, image registration, image segmentation, pixel data set construction an
5、d interpolation. the traits of vtk (visualization toolkit) and how to use it in the vc+ program are also introduced in this article. at last, it realizes the measure function of a piece of ct image by using matlab. so people can do the analysis and diagnosis work better by combining this function to
6、 the 3d reconstructed image.the reconstruction system uses vc+6.0 and vtk (visualization toolkit) as its developing tools, and its based on the windows xp platform. it uses vc+ to realize the key algorithm in the image processing, and calls the vtk library class to implement the reconstruction, disp
7、lay, rotation and zoom. this will help us to observe the reconstructed image in all direction. and you can choose the different reconstruction methods according to your own need. the whole systems design follows the guiding ideology of object-oriented; it has great maintainability and extendibility.
8、 keywords:3d reconstruction;vtk;surface mapping ;image segmentation;image registration; 目 录摘 要abstract1 绪论(1)1.1 科学计算可视化技术概论(1)1.2 医学图像三维重建概况(1)1.2.1 国内外研究概况(1)1.2.2 医学图像三维重建的原理(2)1.3 医学图像三维重建的目的和意义(3)2. vtk介绍及应用程序设计(5) 2.1 vtk简介(5) 2.2 vtk进行三维重构的技术特点(5) 2.2.1 vtk的框架结构(5) 2.2.2 vtk绘制过程(7) 2.2.3 vtk可
9、视化模型(8) 2.2.4 vtk图形处理(10) 2.3 vtk在vc+环境下进行三维重建(12) 2.3.1 使用vtk处理大量数据(12) 2.3.2 用vtk进行ct图像重建(13)3 三维重建体数据预处理的关键技术(15)3.1 图像平滑(15)3.1.1 gaussian smooth(15)3.1.2 中值滤波(16)3.1.3 开运算(17)3.2 图像分割(18) 3.2.1 全局阈值法(18) 3.2.2 大津法(19)3.3 构建体数据集(20) 3.3.1 图像配准(22)3.3.2 插值(24) 3.4 提取所需要的等值面(27)3.5 图像的旋转(27) 3.6 图
10、像的缩放(28) 4 医学图像三维重建(29)4.1 医学图像三维重建算法概述(29)4.2 面绘制(29)4.2.1 边界轮廓线表示算法(30)4.2.2 移动立方体(mc)算法(31)5 医学图像三维重建系统(35) 5.1 功能设计(35)5.1.1 基本功能(35)5.1.2 辅助功能(35) 5.2 系统结构(36) 5.3 重建系统程序流程(36)5.4系统界面(37)5.5 交互(38)5.5.1 旋转和缩放(38)5.5.2 图像测量(39)6论文总结及改进(41)致谢(42)参考文献(43)iv1 绪论1.1 科学计算可视化技术概论科学计算可视化是指运用计算机图形学和图像处理
11、技术,将科学计算过程中及计算结果的数据转换成图形及图像在屏幕上显示出来并进行交互处理的理论、方法和技术,它是当前计算机科学的一个重要方向1。发达国家在20世纪80年代后期提出并发展这一新的研究领域。在1987年2月召开的关于科学计算可视化的首次会议中将这一涉及多学科的领域定名为“visualization in scientific computing”。随后,西方各国的著名大学、科研机构、大公司纷纷进行科学计算可视化理论和方法的研究。经过短暂的十几年的发展,科学计算可视化理论和方法的研究已经在国际上蓬勃开展起来并开始走向应用。随着技术的发展,科学计算可视化的含义已经大大扩展。它不仅包括科学计
12、算的可视化,而且包括工程计算数据的可视化,也包括测量数据的可视化,如用于医疗领域的计算机断层扫描(ct)数据及核磁共振(mri)数据的可视化,就是最为活跃的研究领域之一。科学计算可视化将图形生成技术、图像处理技术和人机交互技术结合在一起,其主要功能是从复杂的多维数据中产生图形,也可以分析和理解送入计算机的图像数据。它涉及到计算机图形学、图像处理、计算机辅助设计、计算机视觉及人机交互技术等几个领域。它的意义在于以下几个方面:(1)大大加快数据的处理速度,使目前每日每时都在产生的庞大数据得到有效的利用;(2)实现人与人和人与机之间的图像通讯,而不是目前的文字或数字通讯,从而使人们观察到传统方法难以
13、观察到的现象和规律;(3)使科学家不仅被动地得到计算结果,而且知道在计算过程中发生了什么现象并可改变参数,观察其影响,对计算过程实现引导和控制;(4)可提供在计算机辅助下的可视化技术手段,从而为在网络分布环境下的计算机辅助协同设计打下了基础。1.2 医学图像三维重建概况1.2.1 国内外研究概况作为科学计算可视化技术最为活跃的研究领域之一,医学图像可视化己经经历了二十多年的发展,国际上很多著名的科研机构都致力于可视化系统方面的研究,部分甚至已经产品化了。目前有很多比较成熟的三维医学图像重建系统,其中包括美国宾州大学开发的3dviewnix系统和德国汉堡大学开发的voxel-man系统等,但都是
14、运行在unix环境下。由美国国家健康协会(national institute of health)给出的一份临床医学图像处理软件的名单是目前在网络上能够搜索到的较全面和详细的相关产品目录。其中包括了有关图像处理、可视化、图像配准、图像分割等多方面的图像处理软件系统。单就可视化方面的软件,目前共罗列了有36种,如: vtk和3dslice等,这些系统都是由国际上知名的研究所,大学和公司等组织开发研究的。 在国内,在可视化方面一直致力于提高重建速度(实时显示利于交互操作),使重建效果理想,减少冗余信息及存储空间。许多科研单位均作了大量的研究,也取得了一定的成果,如清华大学开发的人体断层解剖图像三
15、维重构系统,西北大学可视化研究所研制的三维医学可视化分析平台,中科院自动化所开发的visualizer, mitk、3dmax等,但目前还没有成熟的商业化系统。这些医学图像处理系统均考虑到了我国的具体国情,并主要从以下几个方面进行了研发: (1)不完全数据提出一个足够精确的数据提取方案。(2)能够快速准确地实现图像重建的算法设计。(3)界面接口及操作方式的人机工程方面的优化设计。 目前很多大医院都配有三维图形工作站,利用工作站医生们可以将病人的多幅二维图像重构成三维的形体,并直观地显示出来。从而一改医生们只能凭经验由多幅一维图像去估计病灶的大小和形状,“构思”病灶与其周围组织的三维几何关系而给
16、治疗带来困难这一现状。不过,要获得一个好的可视化效果,对专业知识的要求很强,繁琐的参数设置调节无疑会给通常不具有专业可视化技术的医生们带来很多不便,同时又降低了诊断效率。目前的可视化软件需要很多的手工设置和调整,这样即使对专业人员而言,达到最佳的显示效果也很不易。一幅图像的显示,少则需要10多分钟,多则需要1-2小时。更重要的是医生们渐渐对工作站失去兴趣和耐心,都不愿去用它。从而导致了设备的闲置和资源的浪费。正是因为认识到对大规模数据的可视化处理的难度,所以现在许多可视化软件都提出了各种算法,解决时间及空间的相关技术,但是在这方面还有很多地方需要不断地进行完善,以满足日益繁重的可视化处理在时间
17、、空间以及硬件等方面的要求。算法的改进也己经成为科学计算可视化领域的一个研究热点。三维图形工作站除具备高质量的可视化软件外,还配备高性能的硬件支持。通常,它能提供强大的图像处理功能,海量存储,网络支持等丰富的功能和特色,并提供方便、友好的人机交互接口。由于医学图像数据的海量特征,医学图像可视化通常都是在影像工作站甚至小型机上实现的,然而即使如此,可视化速度(尤其是体绘制速度)受计算机硬件条件的限制,一直达不到令人满意的效果。目前使用的可视化系统基本上都是基于面绘制的,因为它具有计算量小的特点。但在同时,它也具有不能保留物体的内部信息的缺点,故限制了其在医学图像可视化中发挥更大的作用,如果能解决
18、这一问题,面绘制将成为最好的选择。1.2.2 医学图像三维重建的原理医学图像三维重建,就是把由ct、mri等数字化成像技术获得的人体信息在计算机上直观地表现为三维效果,从而提供用传统手段无法获得的结构信息2。其可视化过程包括:(1)数据预处理: 可视化的数据来源十分丰富,数据格式也是多种多样的,这一步将各种各样的数据转换为可视化工具可以处理的标准格式;(2)映射: 映射就是运用各种各样的可视化方法对数据进行处理,提取出数据中包含的各种科学规律、现象等,将这些抽象的、甚至是不可见的规律和现象用一些可见的物体点、线面等表示出来;(3) 绘制: 将映射的点、线、面等用各种方法绘制到屏幕上,在绘制中有
19、些物体可能是透明的,有些物体可能被其他物体遮挡;(4) 显示: 显示模块除了完成可视信息的显示,还要接受用户的反馈输入信息,其研究的重点是三维可视化人机交互技术。 经过多年的发展,科学计算可视化技术己经成为科学研究中必不可少的手段,它的应用使科学研究工具进一步现代化,从而使科学研究的面貌发生着根本性的改变。1.3 医学图像三维重建的目的和意义在人类的发展过程中一直面临着与疾病的斗争,这个斗争的过程必然要求从人体获取各种各样尽可能丰富的信息。因而,与医学相关的、反映人体各种生理病理状态的解剖和功能信息,以及获取这些信息的方式方法等对疾病的诊断和治疗以及研究具有重大的意义。自古以来“望、闻、问、切
20、”都是国内外进行医学诊断最基本的手段。自1895年伦琴发现了x射线以来,首先应用于医学领域,通过透视和照相对疾病进行诊断,从而开创了x射线照相技术,第一次无创伤地为人类提供了体内器官组织的解剖形态图像,使医学的诊断方式发生了翻天覆地的变化。1972年x射线计算机断层成像技术(x-ct:x-ray computerized tomography)的出现奠定了现代医学影像学的基础,标志着人类进入二维断层可视时代。其后,磁共振成像(mri:magnetic resonanceimaging)、超声成像(ultrasonic omogra-phy)、数字血管减影成像(dsa:digitalsubtra
21、ction angiography)、核医学成像(pet、pect)等各种新兴的医学成像技术相继出现并在临床上得到了广泛的应用,使得传统的医学诊断方式发生了革命性的变化。使用计算机对医学影像设备采集到的影像进行处理这一技术,被称为医学影像处理与分析,它可以辅助医生进行更好、更准确的诊断。随着现代计算机科学技术的发展,医学影像处理与分析越来越多地受到人们的重视,现在己经成为一门新兴的发展迅速的交叉科学领域。然而,现有的二维影像数据只表达某一截面的解剖信息,医务人员主要是通过胶片或者在显示屏幕观察二维影像进行诊断。无论是胶片还是屏幕显示仍然是二维图像,并且只能以固定方式对图像进行观察,所得到的诊断
22、结果带有医生的主观判断,这在很大程度上取决于医生的临床经验。在放射治疗应用中,仅由二维断层图像上某些解剖部位进行简单的坐标叠加,不能给出准确的三维影像,造成病变(靶区)定位的失真。目前大多数临床应用都还停留在这个水平,而这显然不能充分利用图像数据中隐含的很多重要信息。现代医学的发展使得临床诊断和治疗对充分利用医学图像中包含的丰富信息的要求越来越高。科学计算可视化技术和计算机技术的迅速发展,使得提供直观、逼真而且能够包含原始信息中隐含的丰富内容的三维甚至四维(时间作为第四维)信息成为可能。通过图像图形技术,可以对影像进行任意放大、缩小、旋转、对比调整、三维重建等处理。而通过医学影像可视化技术,充
23、分利用医学图像中包含的丰富信息,重建医学影像数据中隐含的三维解剖结构和功能信息,揭示人体内部精细的组织解剖信息,增强人们对人体结构和机能的理解,为医疗人员提供病变区域的三维模型,便于他们从多角度、多层次进行观察,并对病变体或感兴趣的区域进行准确的定量分析,这无疑对提高影像数据的利用价值有深远的意义,而且对提高临床诊断的准确性和正确性有很大益处。近几年的siggraph会议上都设有可视化、重建技术在医学中的应用专题。医学图像的三维重建技术能充分利用ct、mri等医学图像体数据,采用面绘制或体绘制的成像算法,可根据需要得到任意视角透视的三维投影图像,便于医生对人体内部结构进行观察4。利用三维重建技
24、术对医学图像进行处理,构造三维模型,并对三维模型从不同方向投影显示,提取出相关器官的信息,能使医生对感兴趣器官的大小、形状和空间位置获得定量描述。三维重建技术使得医生能够直观、定量地察看器官的三维结构,加强图像中原有的各种细节,从而帮助医生作出更正确的诊断。采用医学三维图像重建技术,病人只需要进行一次扫描,获取其患病部位的若干断层的数据(原始数据),通过该技术就可以让医生从多角度进行观察,方便了诊断。医生不仅可以从任意角度、位置观察患病区域,而且还可以应用模式识别技术,由系统自动分析出病灶部位信息,如肿瘤、血栓的位置、大小等。这减轻了医生的工作强度,提高了工作效率,有利于提高医疗行业的现代化水
25、平。 在临床手术中,通过对患者手术前后三维图像的比较很容易进行手术效果的评定。有利于建立客观的评判标准,一改以往定性的手术医疗模式,引入定量的机制,从而使医学更加严谨和规范。因此,将目标物体在三维结构上表现出来的医学三维图像重建成为可视化研究的一个重要方面。通过对传统技术获得的离散数据进行处理,将其转变成为具有直观立体效果的图像,充分展现组织或器官的三维状态,从而提供若干用传统手段无法获得的解剖结构信息。而且这种技术可以为诸如虚拟窥镜、虚拟解剖等虚拟技术的进一步发展提供了视觉交互基础。在此基础上,也可以实现矫形手术、放射治疗等计算机模拟及手术规划。研究出有效的三维图像重建技术,能大大的改变目前
26、医疗的方式,提高医疗技术水平,减轻患者痛苦,特别是对提高手术成功率有很大的意义。医学影像可视化的研究成果可广泛应用在辅助医疗诊断、手术及放射治疗规划、整形与假肢外科、医学教育等方面。这一新兴学科有着它本身的特点,其中很多关键性的问题还未得到圆满的解决,而这些问题的解决直接影响到计算机图像、图形技术在医学上的成功应用,并且这些问题的解决不仅有着理论上的意义,而且具有十分重要的应用意义。2 vtk介绍及应用程序设计2.1 vtk简介vtk可视化类库是william j.schroeder, kenneth m.martin, william e.lorensen 三人于1993年,利用面向对象的建
27、模技术,设计和实现的源代码开放的三维可视化类库3。vtk构造在c+语言上,可在windows、unix等操作系统下运作,其内核独立于操作系统。它包含两个子系统:一个是c+类库,另一个是支持tcl/tk、python, java语言操作编译过的c+类库的封装层。其主要功能包括三维计算机图形学、图像处理和可视化三大部分,封装了图形图像学和可视化领域内多种常用算法;同时开发人员还可根据需要在vtk基本类的基础上开发自己的类库。另外,vtk支持多种数据类型,如有规则或无规则的点阵(point sets),图像(image),体素数据(volume)等,这些数据类型的互相转换也非常方便。在vtk中,提供
28、了灵活丰富的用于读取各种数据格式的文件,及其相互转换的类,如从vtkimagereader继承而来的各种用于读取图像的类:vtkbitmapreader(位图读取类),vtkjpjegreader(jpeg 图像读取类)等。也可以扩展基类vtkimagereader,vtkimagewriter,以增加读写其他格式图像的类,如vtkdicomreader,vtkdicomwriter等dicom标准的图像。同样,在vtk中,将众多常用的图形操作及图像处理算法封装成不同的类,易于理解和调用。应用vtk进行开发的系统包含两种模型:可视化模型和图像模型。可视化模型用来对原始数据进行处理,通过映射(m
29、apper)把数据转换成图像数据,再通过图像模型对图像数据进行绘制和显示。2.2 vtk进行三维重构的技术特点2.2.1 vtk的框架结构vtk是在三维函数库opengl的基础上,采用面向对象的设计方法发展起来的。它将我们在可视化开发过程中常用的算法封装起来,屏蔽了具体的细节。vtk采用的是pipeline (流水线)机制,几乎可以对任何类型的数据进行处理,并提供了许多相应的类对各种类型的数据进行转换或处理。根据所要处理的原始数据类型的不同和所使用的算法以及所要达到的结果,我们可以设计和建立起自己的可视化流程,并由此选择不同的数据处理和转换的类,用数据通道将这些类连接起来,将原始数据类型转换为
30、所采用的算法模块可以直接进行处理的数据类型,最终得到我们所需要的可视化的结果,而且所有的类和算法模块都是可扩充的,用户可以将自己开发的类或模块转换成系统可以接受的形式,并可替换或扩充原有的类。所以vtk是一个开放的系统,可以扩展到任何应用领域。vtk采用流水线(pipeline)机制,大体框架2.1图所示。source是流水线的开始,首先通过读入文件等方式产生源数据,论文中的数据源是一组序列位图文件。滤波器(filter)可有若干数据输入并可产生若干数据输出,是一个独立的计算机模块,其功能是对数据作各种交换。原始数据经若干滤波器处理后输出计算结果。mapper是流水线的终端,将filter的输
31、出转换为图形数据,是可视化流水线和图形模型之间的接口。显示数据时,首先要建立一个显示窗口,actor是显示窗口中的实体,接收mapper传来的数据属性。然后建立一个renderer,通过renderer把结果最终在窗口中演示出来,一个窗口可以建立多个renderer。sourcefiltermapperactorrenderer图2.1 vtk流水线(pipeline)机制框架图用面向对象技术的对象模型图表示vtk的框架结构如图2.2所示。用vtk来产生图形和进行可视化应用是非常方便的,它包括两个基本部分。首先,建立一个数据流水线(datapipeline)来处理数据;其次,建立适当的目标图形
32、来演示数据。建立流水线(pipeline)就是将sources,filters和mappers连接起来。 vtkobjectvtksourcevtkfiltervtkrendertkrendervtkactorvtkmapper图2.2 visualization toolkit对象模型的框架结构图vtkobject是vtk的基类,它为整个可视化流程提供基本的方法。vtksource是vtkobject的派生类和vtkfilter的父类,它为整个可视化流程的开始(比如读取数据等)定义具体的行为和接口。vtkfilter是vtksource的派生类,它对数据进行各种处理,将原始数据经过各种fil
33、ter的处理后,转换为可以直接用某种算法模块对其进行处理的形式。vtkmapper也是vtkobject的派生类,它将经过各种filter处理后的应用数据映射为几何数据,为原始数据与图像数据之间定义了接口。这样,依据要处理的数据的类型和想要实现的功能,多种类型的sources 、filters和mappers就连接了起来。类型检查控制着哪一类的filters可以连接在一起。vtk一个很特别的地方是:对于任何进行可视化的数据,它都是通过角色在窗口中表现出来的,因此建立目标图形应该做以下工作:建立renderingwindow(绘制窗口);建立actor(交互操作者),vtkactor类用来表达绘
34、制场景中的一个实体,也就是绘制场景中的演员,它通过setmapper方法将几何数据的属性告诉演员。建立renderer(演示者),通过vtkrender类将结果在窗口中显示出来。2.2.2 vtk绘制过程vtk的设计目标之一是将复杂的图形、图像处理和显示过程分割成尽量简单的对象,每个对象都必须定义明确,实现上述处理过程的部分功能。在图形、图像的显示方面,共有许多种类控制他们的属性和操作。一是窗口类,该种类型的类都是从vtkwindow继承而来,要显示计算机图形或图像到计算机屏幕上,必须首先打开一个计算机屏幕上的窗口,窗口类负责打开一个窗口,管理打开的窗口资源以及该窗口在屏幕上的位置,使用底层的
35、图形图像显示函数库,将图形、图像显示到该窗口,vtkrenderwindow就是我们进行绘制时主要使用的窗口类,为了使用工业标准的图形库,我们还可以使用vtkrenderwindow扩展类vtkopenglrenderwindow,实现对opengl图形库的支持。另一种重要的类是绘制类(rendering),基类为vtkrenderer,该类包含所要显示的数据对象,控制该图形或图像数据的空间坐标系,控制它们在窗口中的显示区域,该类还可以设置相机坐标,控制显示图形图像的平移、旋转、缩放等操作,可以通过该类设置显示背景、光照等参数,因而绘制类是控制图形和图像等显示的最重要的一个类。一个绘制窗口类可
36、以包含多个绘制类,这样在一个窗口中就可以同时显示几个不同的场景,这样的设计对于在一个窗口中比较可视化的效果是非常有效的。通常所用的绘制类为vtkopenglrenderer,它继承自vtkrenderer,增加了对opengl图形库的支持。vtkopenglrenderwindow和vtkopenglrenderer在类库中的继承关系如下图2.3所示:vtkobjectvtkobjectvtkviewportvtkrenderwindoww vtkrenderervtkopenglrenderwindowvtkopenglrenderervtkwin32openglrenderwindowvt
37、kxopenglrenderwindow图2.3 vtkopenglrenderwindow和vtkopenglrenderer在类库中的继承关系vtkrenderwindow类管理绘制进程,它通过调用render()函数,促使vtkrenderer类刷新窗口中显示的内容,完成绘制过程。一般的绘制过程如下: vtkrenderwindow renwin; renwin-setsize(600,300); /设置显示窗口在计算机屏幕上的位置 vtkrenderer ren1;/在这里需设置绘制类所包含的图形图像数据及其属性ren1-setviewport(0.0,0.0,0.5,1.0);/设置
38、第一个绘制类所控制的图形图像的窗口坐标系ren1-setbackground(0.8,0.4,0.2);/设置背景 renwin-addrenderet(ren);/将它包含到绘制窗口类中 vtkrenderer ren2;/在这里需设置绘制类所包含的图形、图像数据及其属性 ren2-setviewport(0.5,0.0,1.0,1.0);/ ren2-setbackground(0.1,0.2,0.4);/ renwin-addrenderer(ren2);/将它包含到绘制窗口类中 renwin-renderstart();/开始执行绘制命令,完成绘制操作上面所介绍的是普通的绘制过程,没有
39、涉及到图形图像数据的装载、处理等内容。在vtk中,控制具体的图形、图像数据,还有它们属性的类,主要是props, mappers, properties三种类型的类。props类型的类表示所要显示的二维、三维实体,它包含该实体的可见性信息、方向、大小以及该实体的位置等。vtkprop是所有这些类的基类,在vtkprop中引用mapper类型和property类型的对象,mapper类型的对象引用数据对象,并知道怎样绘制该数据对象,property类型的对象包含绘制时所需的参数,例如绘制时的前景和背景颜色、材质等。mapper类型和property类型对象的基类分别为vtkmapper, vtk
40、property这几种类型的类在绘制过程中的包含、引用关系如下图2.4:vtkmappervtkprop绘制vtkwindowvtkrendervtkpropertyvtkdataobject设置绘制参数显示实体装入绘制类装入绘制参数增加对该数据对象的引用计数得到需显示的数据 图2.4 绘制过程中各类的相互关系上面为简要的引用、包含关系图,实际在绘制时一般都是生成这些类的子类的对象的实例,在绘制过程中,如果没有设置各种属性,则采用这些属性的缺省值。2.2.3 vtk可视化模型vtk模型可以与许多商业应用软件一样,利用了数据流程模型。在此模型中,各个模块在network(网络)中连接起来。当数据
41、在网络中走向时,利用模块对数据进行系列操作。此数据流程模型的执行是响应数据的处理以及响应用户输入。这种模型的特点是灵活性强,可适用于不同的数据类型及不同的算法。数据流程模型由两种基本对象组成:流程对象:包括可视化流程的模块及算法。数据对象:数据处理,当数据在网络中流动时对数据进行操作。(1) 流程对象流程对象又可以分为:1)源(sources)对象vtksource是基类,指定源目标的行为和接口。源对象是可视化流程的起点,源对象包括readers(从文件中读入源数据)vtkdatasetreader类,程式源对象vtkpolydatasource, vtkstructuredgridsourc
42、e,vtkstructuredpointssource,vtkunstructuredgridsource,源对象同时会产生输出数据。当流程处理数据结束以后,源对象会自动删除源对象输出的数据。2)过滤器(filters)对象vtkfilter是基类,丛vtksource派生而来,接受从源对象的输出数据,得到数据类型及其值。3)映射(mapper)对象vtkmapper是基类,mapper指定了基本图元与数据之间的接口,接受过滤器对象输入的数据类型及数据值,把数据映射为基本图元。(2) 数据对象vtk共有5种数据类型:多边形数据(vtkpoiydata)、结构点(vtkstructurepoin
43、t)、非结构点(vtkunstructurepoint)、结构网格(vtkstructuregrid)、非结构网格(tkunstnxcturegrid);vtkdataset是基类。1) vtkdataset类提供关于数据的信息:数据的中心,包围盆,取样长度。在vtk中,数据由结构(儿何体及表圆形状)和属性数据组成。结构定义为cells(原子)的集合类,结构的几何体包括点坐标及cells的插值函数,结构的表面形状由cells的类型及原子于定义点之间的关系决定的。属性数据可以是点数据或cells数据。2) 多边形数据(vtkpolydata类)vtkpolydata是vtkdataset派生来的
44、数据类型,vtkpolydata可以表示由顶点、直线、多边形及三角片组成的几何结构,同时也表示了点的属性(scalars,向量)值。由vtkpolydata支持的原子类型(vtkcelltype)包括(vtkpolyvertex, vtkvertex , vtkline, polyline,vtktriangle,vtktrianglestrip,vtkpolygon,vtkpixell及vtkquade。vtkpolydata的对象可以使用特定的方法来遍历所有数据点及对数据进行操作:如getcell( )可以得到vtkcellarray的对象,这样一来,就可以使用inittraversal(
45、)及getnextcell()对vtkpolydata中的cell进行遍历。3)结构点 vtkstructuredpoints是一包括表面形状及几何形状的点阵的几何体结构。4)非结构网格非结构网格可以为任意cell类型的组合,其中包括od(如点),1d(如线、多义线),2d(如三角形、多边形)及3d(如六面体、四面体)。可以用insertnextcell( )插入cell类型。5)结构网格:结构网格指定了几何体的结构。2.2.4 vtk图形处理在vtk中,处理图形和可视化有两种不同的方式:(1)图形模式:用于2d, 3d图形,如一般的图形处理。(2)可视化模式:用于可视化过程的数据流模型,如c
46、t数据输入及处理。图形模式利用了其他3d图形系统的一些简单易于使用的特点,其基本思想来自于电影制作业,同时也采用了一些目前的gui的方法,在图形模式中有9种基本对象:1) 渲染窗口(renderwindow ) vtkrenderwindow是基类,用于在显示设备上生成一个窗口,渲染窗口是用户图形界面,可以设置渲染窗口的大小,也可以产生立体显示效果,支持双缓存。其派生类包括:vtkwin320g1rrenderwindow, vtkwin320penglrenderwindow,vtkxrenderwindow等等。vtkrenderwindow *renwindow=vtkrenderwin
47、dow:new();/renwindow-setwindowid(getsafehwnd();/可嵌入到mfc的窗口/renwindow-initialize();/初始化/renwindow-swapbufferson();/设置双缓存2) 渲染器(renderer )vtkrendeerer是基类。renderer(渲染器)对象用于控制目标的渲染过程,renderer把几何体、指定的灯光及摄像机观察角度转换成图像形式。提供了世界坐标系,观察坐标系及显示坐标系之间的转换。当生成renderer(相当于场景)以后,需要在窗口中显示出来,即把渲染器加入到renderwindow(渲染窗口)中去。
48、vtkrenderer *ren=vtkrenderer:new();renwindow-addrenderer(rend) ;3) 灯光(light) vtklight类提供了灯光的位置,灯光的状态(开/关)、亮度、颜色。vtk支持点光源、平行光源。同时也可以设置光源的照射角度,以及衰减程度。设置好光源以后,要把光源加入到renderer(相当于场景)中。vtklight *light=vtklight:new();light-setfocalpoint(camera-getfcalpoint();light-setposition(cameia-getposition();ren-addl
49、ight(light );4) 摄像机(camera )vtkcamera类设置视点的位置以及视点的焦点位置及摄像机的一些操作。摄像机的参数如下图2.5所示。 图 2.5 摄像机的参数设置5) 角色(actor)场景中的目标物体。vtkactor代表渲染场景中的实体,可以设置actor的位置和方向(从vtkobject继承来的函数),也可以对指定的actor进行缩放,actor还具有渲染特性,引用(reference)(如mapper),以及设置actor的纹理影射(texture)。actor(角色)把这些变换融合为一个4x4的变换矩阵x y z 1=x y z 1;这样,可以进行各种变换操
50、作,平移,缩放,绕x,y,z轴旋转。绕世界坐标系旋转,绕指定轴旋转。6)特征(property )要使三维物体具有真实感,必须对物体表面进行光照处理。vtkproperty类指定了几何物体的光照及其他的特性。其特性包括:光照特性(泛光、漫反射、镜面反射、边缘颜色)、漫反射强度、物体的灰度、物体的表现形式(点、线框、表面),着色模式(flat , gouraud , phong)等等。7)映射(mapper )mapper指定了数据与基本因元之间的联系,vtkmapper的派生类通过一个向上观察板(lookuptable)来映射数据,同时控制与图形库相连的图元的生成。可以通过向上观察板( loo
51、kuptabie )及数据映射的scalar的范围指定来控制映射方式。mapper有多种控制方式:如scalarvisibility可以设置scalar的数据是否影响相关的actor的颜色。scalarmode决定物体的颜色是scalar还是celldata的值。mappr另一特点可以决定使用即时渲染( immediatemoderenderingon ),还是显示列表渲染( immediatemoderenderingof f )。当使用显示列表渲染时,在渲染库中会自动生成一数据结构,渲染库可以很快地遍历此数据结构,并形成渲染。但显示列表渲染占用内存很大,从而影响系统的性能。注:vtkloo
52、kuptable用来把scalar的位映射到rgb值,或把rgb值映射到scalar的值上。8)变换(transform ) transform是一个4x4变换矩阵的堆栈,有很多对此矩阵进行操作的方法,如:平移、缩放、旋转。这些操作都在栈的顶部进行。actor和camera使用transform矩阵变换操作。注:transform所有的操作都是在右手坐标系中进行的。2.3 vtk在vc+环境下进行三维重建2.3.1 使用vtk处理大量数据在vtk的使用过程中存在的一个问题是如何处理大量的数据。一般情况下,考虑到内存空间的有效利用率问题,vtk适用于处理少量的数据。对于大量的数据,我们可以通过如
53、下的方法来解决:使用releasedataflag在系统默认情况下,vtk在每一个流程中对滤波器之间的所有中间结果都有一个备份。在一个包含5个滤波器的流程中,在内存中可能会产生6个数据备份,这可以通过releasedataflagon和globalreleasedataflagon来控制。如果releasedataflagon被设置到一个目标数据,一旦一个滤波器完成对这个目标数据的利用后,内存马上就被释放。同样,如果globalreleasedataflagon被设置到任何目标数据,这些目标数据所依赖的滤波器停止运行后,它们的内存马上就会被释放。例如在c+环境中vtkpoiydatareade
54、r *reader=vtkpoiydatareader:new( );reader-getoutput( )-releasedataflagon( );或者:vtkpoiydatareader *reader=vtkpoiydatareader:new( );reader-getoutput( )-globalreleasedataflagon( );设置releasedataflagon( )后,将会减少对内存影响,但也有缺点,那就是内存中不会保留所有的中间结果。因此,如果我们要间接的改变一个滤波器的参量,所有的滤波器都必须要重新运行来产生新的结果。如果内存中对间接结果有保留的话,只有改变参
55、量的滤波器需要重新执行。为了取得较好的运行效果,我们有一个建议,当在一个流水线中如果只有一个步骤的参量可以改变,我们只需要保持数据在此步骤的较高的优先级并且在所有其它步骤中都使用releasedataflagon即可。使用immediatemoderendering在系统默认的情况下,vtk使用opengl演示列表,这样会在内存中对数据产生备份。对大部分的大量数据来说,为了节省内存,最好不要使用演示列表。我们可以通过打开immediatemoderenderingon来关闭演示列表。这可以通过immediatemoderenderingon在一个mapper中加以控制。还可以通过利用globa
56、limmediatemoderenderingon对一个过程中的所有mapper进行控制。例如:vtkpoiydatamapper *mapper=vtkpoiydatamapper:new( );mapper-immediatemoderenderingon( );或者vtkpoiydatamapper *mapper=vtkpoiydatamapper:new( );mapper-globalimmediatemoderenderingon( );用immediatemoderendering的缺点就是如果内存不够大的话,那么绘制速率就会变得很慢。通过vtkstripper来使用trianglestrips在vtk中大部分的滤波器是独立的三角形或者多边形,但是它们都不是可以最简洁,最有效的演示出来的。为了从多边形数据中产生出三角形,我们可以首先利用vtktrianglefilter来将任何多边形转变为三角形,然后通过vtkstipper来运行,将三角形转变为连环三角形。例如:在c+环境中 vtkpoiydatareader *reader=vtkpoiydatareader:new(); rea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年床上用品品牌代理合同
- 2024医院药品零售许可合同
- 2024年建筑合同纠纷预防及处理办法
- 2024年度IT企业软件许可使用合同
- 2024年度搬厂工程机械设备租赁合同
- 2024年度委托加工合同:甲乙双方在二零二四年就某产品委托加工的详细条款
- 2024年度量子科技实验室建设安装工程分包合同
- 2024年度智能停车安防监控系统安装合同
- 2024展厅装饰装修合同范文
- 2024年商标许可使用合同商标范围
- 四年级上册书法课件- 10兰叶撇 |通用版 (共10张PPT)
- 消防水池 (有限空间)作业安全告知牌及警示标志
- 大学政府采购项目验收报告(货物服务类)
- 港口码头常用安全安全警示标志
- 统编小学语文四年级上册第八单元教材解读
- 热质交换原理与设备复习题(题库)(考试参考)
- 海上风电施工船舶安全管理办法
- 公安警察工作总结汇报PPT模板
- 《砼路面施工方案》word版
- 文书档案归档及整理规范PPT幻灯片课件
- MBTI十六种人格优缺点总结
评论
0/150
提交评论