上一节课内容回顾 第七讲 三维标量场等值面可视化 7.1 Cuberille表示和显示方法 7.2 Marching Cube算法

Slides:



Advertisements
Similar presentations
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
Advertisements

第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
信号与系统 第三章 傅里叶变换 东北大学 2017/2/27.
§3.4 空间直线的方程.
《解析几何》 -Chapter 3 §7 空间两直线的相关位置.
3.4 空间直线的方程.
《解析几何》 乐山师范学院 0 引言 §1 二次曲线与直线的相关位置.
云南省丽江市古城区福慧学校 执教者 :和兆星.
丰富的图形世界(2).
10.2 立方根.
上一节课内容回顾 第八讲 三维标量场体可视化 体绘制与面绘制的比较 体光照模型 体光线跟踪法 体单元投影法 三维扫描变换
2、以对象空间为序的体绘制算法—单元投影法
一次函数的图象复习课 南华实验学校 初二(10)班 教师:朱中萍.
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
七 年 级 数 学 第二学期 (苏 科 版) 复习 三角形.
探索三角形相似的条件(2).
第三章 点 §3-1 两投影面体系中点的投影 §3-2 三投影面体系中点的投影 §3-3 两点的相对位置 §3-4 重影点 例题1 例题2
光学谐振腔的损耗.
Computer Graphics 计算机图形学基础 张 赐 Mail: CSDN博客地址:
辅导课程六.
元素替换法 ——行列式按行(列)展开(推论)
数学模型实验课(三) 插值与三维图形.
双曲线的简单几何性质 杏坛中学 高二数学备课组.
2.1.2 空间中直线与直线 之间的位置关系.
工业机器人技术基础及应用 主讲人:顾老师
混合绘制 2019/4/5 Visual Analytics Group | CAD&CG国家重点实验室.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二十二章 曲面积分 §1 第一型曲面积分 §2 第二型曲面积分 §3 高斯公式与斯托克斯公式.
线段的有关计算.
正方形 ——计成保.
2.3.4 平面与平面垂直的性质.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第四章 一次函数 4. 一次函数的应用(第1课时).
WPT MRC. WPT MRC 由题目引出的几个问题 1.做MRC-WPT的多了,与其他文章的区别是什么? 2.Charging Control的手段是什么? 3.Power Reigon是什么东西?
3.3 垂径定理 第2课时 垂径定理的逆定理.
§1体积求法 一、旋转体的体积 二、平行截面面积为已知的立体的体积 三、小结.
第五节 对坐标的曲面积分 一、 对坐标的曲面积分的概念与性质 二、对坐标的曲面积分的计算法 三、两类曲面积分的联系.
用计算器开方.
作业 P152 习题 复习:P 预习:P /5/2.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
科学计算可视化 授课教师: 单位:.
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
3.1 变化率与导数   3.1.1 变化率问题 3.1.2 导数的概念.
相关与回归 非确定关系 在宏观上存在关系,但并未精确到可以用函数关系来表达。青少年身高与年龄,体重与体表面积 非确定关系:
《工程制图基础》 第四讲 几何元素间的相对位置.
第4课时 绝对值.
直线和圆的位置关系 ·.
空间平面与平面的 位置关系.
《工程制图基础》 第五讲 投影变换.
平行四边形的性质 鄢陵县彭店一中 赵二歌.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
§2-2 点的投影 一、点在一个投影面上的投影 二、点在三投影面体系中的投影 三、空间二点的相对位置 四、重影点 五、例题 例1 例2 例3
正弦函数的性质与图像.
基于列存储的RDF数据管理 朱敏
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
第十七讲 密码执行(1).
位似.
§4.5 最大公因式的矩阵求法( Ⅱ ).
生活中的几何体.
H a S = a h.
第三章 图形的平移与旋转.
3.3.2 两点间的距离 山东省临沂第一中学.
§3.1.2 两条直线平行与垂直的判定 l1 // l2 l1 ⊥ l2 k1与k2 满足什么关系?
§2.3.2 平面与平面垂直的判定.
Presentation transcript:

上一节课内容回顾 第七讲 三维标量场等值面可视化 7.1 Cuberille表示和显示方法 7.2 Marching Cube算法 7.3 有限元等值面 7.4 VTK中三维标量场的等值面可视化

等值面是指空间中的一张曲面,在该曲面上函数F(x,y,z)的值等于某一给定值. 准确地讲,是在一网格空间中,其中每一结点保存着连续三变量函数F(x,y,z)在网格单元(xi,yj,zk)上的采样值F(xi,yj,zk),对于某一给定值Ft,等值面是由所有点SFt= {(x,y,z):F(x,y,z) = Ft }组成的一张曲面。

7.1 Cuberille表示和显示方法 Cuberille表示是一种适合于正交密集数据场的表示方法,主要适用在医学图像、无损探伤等三维图像的等值面抽取.该表示将三维图像中的每一象素看成是空间中的一个小立方体,在该小立方体内,数据场具有相同的值,整个空间及其对象就由这类小立方体组成.这类小立方体被称作Cuberille表示中的体素。Cuberille表示和显示方法就是基于这种简单的体素表示。

图7.1 Cuberille中的体素

7.2 Marching Cube算法 Marching Cube算法是三维数据场等值面生成的经典算法,是体素单元内等值面抽取技术的代表。这一类算法所处理的数据一般是三维正交的数据场。 Marching Cube算法中的立方体体素与Cuberille表示中的立方体体素不同,后者仅以一个等值立方体表示一个体素值,等值面由体素的六个表面面元组成.而在Marching Cube算法中,体素是一逻辑上的立方体,由相邻层上的各四个象素组成立方体上的八个顶点,如图7.2所示.算法以扫描线方式逐个处理数据场中每一立方体体素,求出每一体素内包含的等值面,由此生成整个数据场的等值面. 图7.2 Marching Cube中的体素

15种模式 : 1 2 3 4 5 6 7

10 9 8 11 12 13 14

7.2.2二义性解决方法 Marching Cube算法提供了一种较精确的等值面生成方法,但在它所提出的15种体素内等值面连接模式中存在着许多二义性的连接,如图7.5所示. 图7.5二义性立方体

另一种消除二义性的方法是将立方体剖分成四面体处理,在四面体中生成等值面就不存在二义性问题。 可假设在四面体边上数据场呈线性变化,对于每个四面体,等值面模式只有三种情况,如图7.11所示.如果顶点数据值全大于或小于等值面值,等值面与单元无交,如一点大于另三点小于等值面值,则四面体中等值面是一三角片,如二点大于二点小于等值面值,则等值面是一四边形,可由两个三角片构造. 图7.11 四面体中的等值面

1)单元类型不一样,常见的有限元单元类型有4结点、6结点、8结点等,且每一单元比体素要大得多,单元边也往往非直线(见图7.12); 7.3 有限元中的等值面 在有限元分析的后置处理中,等值面抽取和显示是一个主要手段,与前述的立方体体素相比较,尽管基本思路相同,但由于有限元数据的特点,有限元中的等值面生成又有其不同之处.与正规化体素相比,有限元数据有以下特点: 1)单元类型不一样,常见的有限元单元类型有4结点、6结点、8结点等,且每一单元比体素要大得多,单元边也往往非直线(见图7.12); 2)输入数据不一样,其几何连通性不是隐含的,而是显式说明的,数据中包含了每一单元每一顶点的几何数据. 图7.12常见的有限元单元类型 

小结 等值面是三维标量场最基本的表示方法。 Cuberille表示将整个场空间划分成等值立方体体素,其中等值面由体素的外表面组成。 为了提高等值面生成的精度,体素被认为是由相邻层对应八个采样点组成。针对这种体素表示,出现了以Marching Cube算法为代表的单元内的等值面抽取方法。 两种二义性解决方法:基于线性插值假设下的渐近线交点判定方法和四面体剖分后插值及等值面构造。

本节课内容 第八讲 三维标量场体可视化 体绘制与面绘制的比较 体光照模型 体光线跟踪法 体单元投影法 三维扫描变换 VTK中的体绘制技术

8.1 体绘制与面绘制的比较 在自然环境和计算模型中,许多对象和现象只能用三维体数据场表示,和传统的计算机图形学相比,对象体不再是用几何曲面或曲线表示的三维实体,而是以体素(voxel)作为基本造型单元.对于每一体素,不仅其表面而且其内部都包含了对象信息,这是仅用曲线或曲面等几何造型方法所无法表示的. 体绘制的目的就在于提供一种基于体素的绘制技术,它有别于传统的基于面的绘制,能显示出对象体的丰富的内部细节. 体绘制技术包括体数据的表示、操作和绘制三部分内容.

体数据的来源有两类: 一类是通过采样设备,如CT,MR等仪器,获得的实验数据,如断层扫描数据集; 另一类是通过计算模型获得的计算数据,得到的通常是有限元计算数据集. 两类数据集统称为三维体数据集. 在前一类正规化断层扫描数据集中,体素一般表示为中心在网格点的单位立方体(如采用Cuberille表示),或各顶点在网格点的单位立方体(如Marching Cube算法). 在后一类有限元计算数据集中,体素一般指有限元单元且其网格空间是非正规化的.采用三维扫描变换可以将非正规化的有限元单元数据集转换成正规化断层扫描数据集.

体素是指网格空间中的单位立方体,每一体素都有一个相应的数值表示某些可测量的属性或独立变量(如颜色、不透明度、污染物浓度、密度、材料、比率、折射率、速度、强度、变形、时间等). 图8.1表示了体绘制的一个数据流过程,描述了体绘制和面绘制两种绘制方法的各自过程。虽然两种绘制方法都是对三维数据场的显示,但由于基本方法的不同,因而在绘制效果,算法时间,交互性能等多方面都存在着很大的差别.

图8.1 两种绘制方法的各自过程

体绘制的一个特点就在于放弃了传统图形学中体由面构造的这一约束,采用体绘制光照模型直接从三维数据场中绘制出各类物理量的分布情况. 等值面、等势面等数据场的几何面表示方法,是研究者们为 了适应图形显示,人为地提出的一种数据场表示形式.体绘制的根本点就在于放弃了这一做法,直接研究光线穿过三维体数据场时的变化,得到最终的绘制结果. 体绘制由于直接研究光线通过体数据场时与体素的相互关系,无需构造中间面,体素中的许多细节信息得以保留,结果的保真性大为提高. 从结果图像的质量上讲,体绘制要优于面绘制.但从交互性能和算法效率上讲,至少在目前的硬件平台上,面绘制还是要优于体绘制的.

8.2 体光照模型 体光照模型是进行体绘制的基础.当光线穿过体素与光线遇到一曲面时,会发生不同的光学现象.前者如光线穿过云层会发生吸收、散射等现象,后者如光线射到桌面上,有漫射、反射、透射等现象.不同的物理背景决定了体光照强度的计算与面光照强度的计算有着不同的模型和方法. 体光照模型就是研究光线穿过体素时的光强变化,将光线穿过体素时的物理现象用数学模型来描述.在目前的体绘制中,采用得较多的有源-衰减模型、变密度发射模型和材料分类及组合模型.

8.2.1 源—衰减模型 源—衰减模型为体数据场中的每一体素分配一个源强度和一个衰减系数,每一体素作为一个质点光源,发出的光线在数据场中沿距离衰减后被投影到视平面上,形成结果图像. 8.2.2 变密度发射模型 变密度发射模型认为任一对象都是一个质点光源系统。整个对象空间中都充满着粒子云,每一粒子均可发光.模型处理的是宏观的质点密度,而非质点粒子本身.该模型认为质点足够小,以致可以认为质点是连续分布的. 8.2.3 材料分类及混合模型 材料分类及混合模型认为每一体素是由若干种材料组合而成,如在CT图像中每一体素由骨路、软组织、脂肪和空气等组成,其中每种材料的组成由该种材料在体素中所占的百分比来描述.每一体素中每种材料的百分比的确定采用的是概率分类而非二值分类.对不同材料分别计算其密度分布以及光照强度和不透明度,在分类的基础上,再通过组合公式,将各种材料的光照强度和不透明度以所占的百分比为权混合成该体素的亮度和不透明度.与前两种模型相比最根本的区别在于材料分类及混合模型是一种基于分割的光强组合计算方法,它着眼于分割,而非讨论体数据中的各类物理现象.

体光照模型提供了体数据中各数据点光照强度的计算方法,体绘制方法提供的是二维结果图像的生成方法. 8.3 体绘制方法分类和比较 体光照模型提供了体数据中各数据点光照强度的计算方法,体绘制方法提供的是二维结果图像的生成方法. 首先根据数据点值对每一数据点赋以不透明度值和颜色值;再根据各数据点所在点的梯度及光照模型计算出各数据点的光照强度,然后将投射到图像平面中同一象素点的各数据点的半透明度和颜色值综合在一起,形成最终的结果图像. 根据不同的绘制次序,体绘制方法目前主要分两类: 以图像空间为序的体绘制算法 以对象空间为序的体绘制方法.

(1)以图像空间为序的体绘制算法——光线跟踪 以图像空间为序的绘制算法是从屏幕上的每一象素点出发,根据设定的视点方向,发出一条射线,这条射线穿过三维数据场的体素矩阵,沿这条射线选择K个等距采样点,由距离某一采样点最近的8个体素的颜色值及不透明度值做三维线性插值,求出该采样点的不透明度值及颜色值.在求出该条射线上所有采样点的颜色值及不透明度值以后,可以采用由后到前或由前到后的两种不同的方法将每一采样点的颜色及不透明度进行组合,从而计算出屏幕上该象素点处的颜色值. 光线跟踪的主要步骤: For 每条光线 Do For 每个与光线相交的体素 Do 计算该体素对图像空间对应象素的贡献

(2)以对象空间为序的体绘制算法——单元投影法 该类算法首先根据每个数据点的函数值计算该点的不透明度及颜色值,然后根据给定的视平面和观察方向,将每个数据点的坐标由对象空间变换到图像空间.再根据选定的光照模型,计算出每个数据点处的光照强度.然后根据选定的重构核函数计算出从三维数据点光照强度到二维图像空间的映射关系,得出每个数据点所影响的二维象素的范围及对其中每个象素点的光照强度的贡献.最后将不同的数据点对同一象素点的贡献加以合成. 单元投影法的主要步骤: For 每一体素或单元 Do For 该体素在视平面投影区域内的每一象素 Do 计算象素点获得的光照强度

两种方法各有特点,光线跟踪要将当前所有体数据放入内存,内存要求高.而单元投影只需当前单元的体数据. 从走样的情况分析,由于光线跟踪采用点采样,走样情况只有通过分布式光线跟踪才能消除.相对地讲,单元投影可达到解析解的程度.实质上,图象质量高低的关键在于所采用的重构核函数的精度.高精度的再采样同样能较大地提高光线跟踪的质量. 对象空间往往比图像空间要大得多,单元投影法的计算时间相对要大得多. 光线跟踪难以并行化,而单元投影的并行处理要相对容易得多.

光线跟踪是三维场景绘制的一个很有效的方法,与传统的基于三维场景几何表示的光线跟踪相比,体绘制光线跟踪有其许多自身的特点: 8.4体光线跟踪法 光线跟踪是三维场景绘制的一个很有效的方法,与传统的基于三维场景几何表示的光线跟踪相比,体绘制光线跟踪有其许多自身的特点: 首先,对象空间的表示不同.传统的对象空间是用造型技术建立起来的几何表示;而体绘制的对象空间是由被称为体素的单位立方体排列而成.也可以看成是由一系列断层数据组合而成,称为体缓冲区. 其次,求交方式的不同.传统的光线跟踪是与对象表中的对象求交,求出最近的相交点;而体绘制光线跟踪是遍历整个体缓冲区,求出第一个与光线相交的非透明的体素,由该体素中所存的数据值计算其光照强度. 第三,计算复杂度的不同,传统光线跟踪算法其计算时间随着对象的增加,组成场景对象的复杂度增加而大大增加,主要是由于求交的开销影响着整个算法的效率;而体绘制免去了大量费时的求交计算,只需计算与立方体素的交和一个体素的遍历机制.因而体绘制光线跟踪的复杂度与组成场景的对象数目和类型无关.其复杂度主要和体缓冲区的分辨率有关.在给定分辨率的情况下,体绘制光线跟踪的时间几乎是一常数. 最后,任何与视点相关参数的改变,都会引起光线跟踪算法的完全重计算.对传统光线跟踪而言,这些重计算包括纹理颜色的计算,光源可见性的检测,光照强度的计算等等;而对于体绘制而言,许多与视点相关的计算在三维离散采样生成体数据时已经存在于体数据中,如对象的纹理等,其绘制参数的改变主要是视点、光源和光照明模型,相对而言。计算量要小一些.

8.4.1 三维对象的直接二维显示 该算法从屏幕向对象空间发射光线,假设屏幕上的每一点都是一光源,该光源以重直于屏幕的方向发射平行光.对于屏幕上的每一点,首先计算出对象空间中与该点光线相交的第一点,然后再根据交点处的信息计算屏幕点最终的颜色值.

图8.11 计算光线与对象边界的交点

图8.12 算法对象框架

当对象空间是离散数据场时,用对象边界计算光线与对象的第一交点,如图8.11所示,交点必定位于沿光线两点I1和I2之间,其中I1和I2满足: 为方便算法的叙述,对算法作下列假设: 1)对象放入一矩形盒中,由若干断层组成; 2)给定一点,能确定该点位于哪一断层上; 3)屏幕是一正方形或矩形,被分割成象素,每一象素由一点表示; 4)屏幕垂直于光线方向,光线方向由连接屏幕中心点和包围盒的直线确定.

采用离散方式计算交点位置.选择一足够小的步长d,对屏幕上每一点P,沿光线找出满足条件的一点Q,如图8.13所示,Q点可以通过以d为步长沿光线采样测试条件来寻找. 如果步长d太大,可能会丢失一些对象的交点,如图8.14所示,但如果d太小,采样过密,速度会很慢.

图8.13 沿光线求交点 图8.14 步长d太大丢失交点

三维对象直接二维显示算法的主要过程: For i=l to L Do P=E十(i一1)U; For i=1 to L Do 计算K0和K1 K=K0十1 Q=P十Kt While(Q在对象外)and(K < K1)) Do K=K十1 Q=Q十1 End While IF Q在对象内 Then 计算第一个交点I与P点的距离 计算I点法向量; 计算P点颜色值; Else 置P点为背景值 End If End For P=P+V

8.4.2 光线投射法 光线投射的体绘制算法是目前使用最广泛的一种体绘制方法,如图8.15所示,对于图像平面上的每一象素,从视点投射出一穿过该象素的视线,该视线穿过体数据空间,算法直接利用该视线上的采样值计算该象素的光强. 整个算法分为光线生成、光强计算与组合、图像显示三部分。

图8.15 光线投射法

设体数据中每一位于(i,j,k)的体素值为f(x)(x=(i,j,k)),位于视平面(u,v)处象素的光线为R(u,v),其强度值为C(u,v). 首先由f(x),根据光照明模型计算出对应的光强值C(x)和不透明度值a(x).沿光线R,进入图像空间与体数据包围盒相交,在两相交点之间设置一系列采样点S1,S2,…Sm。根据C(x)和a(x) ,通过再采样计算出对应的C(Si)和a(Si),将C(Si)和a(Si)沿光线组合在一起就是当前象素点处的光强度值,如图8.16所示过程.

图8.16 光线投射流程

根据光线的方向,组合可分为从后到前和从前到后两种组合方式。 设光线穿过体素前颜色和不透明度为Cin和Ain,穿过体 素后为Cout和Aout (见图8.17), 光线从后到前的组合为: Cout=Cin(1-Ain) + C(Si)* A(Si) 光线从前到后的组合为: Cout=Cin+C(Si) (1-Ain) 两种组合前者直接计算, 后者要计算Aout,但后者 可利用Aout优化累加过程, 故一般还是多采用后者. 图8.17 光线组合方式

光线投射体绘制算法: C(R)=0 a(R)=0 X1=First(R) 求出在对象空间中光线进入和离开的位置 X2=Last(R) Ul=Image(X1) 转换到图像空间中的位置 U2=Image(X2) 对所有在该对象空间的采样点S For S=U1 to U2 Do Sx=Object(S) 转换到对象空间他置 求出Sx处的不透明度值a(Sx) If a(Sx)>0 Then C(Sx)=采样点处的颜色(c*a) C(R)=C(R)十C(Sx)(1 - a(R)) a(R)=a(R)十a(Sx)(1-a(R)) End If End For

8.5 体单元投影法 体单元投影法是以对象空间为序的一种体绘制方法,它从对象空间的三维数据场出发,依次计算每个数据点对屏幕上各象素点的贡献,将同一平面和不同平面上各数据点对各象素点光亮度的贡献合成起来得到最后的图像,其过程如图8.20所示. .

图8.20 体单元投影

8.5.1 V-Buffer算法 该算法是基于正交网格点上计算单元的投影绘制方法.算法扫描整个对象空间,依次逐个处理每一单元,由视点和单元的相对位置来决定单元的扫描次序,为每一单元定义一个包围盒,用扫描线裁剪生成单元投影贡献的象素区域.对每条扫描线上的象素点计算出光照强度和不透明度,然后进行累加,可见性由不透明度所决定.该方法类似于消隐中的Z-Buffer算法,故称为V-Buffer算法。

(1) 扫描次序的决定 由于在V—Buffer中保存的是每一象素不透明度的累加值,后续单元对该象素的贡献受该累加不透明度的影响,因而单元扫描次序的决定是决定算法正确组合的基础. 单元的处理,由接近视点的平面开始,逐个平面处理,直至最远的平面.在每个平面内的单元处理次序是根据单元与视点距离,从最近的单元开始,然后处理相邻单元,这样就形成了一个类似同心圆式的扫描过程. 由于是正交网格单元,单元之间不会相互重叠,从而保证了上述处理次序的正确性,同时该算法也更易实现并行. 图8.21显示了算法单元的处理次序,在同一平面内由l-9决定了扫描次序,同一次序号的单元可并行处理.

(2)单元的处理 在逐个单元的处理中,首先为每一单元决定一个包围盒.由该包围盒在图像平面上的投影,决定该单元投影的扫描线范围.对于包围盒内的每条扫描线,计算由扫描线所确定的扫描平面与单元的交多边形,该交多边形是一凸多边形,投影到扫描线上形成至多五段区间(见图8.22). (3)光亮度贡献的累加 对于与单元有交多边形的各条扫描线上的每一象素,要计算单元对它的光亮度贡献和不透明度的贡献,其中各象素点不透明度的值作为V-Buffer的内容保留在V-Buffer中.光亮度和不透明度的计算在每个象素的四个顶点上进行.首先求出当前象素上的投影线与交多边形的交点,如图8.22中P点的投影线与交多边形有两个交点A和B,由交点可求出交线长,由交线长可计算出当前单元对该象素的贡献,再将贡献累加到图像平面上.

图8.2l 单元扫描次序

图8.22 单元的投影

8.23 象素顶点的累加

由四个象素顶点形成一四边形,所有空间函数如不透明度、光照强度和纹理在单元内都作为三次变量函数,插值可采用三维线性插值. 当前象素的四个顶点的累加光亮度和不透明度(见图8.23) Cacc=(1—Oacc)C十Cacc Oacc=(1—Oacc)O十Oacc 这是一种从前到后的累加,累加过程在 1)单元处理完; 2)对应象素的V-Buffer中的值Oacc到达1; 会停止对应象素点的光亮度累加.当所有象素都停止累加,则整个算法停止运行,完成绘制过程.

8.5.2 Footprint算法 Footprint算法的过程和纹理映射的过程是一对相反的过程.纹理映射是要计算出图像平面上每一象素在纹理空间中的取值范围,将该范围内值加权求和作为象素的纹理值.而Footprint算法的过程是对每一数据采样点计算出它在图像平面内的影响的象素范围(Footprint范围),通过把各采样点的能量扩展到图像空间,逐步重构原始信号. 该算法要计算的是每一采样点对最终图像的贡献和每一采样点对每一象素的重构核心.图8.24比较了这两者的各自过程。

图8.24 纹理映射与Footprint计算过程

整个Footprint算法由四步组成:变换、光强计算、重构和可见性组合 整个Footprint算法由四步组成:变换、光强计算、重构和可见性组合.页是通过数据空间平行于图像平面的一个平面, Footprint算法是对页内的所有体素同时进行的. 首先将页内采样点从数据空间(i,j,k)变换到屏幕图像空间(x,y,z).应用光照模型计算出光照强度(x,y,z,r,g,b,a). 然后选用Footprint函数计算采样贡献所能影响的图像空间的范围,将其贡献累加到图像空间的页累加器中,其中Footprint函数的决定、函数的采样和采样贡献的扩展,被形象地称为Splatting过程.比喻为确定一滴水从对象空间落到图像平面上溅开的范围. 当一个页内的采样处理完后,用一组合操作将页累加器内的值组合到工作图像中; 当所有采样处理都完成后,工作图像将成为最后的图像.

8.6 三维扫描变换 以有限元计算数据为代表的非正规化网格空间的数据集无法直接使用前几节介绍的体绘制方法,必须通过三维扫描变换将其转换成正规化网格空间数据集. 所谓将面数据转换成体数据,也就是把多边形表示的几何形体转换成体素表示,这一过程被称为体素化(voxelization).通过体素化把三维空间中表示连续曲面的几何数据转化为三维空间中表示对象的离散体素,这实际上就是一个三维扫描变换过程.

8.7 VTK中的体绘制技术: 1 体元道具:vtkVolume ----几何表面可视化中vtkActor volume = vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) 2 体元特性:vtkVolumeProperty (颜色和透明度) 灰度: SetColor (vtkPiecewiseFunction ) 彩色: SetColor (vtkColorTransferFunction) 标量的透明度:SetScalarOpacity (vtkPiecewiseFunction ) 梯度的透明度: SetGradientOpacity (vtkPiecewiseFunction ) volumeProperty = vtkVolumeProperty() volumeProperty.SetColor(colorTransferFunction) volumeProperty.SetScalarOpacity(opacityTransferFunction) opacityTransferFunction = vtkPiecewiseFunction() opacityTransferFunction.AddPoint(20,0.0) opacityTransferFunction.AddPoint(255,0.2)

3 体元Mapper: vtkVolumeMapper vtkVolumeRayCastMapper: colorTransferFunction = vtkColorTransferFunction() colorTransferFunction.AddRGBPoint(0.0,0.0,0.0,0.0) colorTransferFunction.AddRGBPoint(64.0,1.0,0.0,0.0) colorTransferFunction.AddRGBPoint(128.0,0.0,0.0,1.0) colorTransferFunction.AddRGBPoint(192.0,0.0,1.0,0.0) colorTransferFunction.AddRGBPoint(255.0,0.0,0.2,0.0) 3 体元Mapper: vtkVolumeMapper vtkVolumeRayCastMapper: 设置射线合成函数: SetVolumeRayCastFunction(vtkVolumeRayCastFunction) 设置梯度计算函数: SetGradientEstimator(vtkEncodedGradientEstimator) volumeMapper = vtkVolumeRayCastMapper() compositeFunction = vtkVolumeRayCastCompositeFunction() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInput(reader.GetOutput()) (2) vtkVolumeProMapper用于VolumePro卡 (3) vtkVolumeTextureMapper2D

reader = vtkStructuredPointsReader() reader.SetFileName("./ironProt.vtk") # Create transfer mapping scalar value to opacity opacityTransferFunction = vtkPiecewiseFunction() opacityTransferFunction.AddPoint(20,0.0) opacityTransferFunction.AddPoint(255,0.2) # Create transfer mapping scalar value to color colorTransferFunction = vtkColorTransferFunction() colorTransferFunction.AddRGBPoint(0.0,0.0,0.0,0.0) colorTransferFunction.AddRGBPoint(64.0,1.0,0.0,0.0) colorTransferFunction.AddRGBPoint(128.0,0.0,0.0,1.0) colorTransferFunction.AddRGBPoint(192.0,0.0,1.0,0.0) colorTransferFunction.AddRGBPoint(255.0,0.0,0.2,0.0) # The property describes how the data will look volumeProperty = vtkVolumeProperty() volumeProperty.SetColor(colorTransferFunction) volumeProperty.SetScalarOpacity(opacityTransferFunction)

演示 # The mapper / ray cast function know how to render the data compositeFunction = vtkVolumeRayCastCompositeFunction() volumeMapper = vtkVolumeRayCastMapper() volumeMapper.SetVolumeRayCastFunction(compositeFunction) volumeMapper.SetInput(reader.GetOutput()) # The volume holds the mapper and the property and # can be used to position/orient the volume volume = vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) ren.AddVolume(volume) renWin.Render() iren.Initialize() iren.Start() 演示

(1) KRIG_3D_VOLUME_RENDER.V (AVapps & Pro) 8.8 EVS 体绘制例子: (1) KRIG_3D_VOLUME_RENDER.V (AVapps & Pro) This network demonstrates volume rendering of chemistry data represented as a uniform field. The plume is shown as a semi_transparent cloud and the measure sample data is posted using the Map_Spheres Module

(2) NET_CDF_VOL_REND_OPENGL.V (PRO application) This application demonstrates volume rendering of chemistry data represented as a uniform field using the OpenGL Back-to-front BTF renderer. The plume is shown as a semi-transparent cloud and the measured sample data is posted using the Map_Spheres Module. The uniform field was created with scat_to_unif and saved as a NetCDF file, and read with Read_NetCDF

下一节课内容: 第九讲 矢量场和张量场可视化 概述 数据空间及转换 基本点图标 矢量场线和面的生成 质点跟踪 矢量场拓扑 二阶张量场中的超流线