科学计算可视化 授课教师: 单位:
主要内容 概述 面绘制算法 直接体绘制方法 实用可视化系统VTK简介及实例程序
主要内容 概述 面绘制算法 直接体绘制方法 实用可视化系统VTK简介及实例程序
概述 科学计算可视化(Scientific Visualization):利用图形的方式将科学数据中所蕴含的现象、规律表现出来,从而促进人们对数据的洞察和理解 http://medgadget.com/archives/2007/09/nsf_scientific_visualization_awards_announced.html
概述 应用领域 工程 医学 地理信息 气象 石油/天然气勘探 生物信息学 …
概述 可视化的流程
概述 可视化的流程
概述 三维数据场分类 标量(scalar)场 S 单值 矢量(vector)场 张量(tensor)场 (u,v,w) 大小与三维方向 3×3矩阵
概述 三维数据场 各采样点分布及空间邻接关系可用网格描述 依各网格结点之间的连接关系划分 结构化网格(structured mesh) 非结构化网格(unstructured mesh) 存贮在每一网格点的数据用于描述该采样点(或该网格单元)处三维数据场的属性
概述 结构化网格与非结构化网格示例
概述 可视化的流程
概述 变换是指对数据进行预处理,以便利后续处理 对庞大的数据场只提取与可视目标相关的信息以减少数据量 通过几何变换对点的坐标进行缩放 通过拓扑变换调整网格点的连接关系 将数据转换成更为通用的标准格式 …
概述 可视化的流程
概述 映射是整个可视化流程的核心 设计合理的可视化方案和算法 将经过变换处理的数据映射为可供绘制、显示的形状或属性
概述 可视化的流程
概述 绘制和显示:将上述可供绘制的元素转换成图像,绘制在屏幕或其他介质上 可视化流程的最后一个步骤 可直接借鉴计算机图形学的现有方法
概述 可视化算法分类 标量场算法 矢量场算法 张量场算法
概述 标量场算法 颜色映射 轮廓抽取 体绘制
概述 矢量场算法 从几何形状、颜色或纹理等着手,试图将三维矢量信息分别映射为这三类可绘制的元素或这些元素的组合
概述 张量场算法 点图标方法 超流线方法
主要内容 概述 面绘制算法 直接体绘制方法 实用可视化系统VTK简介及实例程序
面绘制算法 将三维数据场中具有某种共同属性的采样点按其空间位置连接起来,构成一张连续表面,然后对抽取出的表面进行绘制 等值面算法 等值面:在一给定三维数据场中,采样值均为某一给定值的所有空间点的集合 三维标量场可视化中最常用 Marching Cubes方法
Marching Cubes算法 数据集 适用于三维规则标量场 每一立方体单元称为一个体素(voxel),数据场的数据值分布在体素的8个顶点上 典型代表:CT数据、MRI数据
Marching Cubes算法 思想:基于“分治(divide-and-conquer)”思想将整个数据场的等值面抽取分解到每一个体素中去完成
Marching Cubes算法 算法概述 读入三维规则标量场 对于每一体素 当处理完所有体素后,即完成了整个数据场的等值面抽取与绘制 依据所需抽取的等值面的属性值,确定其8个顶点的状态 对于体素的每一条边,依据顶点状态,判别它是否与等值面有交点。若交点存在,则求出交点 在求出了当前体素的所有边与等值面的交点后,依据一定的准则将这些交点连接成三角形,作为等值面位于该体素内部分的近似表示,并进行真实感绘制 当处理完所有体素后,即完成了整个数据场的等值面抽取与绘制
Marching Cubes算法 确定体素顶点状态 设所需抽取的等值面的属性值为C0 若某顶点V所存贮的数据值大于(或等于)C0,则认为V在等值面外侧(或位于其上),并记其状态值为1 反之,若V所存贮的数据值小于C0,则认为V在等值面内侧,并记其状态值为0
Marching Cubes算法 确定体素顶点状态 Example:5个顶点均位于外侧,记为10111100 v8 v7 v4 v3 Case = v8|v7|v6|v5|v4|v3|v2|v1
Marching Cubes算法 判别体素的边与等值面是否有交 对于某一条边E(其顶点为V1和V2),若V1和V2的状态值相同,则边E位于等值面的外侧(或内侧) ,边E不与等值面相交 ;反之,若V1和V2的状态值不同,边E必定与等值面相交 若边E与等值面有交点,可通过线性插值计算出交点
Marching Cubes算法 将体素各边与等值面的交点连接成三角形 取决于体素每一顶点的状态值分布情况 存在着28种不同情况 每一体素有8个顶点 每一顶点有两种状态值 基于体素顶点状态翻转对称性和旋转对称性,将上述256种组合情形减少到15种 翻转对称性:如果体素各顶点的状态值0和1互换,所含等值面的拓扑结构(即交点连接关系)不变 旋转对称性:体素旋转后,所含等值面的拓扑结构不变
Marching Cubes算法 15种等值面连接模式 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Marching Cubes算法 15种等值面连接模式:示例 2 9
Marching Cubes算法 法向计算 用等值面上某点的梯度方向代表该点法向 用中心差分和线性插值相结合计算等值面上点的法向
Marching Cubes算法 存在问题及改进 (1) 15种连接情形中,有些存在二义性,可能导致所生成的相邻体素的等值面之间不连续,从而使最终生成的等值面存在“空洞”
Marching Cubes算法 存在问题及改进 (1) 改进方法之一:增加连接模式,使其能与相邻体素的状态相匹配以消除“空洞”
Marching Cubes算法 存在问题及改进 (1) 改进方法之二:将六面体体素分解为四面体单元,并将等值面抽取限制在四面体单元中进行 改进方法之三:采用双曲线渐近线交点来决定具有二义性的面上的交点的连接方式
Marching Cubes算法 存在问题及改进 (2) 所生成的等值面中往往包含大量的三角面片,影响存储与绘制的效率 改进方法之一:对所生成的等值面三角形网格进行简化 改进方法之二:采用适用于密集数据场等值面生成的Dividing Cubes算法
主要内容 概述 面绘制算法 直接体绘制方法 实用可视化系统VTK简介及实例程序
直接体绘制算法 Why? 面绘制算法的两个假设 上述两个假设都有可能不成立 对于某一个给定的等值面的值C0,可以从数据场中抽取出一系列多边形来逼近该等值面 所抽取出来的多边形网格表面能反映物体的结构 上述两个假设都有可能不成立
直接体绘制算法 Why? 面绘制算法无法显示出整个三维数据场的全貌 对于规模较大的三维数据场,采用面绘制方法所生成的等值面网格往往过于复杂 会导致三维数据场中大量的信息丢失 对于规模较大的三维数据场,采用面绘制方法所生成的等值面网格往往过于复杂 甚至会超出现有图形硬件的处理能力
直接体绘制算法 直接体绘制:指不经过体数据到多边形的转换,而直接对三维体数据进行处理生成可视图像的方法 通常简称为体绘制 光线投射体绘制算法
光线投射体绘制算法 图像空间算法 步骤 设计传输函数(transfer function),该函数将空间任一点的标量值映射为点的光照属性值 朝画面每一像素投射光线,沿该光线方向对标量场进行重采样,选取适当光照模型计算各采样点处的光亮度值 沿投射光线方向对各采样点的光亮度值合成,生成像素的显示光亮度
光线投射体绘制算法 设计传输函数 对三维数据场各采样点上存贮的数据值进行分类,依据一定的准则为数据场每一采样点赋一颜色值(R,G,B)和不透明度值(opacity,用α表示)
光线投射体绘制算法 沿投射光线方向重采样计算光亮度值 从当前视点位置出发,向屏幕上的每一像素点发出一条光线,穿过数据场,同时沿着光线进行均匀点采样,得到一系列重采样点
光线投射体绘制算法 沿投射光线方向重采样计算光亮度值(cont.) 对于每一数据场内的重采样点PR,找出它所在的体素,对该体素的8个顶点的不透明度和颜色作三线性插值得到PR处的不透明度和颜色 类似地,通过三线性插值计算得到PR处的梯度(即法线方向) 根据体光照明模型计算PR处光亮度值
光线投射体绘制算法 光亮度值合成 将分布在同一光线上的所有重采样点的光照强度按照一定的次序进行累计得到相应屏幕像素最终显示的颜色 两种合成方法 从后向前 从前向后
光线投射体绘制算法 光亮度值合成 从后向前合成
光线投射体绘制算法 光亮度值合成 从前向后合成 在从前向后的累加过程中,不透明度α将不断增加,逐渐向1逼近。当α接近于1时,可终止当前光线的跟踪过程
其他体绘制算法 景物空间的直接体绘制方法 从三维数据场的每一体素出发,根据视点位置和方向将其投影到屏幕上 根据该体素各顶点的存贮的数据场值计算其不透明度和颜色,由体光照明模型计算出各点处的光亮度值 根据所采用的重构核函数计算出该数据点所影响的屏幕像素的范围及对所覆盖区域内各像素的光亮度的贡献 每个像素点的光亮度由多个数据点的贡献累加得到
主要内容 概述 面绘制算法 直接体绘制方法 实用可视化系统VTK简介及实例程序
VTK简介 全称:Visualization Toolkit 源码开放的免费可视化软件系统 采用面向对象的方法设计开发,以C++语言编写 包含由700多个类组成的内容极为丰富的类库 支持几何造型及可视化中复杂数据的表达、对标量场、矢量场、张量场的可视化以及隐函数造型、多边形网格简化、Delaunay三角分割等高级造型技术 除C++语言外,还允许用户通过Tcl/Tk,Java和Python等解释性语言编写应用程序以快速完成可视化应用实例的开发
VTK简介 采用一个数据流模型以实现数据信息向图形信息的转换 在这个模型中,相关模块连接成网络 数据在网络中流动,同时模块将算法应用于数据上 可视化网络的运作有两种控制方式:需求驱动方式和事件驱动方式 包含了两类基本对象:过程对象和数据对象 过程对象是可视化网络中的模块(算法部分),可进一步分为三类:源、过滤器和映射器,分别执行可视化数据的输入、变换、预处理及映射功能 数据对象又称数据集,包含了结构和属性数据
VTK实例程序 运行、讲解光盘中的实例程序