三维网格分割的经典方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三维网格分割的经典方法

摘要:本文针对三维网格分割问题,提出一个经典的方法。该方法基于微分几何和测地距离。在算法中,将面片类型相同的顶点分割在一起。测地距离利用顶点之间的最短路径表示,这里可以利用一些经典的算法求最短路径,如Dijkstra 算法。但是当网格的数量很多时,Dijkstra 算法的效率很低。因此,此算法避免了在整个网格上应用最短路径算法,在局部网格中求最短路径,从而减少了计算量。 本文在人造物体的三维网格模型以及分子结构中验证了该方法的有效性。 关键字:几何算法 面片分割 测地距离

简介

3D 物体的三维网格表示法具有很多的应用。例如,在图像分析中,表示利用深度图像重建的物体表面。此外,在复杂物体和场景的建模和可视化中也有广泛的应用。在网格面片的分析中,网格分割已经成为一个关注的问题。网格分割也就是将网格上相互接近并且具有相似曲率的顶点分成一组。网格分割在很多方面具有重要的应用。特征提取,模型匹配等。

Mangan 和Whitaker 提出三维网格分割的分水岭算法。Razdan 和Bae 扩展了此算法,将基于点元(voxel-based )和分水岭算法相结合,来分割三角网格。这两种方法在分割中都需要计算整个曲率,然后在局部曲率最小处建立初始分割。然而,在某些物体中,局部曲率的最小值是很难确定的。因此,在这里提出一个初始分割的新方法。

在该算法中,应用基于面片的类型信息的网格区域增长方法,对顶点进行初始分割。利用高斯曲率和平均曲率对顶点所在的面片进行分类。这里利用离散微分几何计算高斯曲率和平均曲率。通过本文提出的新方法来求得测地距离。

文章结构:第二部分,介绍网格面片的曲率分析和面片分类。第三部分,详述本文的分割算法。第四部分,实验以及其分割结果。第五部分,结论。 2 面片分析

在面片分析中,首先计算高斯曲率和平均曲率,然后利用它们进行面片分类。顶点P 0的高斯曲率K 的计算公式如下:

A K θ

ρ∆= ,∑-=∆i i 2θπθ ∑=i

i A A , A 为相邻三角形T i ( i =1,2,3,…)的面积总和。ρ为常量3。如图1所示。

平均曲率定义为沿面法向方向的散度(divergence ),n H ∇=。面片的平均

曲率的法向量的计算公式如下[5、6、7]:

∑∈-+=-)())(cot (cot 41i N j i j j j P P A n H βα

其中,N(i)为顶点Pi 的邻接多边形的集合。( P j -P i )为边ij e ,j βα和j 分别为在N(i)中,边ij e 所对的两个角。A 为N(i)中所有三角型的面积总和。如图2所示,顶点P i 的平均曲率的近似表示。

利用高斯曲率和平均曲率对一个顶点所在的面片进行分类。面片的类型T

的定义如下,

)),sgn(1()),sgn(1(31εεk H T -+++=

其中sgn 为分段函数(符号函数)(a tolerance signum function),

⎪⎩

⎪⎨⎧<-≤>+=εεεεx x x x :1:0:1),sgn(

3 网格分割算法

设物体O 的网格结构为M ,M 由两部分组成,V 和E 。

},,{},,1|{},

,,1|{q p i e i v i v v e N i e E N i v V =====

其中,i v 为顶点,v N ,1≤≤q p 且q p ≠,V 是顶点集,E 为连接顶点的边的集合。e v N N ,分别为M 中顶点和边的总数。

在该方法中,定义了四种分割类型:

1. 峰值类型(peak-type ),

2. 凹值类型(pit-type ),

3. 最小面片类型(minimal surface-type ),

4. 平面类型(flat-type )。

对峰面、脊面(ridge)、马鞍面峰值(saddle ridge)的相应顶点进行峰值类型的分割,对凹面、谷面(valley)、马鞍凹面(saddle valley)的相应顶点作凹值类型的分割,对最小面片的相应顶点作最小面片类型的分割,平面类型的分割及对平面片的相应顶点进行操作。该方法分为三个阶段:

a) 分割初始化,

b) 计算分割中心,

c) 顶点分割和分割合并。

3.1 分割初始化

这一步,初步形成上述四种类型的分割。对于模型中其他类型的相应顶点并不考虑。本文应用区域增长法来完成分割初始化。图3为分割初始化算法。算法中涉及了两个函数,Segment_Initializing 和Mesh_Growing 。Segment_Initializing 用来建立顶点分割集队列元素(无ID 号),然后迭代的调用Mesh_Growing 函数对没有分割的顶点进行分割。Mesh_Growing 函数自动的寻找具有相同面片类型的连通顶点。最后初始分割集的生成。每一个初始分割都包含具有任意一种面片的类型的连通顶点。

3.2 分割中心的计算

设k S 为包括vk N 个顶点的集合(k V )的初始分割。令k ck V v ∈为k S 的中心顶点。中心顶点设为:在集合k V 中,到所有顶点的平均测地距离最短。由于平均距离和距离总和是可以等价的,中心点又可表示为,}min{∑i ik ck v v ,k ik V v ∈,⋅表示测地距离。测地距离可以利用顶点的最短路径来近似的表示。为了解决这个问题,首先建立一个带权矩阵,该矩阵既可以表示k V 中网格之间的联系,也可以表示相邻顶点间的欧几里得距离(即两点间距离公式求得)。

令k A 为k V 的vk vk N N ⨯的带权方阵,[]jk ik k v v A ,为方阵k A 的元素,其中k jk ik V v v ∈,。k A 的定义如下,

[]⎪⎩

⎪⎨⎧∞∈∈=otherwise E v v if E v v if v v v v A jk ik jk ik jk ik jk ik k ,},{,0},{,,

其中,||为欧几里得距离,E 为边的集合。

对k A 利用Dijkstra 算法求所有点对的最短路径(测地距离)。此时所得到的方针k A 中元素均为最小值。中心顶点ck v 满足在矩阵k A 中纵行距离和以及横行距离和均最小。

ck v ]},[min |{jk ik k ck v v A v ∑=

图4为求图的中心顶点的例子。

相关文档
最新文档