基于海量行业大数据的三维可视化研究毕业论文
2020-02-17 21:46:39
摘 要
三维可视化技术为数据的分析处理提供了更加合适的解决方案,使数据得以转换成直观形象的图形数据,使观察者更为简便的获取目标信息,为人们的学习和生活带来了诸多的便利,因此,对三维可视化的研究具有重要意义。本文首先针对三维可视化进行分类研究,在对各种算法的比较中,选择了体绘制算法中最具代表性的光线投射算法作为重点,详细分析了算法各个部分的原理,并用VTK-Python库验证了该算法,实现了对部分医疗数据的三维可视化,最终能够在PC屏幕上显示出较为还原的图像。所得到的结果对于用三维可视化技术处理数据有一定的借鉴意义,对于用Python语言实现三维可视化有一定的参考作用,并且对三维可视化技术在医学上的应用有一定的启发。
论文主要研究了体绘制算法中的光线投射算法,详细剖析了算法的各个组成部分的原理,最后用Python验证了该算法。本论文的特色是用Python实现三维可视化技术的一个成功尝试,同时也验证了光线投射算法,并利用GPU加速绘制,使得在提高绘制速度的同时也保证了绘制质量。本论文研究结果表明三维可视化技术能够将医学数据转换为直观的,形象的立体图像,并可以较为清晰的观察到立体细节,为将来复杂三维可视化技术研究打下了坚实的基础。
关键词:三维可视化、VTK、光线投射算法
Abstract
3D visualization technology provides more suitable solutions for data analysis and processing, enables data to be converted into intuitive and vivid graphic data, enables observers to obtain target information more easily, and brings a lot of convenience to people’s learning and life. Therefore, it is of great significance to study 3D visualization. In this thesis, the classification of 3D visualization was first studied. Among the comparison of various algorithms, I chose the ray-casting algorithm as the focus point. Then, I studied each part of the algorithm in detail, and used the visualization toolkit with python to realize the algorithm, also succeed in finishing the 3D visualization of some medical data and get the resulting image from the PC screen. The results have some impact on the data processing with 3D visualization technology and have a significance on the application of 3D visualization in medicine.
This paper mainly studies the ray-casting algorithm in volume rendering algorithm, analyzed each component of the algorithm in detail and realizes the algorithm with Python. This paper’s features: It is a successful attempt to realize 3D visualization technology with Python. At the same time, it also verifies the ray projection algorithm, and I take GPU to speed up the drawing, so as to improve the drawing speed and ensure the drawing quality. The results show that, 3D visualization technology can transform medical data into intuitive and vivid 3D images, and we can observe 3D details clearly.
Key Words:3D visualization;VTK;Ray-casting algorithm;
目 录
第1章绪论 1
第2章 三维可视化研究 2
2.1三维可视化原理 2
2.2三维可视化实现流程 2
2.3可视化算法对比 3
第3章 光线投射算法的研究 6
3.1体数据 6
3.2光线投射算法 6
3.2.1光照模型选择 6
3.2.2基本原理 7
3.2.3坐标变换 9
3.2.4三线性插值 11
3.2.5着色处理 12
3.2.6图像合成 12
第4章 光线投射算法的仿真与结果分析 14
4.1软件环境介绍 14
4.2数据准备 14
4.3程序设计流程及调试 15
4.3.1读取数据 16
4.3.2建立映射 16
4.3.3体绘制属性设置 18
4.3.4交互窗口 22
4.4对比分析 22
第5章 总结与展望 23
参考文献 24
致谢 26
第1章 绪论
计算机技术的发展与进步带动了可视化技术的发展,其中三维可视化技术是近年来可视化研究的热点,并且发展迅速,已成为各种应用中主要的可视化方式。三维可视化技术缩短了物理世界和计算机世界的差距,使数据能够更具体,更形象的展现在计算机上,方便人们观察数据的立体细节,拓宽了人们的视野。三维可视化的研究是为了让冗余复杂的数据通过计算机软件或工具转换为清晰直观的图像信息,并在显示器上显示出来,以便人们观察和研究。研究三维可视化可以使数据处理更加迅速;研究三维可视化可以实现人与计算机之间的图像通信,使人们能够更加方便的获取所需信息;研究三维可视化可以使研究者能够通过改变计算的参数来观察计算过程中所发生的现象,对计算过程实现引导和控制;研究三维可视化可以人们能够通过计算机辅助协同,进行建筑设计、地形评估、医疗诊断等。总而言之,三维可视化的研究使得诸多学科领域的发展更加现代化,从而带动整个科学研究的发展,具有很重要的意义。
三维可视化算法的设计是三维可视化研究的重点,三维可视化算法主要有:面绘制算法,体绘制算法,点绘制算法。早在1975年,面绘制算法的概念就已经被提出[1],其中最具代表性的便是在1987年提出的Marching Cubes算法,但早期此算法存在一定的缺点,后来M.J.Durst等人为了弥补该缺点,做出了相应的改进[2]。体绘制算法中最为常用的算法是光线投射算法(Ray-casting)算法[3],此算法的绘图质量很高,但是它的绘制速度很慢,后来人们为了提高光线投射算法的绘制速度,提出了很多改进方法。如Weiler等人提出了第一个可以在GPU上运行的算法。并且在继续这项工作的途中,Weiler等人又提出了一种改进的算法[4],该算法对GPU的结构进行了优化。Bernardone等人使用深度剥离技术改进了入口面计算[5]。同一年里,Marmitt和Slusallek提出了一种基于坐标的,改进射线与四面体相交方法的CPU光线投射算法[6]。最近,Muigg等人提出了一种能够渲染混合数据集[7]的方法,以及一种用于GPU的更通用网格的算法[8]。点绘制算法概念的提出也较早,是由Levoy和Whitted在1985年提出的[9],但当时的设备并不发达,人们并未注意此算法,后来Grossman和Dally等人发表了一种十分有效的生成和绘制算法后[10],点绘制算法才渐渐的出现在人们的视野中。
本文的研究内容为,首先对传统三维可视化算法进行分类研究,然后以体绘制算法中的Ray Casting算法为重点,深入研究并实现该算法,并且完成对部分医疗数据的三维可视化,所借助的工具为Python的VTK模块,预期的目标为得到数个绘制效果较好且绘制时间较短的头部三维重建图像。正文内容的第一部分介绍三维可视化的原理,实现流程及比较各种算法的优缺点;第二部分详细介绍Ray Casting算法的实现步骤;第三部分主要介绍用Python的VTK模块实现该算法的仿真步骤以及成果分析;第四部分为论文总结。
第2章 三维可视化研究
2.1三维可视化原理
三维可视化的原理是投影变换,有两种形式,分别为正射投影和透视投影,其示意图如下图2.1和2.2所示[11]。正射投影,又称正交投影,其观察体为长方体,其视点常位于无穷远处,且视点方向与投影平面正交,其最大的特点是投影屏幕上投影物体的大小不会随着视点与投影屏幕距离的改变而变化。透视投影则与现实生活中人们肉眼所见的物体效果相似,即物体离视点越近,看起来越大;物体离视点越远,看起来越小。对比上述两种变换,易知正射投影的计算复杂度小,但缺乏深度效果,不能展现出物体内部的细节信息。而透视投影虽然计算复杂度较大,但其投影出的图形与原物体十分接近,所以经常用来模拟真实场景。
图2.1正射投影示意图
图2.2透视投影示意图
2.2三维可视化实现流程
尽管三维可视化算法有很多种,但三维可视化的实现流程大都类似,一般分为数据准备阶段,数据预处理阶段,数据映射阶段,三维图形绘制阶段,如下图2.3所示。
图2.3三维可视化一般流程图
(1)数据准备
数据准备有两种方式,一种是利用计算机中的工具或软件对物体进行计算机建模,形成数据文件,且数据文件的格式由所使用的工具和软件决定。第二种方法是用计算机工具或软件自己生成标量的或者矢量的离散化数据,并对每个数据点赋值。
(2)数据预处理
对于某些大量的可视化数据,有必要进行数据预处理,以降低计算量,提高绘制速率。
(3)场景现实与交互
完成物体在计算机中特定窗口的显示,需要对物体进行坐标变换,以更好的显示物体在世界中的相对位置。此外,还通过计算机软件添加交互功能,以达到更好的可视化效果。
(4)数据映射
此过程是将进行预处理后的可视化数据映射为计算机可绘制的数据,即点、线、面、体的组合。并且还要确定合适的颜色值,不透明度值,梯度值等。在这个过程需要进行包围盒的建立,光照模型的确定,传递函数的设计等。
(5)三维图像绘制
对上一步骤得到的数据,采用合适的合成方式进行合成,并在PC屏幕上显示出来,上述的传递函数的设计是为了在合成三维图像时,可以观察到物体内部的细节信息。这个过程可以借助一些可视化的工具来实现。
2.3可视化算法对比
三维可视化算法的设计是整个三维可视化流程中最为重要的一环,目前常用的可视化算法分为三大类,下面将一一介绍。
(1)面绘制
面绘制为等值面提取和图形模型构建提供了解决方案。该算法的基本思想是首先将三维数据分割为数个二维平面数据,然后再分别对这些二维平面数据进行处理,即将目标区域与背景区域分隔开,然后将每个二维平面数据的目标区域的轮廓连接起来,生成一个表面模型。最后,使用计算机工具或者软件将所得到的表面模型绘制显示出来。
面绘制算法的优点在于可以较为迅速的反映物体表面的信息,且可以对所选定的等值面产生清晰的图像,但是面绘制算法并不能反映物体真实的表面及内部的细节信息,这是面绘制算法最大的缺点。
(2)体绘制
体绘制是现代科学可视化的基石。体绘制提供了一个可以用来交互式探索标量场的工具,它被广泛应用于生成体标量数据的各种场景中,如医学成像(CT、MRI),材料科学(晶体学)和物理模拟(气候模型)等。一般而言,体绘制可以看作是物理过程的离散化,该物理过程模拟光通过半透性材料进行传输。具体地说,给定一个不透明度和颜色已定的体标量场、视点和传递函数(Transfer Function),它可以通过控制每个像素点处光线采集的颜色值来生成图像,并且可以通过对传递函数的调整来提高渲染图像的真实感。因此,传递函数的设计是体绘制的一个重要组成成分,它能够实现用户与物体交互,以查找物体的相关特性。
体绘制算法最大的优点就是能够准确细致地反映出物体的内部细节信息,但是体绘制算法的计算量便因此而增加,绘制的速度也变慢。一般而言,体绘制最常用的是直接体绘制法。直接体绘制法,顾名思义,就是直接从三维标量数据生成图像的方法,其主要包括光线投射法,错切-变形法,频域体绘制法等[12],图2.4给出了体绘制算法的具体分类。直接体绘制法中最具代表性之一的是Ray-casting算法,其绘制图像的质量很高,能够真实的还原出物体,所以常被用于医学数据的三维可视化。但有时为了特殊的需求,会对体绘制算法的绘制质量和绘制速度都有严格的要求,并且还要针对不同的数据类型设计相应的算法。
图2.4体绘制算法分类及代表算法
(3)点绘制
点绘制算法采用离散随机分布的点云来表征物体表面,这些点云要具有能够体现物体有效细节的特点,并且对于一些空白的区域,要采用插值的方法实现无空缺,这样才能生成能够真实还原出体现物体细节的图像。点绘制算法真正受到研究人员们的关注是在1998年后,Chen等人提出了三维点集与三角面片相结合的混合绘制系统[13],Deussen等人实现了用点绘制算法完成对复杂场景的绘制[14]。与面绘制算法相比,点绘制算法的优势是绘制时较方便,不需要一些中间过程来辅助实现。与体绘制相比,点绘制算法的优势是降低了计算量,同时点绘制便于重采样,因此它能够通过建立多层次的结构来实现多分辨率绘制。
在对上述三类可视化算法有了一定的认识后,我选择了光线投射算法作为主要研究对象,该算法的一个优点是不会丢失体数据的细节信息,使得观察者能够从PC屏幕上感受到整个立体的信息;另一个优点是它不仅采用离散化的采样方法,而且在图像合成上也采用了光线模型的离散形式。这使得光线投射算法易于移植到计算机中实现。因为我所准备的数据为医疗数据,而医疗数据的三维重建对绘制质量有一定的要求,所以我选择了体绘制算法中绘制质量最高的光线投射算法,虽然其绘制速度慢,但是可以通过绪论中提到的基于GPU加速的光线投射算法来实现三维重建,这样既保证了绘制质量,也提高了绘制速度。下一章将对Ray-casting算法的原理及实现流程进行详细的探究。
第3章 光线投射算法的研究
3.1体数据
光线投射算法的数据一般为体数据。体数据,一般是三维的甚至多维的,顾名思义就是指包含有物体内部细节的数据,而且体数据一般用于计算机处理,所以它是离散化的。举例来说,如果存在一个三维的数组,能够将装有数据点的三维空间表示出来,并且存在一个映射函数,使得数组中的每一个成员都对应有一个标量值,那么该数组便可以称作体数据。在生活中,来自CT、MRI或超声波等扫描设备的数据,以及来自计算流体力学、地球物理学和生物医学计算等领域的模拟结果,通常以体数据表示。
体数据的最小组成单元称为体素,体素是体元素的简称,它表示三维空间规则网格上的一个值,反映体数据某部分的相对位置。在上述的举例中,我们把体数据当作是一个三维数组,那么体素就相当于数组中的每一个成员。体数据要想存储到计算机中,必须有一个具体的文件格式,这便引出了体纹理(volume texture)的定义,体纹理也称三维纹理,它是传统二维纹理的逻辑拓展,如果用数据表达的话,那么体纹理应该为(x,y,z)的形式。它是用于描述三维空间数据的图片,其颜色值可以为用体绘制技术显示出来的三维图像提供参考。
3.2光线投射算法
3.2.1光照模型选择
体绘制技术要想实现具有真实感的绘制效果,必须建立一定的模型来对读取的体数据进行计算,并将这些数据映射成为可供合成的数据,完成最终的合成。所以,几乎每一个直接体绘制算法都是基于光照的发散或者吸收定理来建立不同的光照模型,来计算得到直接体绘制积分,以方便后续的合成。根据体素对光照吸收和发散程度的不同,光照模型可以分为以下几种:
1.吸收模型:此类模型是假定体数据中的所有体素可以完全吸收所射入的光线,而本身既不发射光线也不发射、透射光线[15];
2.发射模型:如果体素发射光线的功能远大于吸收光线的功能,那么就可以将此类体数据看作只发射光线的光线模型;
3.吸收和发射模型:一般来说,体数据的每个体素自身的发射光线的能力和吸收光线的能力都不能忽略,所以就有了光线吸收和发射模型,它是以上两种模型的结合,但是它不能对光线进行反射和散射,这种光学模型的使用最为广泛;
4.散射和阴影模型:体数据中的体素能够对光线进行散射,并且要考虑光照时,相邻体素之间的产生的阴影,这个也会影响最终的合成效果;
5.多散射模型:光线可以被多个体素散射。
在光线投射算法中,为了与最终的合成公式相匹配,我们常选择光线的吸收和发射模型,其基本方程式为
(3.1)
该等式描述了沿着该射线上位置x处的光线到达的辐射率,为发射函数,为吸收函数。将此公式用数学知识离散化,就可与合成公式相匹配。
(3.2)
3.2.2基本原理
光线投射算法是一种基于体数据(图像序列)的直接体绘制算法[16],其基本原理是:从视点出发,沿着一定的方向发射一条视线(射线),视线(射线)首先穿过成像屏幕上的每一个像素点,然后穿过整个体数据(图像序列),按照自定义的采样距离来对体数据(图像序列)进行采样,并将采样值转换为颜色值和不透明度。接着依据自己选择的光照模型将这些值进行累加,按照合成公式进行合成,最后确定该像素的颜色值。其原理如图3.1所示。
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: