560 likes | 955 Views
上一节课内容回顾. 5.1 网格序列法 5.2 网格无关法 5.3 区域填充法 5.4 曲面标量场可视化. 二维标量场的数据表示: ( 1 ) 结构点法 ( 2 ) 多边形法 二维标量场的可视化方法: ( 1 )等值线法 ( 2 )分层设色法. +. -. +. +. -. -. -. +. -. -. +. +. +. +. -. -. 5.1 网格序列法 正规化网格等值线生成 单元剖分法 连续光滑等值线生成. +. -. -. +. +. -. +. P 0. P 0. P 1.
E N D
上一节课内容回顾 5.1 网格序列法 5.2 网格无关法 5.3 区域填充法 5.4 曲面标量场可视化
二维标量场的数据表示: (1) 结构点法 (2) 多边形法 二维标量场的可视化方法: (1)等值线法 (2)分层设色法
+ - + + - - - + - - + + + + - - • 5.1 网格序列法 • 正规化网格等值线生成 • 单元剖分法 • 连续光滑等值线生成 + - - + + - +
P0 P0 P1 P1 S E • 5.2 网格无关法 • 通过给定等值线的起始点(或求出),利用该点附近的 • 局部几何性质,计算该等值线的下一点,然后利用新点, • 重复计算下一点直至到达区域边界,或回到始点。 • 分成2类: • 步进法--跟踪法 • 适应法--逐步精化方法
5.3 区域填充法 • 线性插值下的分层设色法 • 非线性插值下的分层设色法
5.4 曲面标量场可视化 • 曲面分布数据的插值方法 • 球面上的等值线
5.5 VTK中的二维标量场可视化 • ×vtkContourValues • 管理、设置等值线的值 • ×vtkLookupTable • 在标量值和颜色之间进行匹配 • ×vtkContourFilter • 从标量数据中生成等值线 • ×vtkElevationFilter • 对标量数据分层设色 SetLowPoint( 0, 0, lo) 设置始点 SetHighPoint( 0, 0, hi) 设置终点 SetScalarRange( lo, hi) 设置标量范围
vtkContourFilter设置每条 等值线的方法是: SetValue(i,Value) i是从零开始的索引号, Value是等值值。 vtkLookupTable的用法: 1 设置标量的范围,vmin,vmax 2 设置查找表项的数目,n 3 设置每一项的颜色。 绘制时,任一标量值v,按如 下方式从查找表中取得颜色: 1 计算等值线的间距 vd=(vmax-vmin)/(n-1) 2 计算标量值v对应的颜色在 查找表中的索引值 i=(v-vmin)/vd 如果i<0, i=0 如果i>vmax, i=n-1 3 根据索引值从查找表中获得 颜色值 例如:标量值范围是100~500, 显示100,300,400,500 共4种等值线,显然把等值线的 间距设置为100是合理的, 故查找表项的数目应为5, 100,300,400,500对应的 索引号为0,2,3,4
contours=vtkContourFilter() contours.SetInput(demModel.GetOutput()) contours.SetValue(0,100.0) 设置某项的等值值 contours.SetValue(1,300.0) contours.SetValue(2,400.0) contours.SetValue(3,500.0) Iut1=vtkLookupTable() 构造查找表 Iut1.SetTableRange(100,500) 设置标量范围 Iut1.SetNumberOfTableValues(5) 设置查找表项数 Iut1.SetTableValue(0,0.0,0.0,1.0,1.0) 设置某项的颜色 Iut1.SetTableValue(2,1.0,1.0,0.0,1.0) Iut1.SetTableValue(3,0.0,1.0,0.0,1.0) Iut1.SetTableValue(4,1.0,0.0,0.0,1.0)
本节课内容 6.1 拓扑重构 6.2 三角片表面几何重构 6.3 连续表面重构 6.4 体的重构
在环境科学与工程领域应用 三维标量数据重建三维实体 • 1 意义:通过测量获得的标量数据生成三维实体,能够更好地反映所研究对象的空间分布特性。 • 2 实现方法: • 如果数据是不同层的轮廓线数据,主要基于轮廓线断层数据重构算法直接进行重构; • 如果数据是多层的切片图像数据,则可按一定规则从各层抽取轮廓线,然后重构。 • 如果数据直接就是三维的标量场数据,可以使用下一节课介绍的等值面抽取技术。 • 如果数据是位于实体表面的离散采样点,则可使用三维三角网生成技术。
断层扫描数据广泛地存在于医学、生物、地学、环境等应用领域,是一种最简单的三维标量场。如果各断层问是相互平行的,每一断层与实体的交线就是实体在该断层上的轮廓线,也就是二维平面上一条封闭的无自交的等值线,如图6.1所示.如原始数据是光栅图像形式,在每一断层上轮廓线表现为由连续的两相临点间线段组成的一组简单封闭的直线线段,也就是一个封闭多边形链。断层扫描数据广泛地存在于医学、生物、地学、环境等应用领域,是一种最简单的三维标量场。如果各断层问是相互平行的,每一断层与实体的交线就是实体在该断层上的轮廓线,也就是二维平面上一条封闭的无自交的等值线,如图6.1所示.如原始数据是光栅图像形式,在每一断层上轮廓线表现为由连续的两相临点间线段组成的一组简单封闭的直线线段,也就是一个封闭多边形链。 图6.1 实体与断层
在地形数据可视化中,输入的数据往往是一系列的二维等高线,由二维等高线重构出具有光照效果的三维地形图像是十分常见的应用。在地形数据可视化中,输入的数据往往是一系列的二维等高线,由二维等高线重构出具有光照效果的三维地形图像是十分常见的应用。 如果在相邻两层的平面上。各自只有一条轮廓线,那么其三维重构问题相对简单,称之为单轮廓线的重构问题(如图6.2所示)。如果在相邻两层的平面上(或其中之—)有多条轮廓线,则为多轮廓线的重构问题。 图6.2单轮廓线重构
断层数据的表面重构是从一系列断面上的轮廓线中推导出相应实体的空间几何结构.断层数据的表面重构是从一系列断面上的轮廓线中推导出相应实体的空间几何结构. • 为了保证推导的正确性和唯一性,要求: • 实体的边界是由二维点组成; • 要求实体与平面的交是二维的。 • 图6.4(a)中的点P不是二维点,图6.4(b)中实体a和c不符合与平面的交是二维的条件,只有图6.4(b)中实体b是可接受的。 图6.4不正确的重构
表面重构过程分成两步: • 拓扑重构推导实体的拓扑表示 • 几何重构建立实体的几何表示
6.1拓扑重构 拓扑重构的目的是对三维断层数据集中的每一断层上的轮廓线进行分类,确定各轮廓线所属的实体,保证几何重构的正确性,因而拓扑重构是断层数据重构的基础,当断层上有多个轮廓线时,意味着会出现实体交叉,问题就更复杂了,更有必要首先进行拓扑重构。 6.1.1 分类图嵌套树 轮廓线的分类由分类图描述。分类图的每一顶点对应于一条轮廓线,其边连接的是属于相邻层的两条轮廓线.如果存在一个由该分类图描述的实体,则 认为该分类图是有效的。 也就是讲,一有效的分类图对应于一满足条件的实体。 对于若干层上的一组轮廓线,通常存在多个分类图,图6.5表示了一组轮廓线和不同的分类图,当然并不是所有分类图都是有效的,在图6.5中(b)是无效的,因为在层之间其对象的边界发生相交,这意味着在对象边界点上存在非二维点.
图6.6显示了一个一般的断面层,由若干嵌套的轮廓线组成,表明其对象上存在洞.有效的分类方法应能保留这类嵌套,具有保留这类嵌套性质的图称之为拓扑有效的图.换句话说,一分类图是拓扑有效的,是指该分类图所表示的对象实体与各断层的交所形成的嵌套的轮廓线与给定各断层上的嵌套的轮廓线是一致的。图6.6显示了一个一般的断面层,由若干嵌套的轮廓线组成,表明其对象上存在洞.有效的分类方法应能保留这类嵌套,具有保留这类嵌套性质的图称之为拓扑有效的图.换句话说,一分类图是拓扑有效的,是指该分类图所表示的对象实体与各断层的交所形成的嵌套的轮廓线与给定各断层上的嵌套的轮廓线是一致的。 每一断层上嵌套的轮廓线由一相应嵌套树描述,树中每一结点对应于一条轮廓线,其根结点对应于一虚拟的包围所有轮廓线的外轮廓线,树中每一结点的后续结点对应于被该结点的轮廓线所直接包围的所有轮廓线. 图6.6显示了该断层的嵌套轮廓线所对应的嵌套树。 图6.6断层上嵌套的轮廓线和对应的嵌套树
6.1.2 分类图的枚举 如前所述,对于不同层上的一组轮廓线,存在多个分类图,因此拓扑重构问题的解并非唯一,每一有效的分类图都是一个解,都对应于一个实体.本节介绍一个有效拓扑分类图的枚举算法,该算法基于相邻断层嵌套树的比较结果,分析一连续扫描实体各断层上轮廓线数目的变化情况,根据断层实体的基本分叉,枚举出所有可能的有效分类图.根据约束性,从中选择出正确的分类图. 枚举算法仅考虑具有基本连接的分类图.在分类图中,所谓连接是指两相邻断层间分类图中的一个子图的连通成分,如果该连通成分是单点、单边或度数为2的连接,就被称为基本连接.度数为2是指一个结点以两条边与相邻断层上两个结点相连.引入基本连接是为了简化讨论,对应四种基本连接,有四类基本的对象实体:极值点、圆柱、独立分叉、连通分叉,如图6.5所示.这种分类方法被广泛地使用在表面重建中.
图6.7 四种基本分叉情况 a)极值点;(b)圆柱;(c)独立分叉;(d)连通分叉
图6.8 枚举算法中四种递归情况 *表示轮廓线集合; 无*是指单独的轮廓线
图6.9 连通分叉处马鞍点成分中的轮廓线释放情况
6.1.3 轮廓线的相似性 图6.11 表示的逼近情况 分别为1,2,3,5,10和20项之和
6.2 三角片表面几何重构 几何重构的任务是在拓扑重构分类图的基础上建立对象的几何表面,要求该对象与给定的分类图对应,其断层与各给定断层轮廓线一致.对象的实体表面可以看成是由相邻断层间插值表面段组合而成,根据前节推导的基本连接分类图,相应地有四种基本连接的表面插值方式,见图6.12。具体表面段还要满足一些其它的边界条件·,如不自交,各断面间不相交等等。 图6.12四种基本连接表面插值方式
1)圆柱体插值表面段:在两个平行断层上是简单的封闭曲线(见图6.12(a)). 2)独立分叉的插值表面段:在一断层上是两独立不嵌套的轮廓线,在另一断层上是条轮廓线,两条轮廓线被归类到单条轮廓线(见图6.12(b)). 3)连通分叉的插值表面段:在一断层上是两分离的嵌套的轮廓线,另一断层上是条轮廓线,两条轮廓线被归类到单条轮廓线(见图6.12(c)). 4)极值点插值表面段:在一断层上有一条轮廓线,而另一断层上没有归类的轮廓线(见图6.12(d))。 三角片表面重构是面向曲面的表面插值中使用最广泛的一种方法,要求每一轮廓线是一封闭的多边形链,以一定的方式用直线段连接多边形链上的顶点构造三角片,但有时需引入附加点来构造,如在独立分叉插值中需引入中间马鞍点. 在进行三角片构造前,需要进行点约化.其目的是为了减少三角片的数目,因为多边形链上的点直接影响到三角片构造的数目.因此,在实际应用中,三角片构造前首先进行点约化. 点约化的目的是在允许的误差范围内,尽量减少多边形链的顶点数。基于多边形链尺曲率的约化为法:新的链从给定链的第一个顶点开始,然后沿着链累加K曲率直到超过给定的阀值(最大曲率)。将超过最大曲率的点放入新的链中,累加和置为零,该过程再同样继续,直至回到原给定链的起始顶点为止. 点约化可能会导致自交的新曲线(见图6.13)
6.2.1 圆柱体三角片表面 图6.14 基本三角片构造对象表面 图6.15 有向图G
6.3 连续表面重构 图6.25 轮廓面表示
6.4 面向体的重构 图6.27 多边形链的内部和外部
小结 三维断层扫描数据场是最简单的三维标量场,等高线等可看成三维断层数据进行处理。三维断层重构过程分为拓扑重构和几何重构两部分。 拓扑重构采用嵌套树表示断层上轮廓线的相对位置,用分类图表示层间轮廓线的拓扑关系.枚举算法列出了所有有效的分类图,采用轮廓线的相似性和相对位置等约束来排除大量无意义的分类图,以推导出正确的分类图。 几何重构有面向曲面的重构和面向体的重构。 面向曲面的重构中最常用的是三角片表面重构,对应拓扑重构的四种基本分叉,有四种基本表面段的表面重构:极值点、圆柱、独立分叉和连通分叉。由于两相邻断层轮廓线间的表面重构等同于有向图G中寻找一条从(0,0)到(m-1,n-1)的路经。 利用放样技术生成具有C2连续的表面重构算法。 面向体的重构有Delaunay四面体重构和正六面体空间。
vtkVoxelContoursToSurfaceFilter • vtkSliceCubes • vtkSurfaceReconstructionFilter • vtkPowerCrustSurfaceReconstruction • vtkDelaunay3D VTK中的三维标量数据重构三维实体类: 例子
vtkDelaunay3D 输入离散点集(位于实体表面),输出实体的多边形表示 sphere = vtk.vtkPointSource() sphere.SetNumberOfPoints(40) delny = vtk.vtkDelaunay3D() delny.SetInput(sphere.GetOutput()) delny.SetTolerance(0.01) mapper = vtk.vtkDataSetMapper() mapper.SetInput(delny.GetOutput()) triangulation = vtk.vtkActor() triangulation.SetMapper(mapper) 例子