【几何处理】基于二次误差度量的网格简化(一)

网格简化是几何处理中比较基础的一部分内容,现在我们介绍其中一种简单的简化方法:基于二次误差测量的网格简化,在介绍该算法之前我们先来简要地介绍一下网格简化的各种技术

目录

采样(Sampling)

自适应细分(Adaptive subdivision)

去除(decimation)

顶点合并(vertex merging)

基于长方体滤波的多面体简化

顶点删除技术

基于相邻面片和边界的局部平坦性原则

采用等距面来限定简化模型顶点的变化范围

渐进的网格简化技术


几乎每一个简化技术都使用下面四种多边形移除技巧的组合或者变形:

采样(Sampling)

采样算法通过选取模型表面的点简单地对模型进行几何取样。这些方法通常是复杂的并且难于编程实现。

这些方法难以精确地获取高频特征,通常在没有尖角的光滑表面上取得最好的结果。

自适应细分(Adaptive subdivision)

自适应细分算法通过寻找一个可以递归细分的基底网格来近似最初的模型。该算法在基底模型易于获取的情况下能取得最好的效果。例如对一个地形模型是一个典型四边形的情形。

自适应细分算法能保持表面拓扑细节,因此有可能降低对于大规模简化的处理能力。

去除(decimation)

去除方法迭代地移除网格上的顶点或面片,并三角化每步移除后留下的孔洞。

这类方法相对简单。易于编程且运行效率高。大部分的应用限制局部变化并且易于保持亏格。这类算法尤其精于处理移除几何冗余,比如共面多变形。

顶点合并(vertex merging)

顶点合并方案通过将三角模型的两个或者更多顶点合并成一个顶点,转而使之可以与其他顶点合并。该算法需要采用多种技术来决定已何种顺序合并顶点。边收缩算法,一种总是将共边的顶点合并的算法,易于保持局部拓扑。

下面先来介绍一些简化算法

基于长方体滤波的多面体简化

由Rossignac和Borrel在93年提出,该算法步骤概述如下:

(1)给定一个多面体M,记K为其拓扑,假设M已三角化。算法首先建立M的长方体包围盒,并将该包围盒所包围的空间均匀剖分成一系列的小长方体子空间,然后采用个长方体子空间对景物顶点进行聚类合并,位于同一长方体空间的顶点被归于同一类(Cluster)

(2)最后,属于同一类的顶点被合并成一个代表点,而这些代表点为原多面体所示景物的重新采样。基于原多面体的拓扑结构和这些采样点可重新产生一多面体。所得到的的多面体即为保持一定层次细节的的模型。原多面体的包围盒剖分生成的子空间越小,所得到的层次模型就越接近原多面体。

方法的主要缺点是顶点的合并导致了一些重要高频细节的丢失。

顶点删除技术

想法:设法减少景物表面的采样点数目。

假设景物表面已离散为一系列三角形,顶点删除算法首先从原始模型的顶点集中删除一些不重要的顶点,同时丛其面片集中删除与这些顶点相连的所有面片。经上述操作后,在原景物表面上留下了一些空洞。算法在对这些空洞进行局部三角剖分。

对于删除哪些不重要的点,主要有一下两种准则。

基于相邻面片和边界的局部平坦性原则

(1)对于网格内部顶点v,记其周围相邻面片集为S,该点的平坦型准则由下述的距离来描述:

d=|N\cdot (v-C)|

其中N为向量\frac{\sum_{f\in S}n(f)A(f)}{\sum_{f\in S}A(f)}的单位向量,C=\frac{\sum_{f\in S}c(f)A(f)}{\sum_{f\in S}A(f)},这里A(f),c(f),n(f)分别为三角面片的面积、中心和法向量。简单来说,N为v所有相邻三角面片的法向量的面积加权获得的向量,C为所有相邻面片的中心点的面积加权所获得的的中心点。d越大,说明v离中心点c越远,即越不平坦。

(2)对于边界顶点v,记与它相邻的两个边界顶点为v1,v2,则其平坦性标准定义为v到v1,v2连线的距离。

采用等距面来限定简化模型顶点的变化范围

主要思想是沿着面片的法线方向增加或减少一点,这样就产生了两张等距面,我们在删除点的时候看删除并剖分空洞后生成的面片是否与两张等距面相交,如果相交,则不符合要求,不进行删除。该算法使得简化算法的精度整体可控。

对于给定的\varepsilon >0,P的三维\varepsilon等距面定义为:

r^{\varepsilon }(u,v)=r(u,v)+\varepsilonn(u,v)

近似的定义原始多边形网格P沿其正、负法向量的\varepsilon等距面P(+\varepsilon)P(-\varepsilon)

\varepsilon等距面P(+\varepsilon)P(-\varepsilon) 上对应顶点v_{i}^{+}v_{i}^{-}及其法向量可分别表示为

v_{i}^{+}=v_{i}+\varepsilon n_{i}   v_{i}^{-}=v_{i}-\varepsilon n_{i}    n_{i}^{+}=n_{i}^{-}=n_{i}

用解析法计算\varepsilon:现考察P上任一三角形\Delta v_{1}v_{2}v_{3}

对P上与每个\Delta v_{1}v_{2}v_{3}不相邻的三角面片\Delta _{j},判断\Delta _{j}是否与\Delta v_{1}v_{2}v_{3}的基本柱体相交。可计算q_{i}\Delta v_{1}v_{2}v_{3}的距离\delta _{j}

Cohen的点删除流程:

(1)采用贪婪搜索策略,将原表面P的所有顶点列入待处理的顶点队列。

(2)对当前处理队列中的一顶点,算法尝试从P上删除该顶点及与该顶点直接相连的三角面片,并试图用如下页所示的三角剖分方法来填补定点删除后在P上形成的空洞。

若空洞位于P的包络内且能成功地被填补,则从当前队列删除该顶点,简化表面P的模型,并重构原来与该顶点相连接的各顶点的拓扑关系。否则,该顶点从当前处理队列中退出,b表面P保持不变。重复,直到待处理顶点队列边空。

渐进的网格简化技术

Hope为了介绍这个算法引入了一系列的概念,这些概念理解起来挺麻烦的,其主要思想就是利用一个显式能量函数度量简化网格和原始网格的逼近度,然后利用该函数选择不同的变换(边收缩,点分裂)使得能量差最小。

渐进网格算法中,任一网格\tilde{M}均可表示为一组网格及n个逐步细化网格M^{i}(i=1,2,...,n)的变换,且有\tilde{M}=M^{n},一张网格M可定义为1个二元组(K,V),其中K是一个单纯复形(simplicial complex),它表示M的顶点、边和面的邻接关系,V=\left \{ v_{i}\in R^{3}|i=1,2,3,...,m} \right \}是M的顶点位置向量集,它定义了网格M在R^{3}中的形状。

单纯复形K由顶点集\left \{i=1,2,3,...,m} \right \}及其称之为单形的非空子集组成,0-单形{i}\in K即为顶点,1-单形\left\{i,j\right\}\in K为一条边,而2-单形\left\{i,j,k\right\}\in K为一个面,值得注意的是,单纯复形K并不包含点集\left \{i=1,2,3,...,m} \right \}的所有子集,它仅包含构造网格M所有面、边、顶点的子集。为在结构上刻画单纯复形,我们引进拓扑实现 |K| 的概念。

若将顶点\left \{ i \right \}\left \{i=1,2,3,...,m} \right \}看成R^{m}中的基向量e_{i}=\left \{ 0,...,0,i,0,...,0 \right \}则定在在R^{m}中的几何|K|为K的拓扑实现|K|=\bigcup _{s\in K}|s|其中s为K的一个单形,|s|为s在R^{m}空间中的顶点的凸包。

为此我们记\phi_{v}=\phi_{|K|},称为\Delta v_{1}v_{2}v_{3}R^{3}中的几何实现,若\phi_{|K|}不自交,则\phi_{v}为1-1映射,此时\phi_{v}为一嵌入映射,即对

\forall p \in \phi(|K|),存在唯一m维向量b\in|K|,我们将b称为p关于单纯复形的重心坐标向量。事实上,b可表示为:

b=\sum _{i=1}^{m}b_{i}e_{i}容易知道,当M为一三角片网格时,\phi(|K|)上任一点的重心坐标向量b中至多只有三个分量非零。

有了上述定义,Hope采用显示能量函数E(M)来度量简化网格与原始网格的逼近度

E(M)=E_{dist}(M)+E_{spring}(M)+E_{scalar}(M)+E_{disc}(M)

其中E_{dist}(M)为M的距离能量,定义为点集X=\left \{ x_{1},...,x_{n} \right \}到网格M的距离平方:E_{dist}(M)=\sum _{i=1}^{n}d^{2}(x_{i},\phi_{V}(|K|))

E_{spring}(M)为M的弹性能量,这相当于在M的每条边上均放置一条弹性系数为K的弹簧,即E_{spring}(M)=\sum_{(i,j)\in K}k||v_{i}-v_{j}||^{2},E_{scalar}(M)度量M的标量属性的精度,而E_{disc}(M)则度量了M上视觉不连续的特征线(如边界线、侧影轮廓线等)的几何精度。

Hope利用边收缩变换逐步迭代上述能量的优化过程。初始网格\tilde{M}=M^{n}可经过n组边收缩变形后简化为M^{0},利用该函数选择不同的变换(边收缩,点分裂)使得能量差最小。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值