基于旋转不变量的网格变形

来源:互联网 发布:ubuntu服务器版下载 编辑:程序博客网 时间:2024/06/05 06:12
基于旋转不变量的网格变形-Siggraph 2007

基于旋转不变量的网格变形

原文地址:http://blog.csdn.net/hjimce/article/details/46415435

作者:hjimce

一、相关理论

本篇博文主要讲解2007年Siggraph上的一篇经典paper:《Linear Rotation-invariant Coordinates for Meshes》,这篇paper如果不考虑计算速度问题,可以说是目前我感觉微分域的保特征网格变形效果最perfect的一个算法了。在我的另外一篇博文《简单拉普拉斯变形》中讲到,如果直接使用拉普拉斯变形算法,那么在大尺度变形的情况下,会出现如下的结果:


可以看到,本来章鱼模型上的圆形特征,经过变形后,变为了椭圆形了,这种现象,我们又称之为不保特征变形,很显然,这种不符合我们变形的要求,我们的希望是使得变形后,章鱼爪子上的圆形特征还是圆形的,这种又称之为保特征网格变形,因此仅仅使用简单的拉普拉斯变形是不够的,我们还需要对这个算法,做个修正,使得变形后的三维模型,更加的自然。

    这个算法给我的印象非常深刻,当年刚上研究生,懵懵懂懂,啥也不懂,导师发了一篇拉普拉斯网格变形的相关paper(跟我的研究生课题息息相关),里面涉及到旋转不变量算法,我看了几天以后,感觉看懂的样子,很开心,自以为天下无敌了,于是非常兴奋的发了条qq消息告诉导师:老师,文献的算法我看懂了,我可以开始写课题的代码了。自以为自己有毕业的希望了,于是就开始了我的毕业课题编程之旅-《三角网格曲面上的特征克隆》,花了3周的时间,把整个过程的代码,基本完成了,感觉离毕业不远了,可是最后一步涉及到《Linear Rotation-invariant Coordinates for Meshes》这篇paper的算法,死活调试,我调试了整整一个月,都没能把这篇paper的结果实现出来,彻底失去了信心,感觉要毕不了业的节奏。还好最后导师安慰我,让我休息一段时间,好好看看文献,不要着急………过后我才冷静下来,慢慢的思考自己实现的算法到底错在哪了,最后终于……

开始算法讲解前,我们先回顾一下微分域变形的相关研究:由于拉普拉斯坐标对方向敏感,因此会出现上面所看到的圆形特征变成了椭圆形特征,因此需要提前估算变形后各顶点拉普拉斯坐标的方向,本节将介绍如何估算变形后的拉普拉斯坐标。如果已知网格模型的变形结果,求取变形后的拉普拉斯坐标,是一件非常简单的事;然而我们的目标是通过未知方向的拉普拉斯坐标去求取变形后的网格模型,这就相当于一个“鸡与鸡蛋的先后诞生”的问题。因此基于微分域的保特征网格变形的难点在于如何更好的逼近未知的拉普拉斯坐标,许多研究工作集中于如何更好地逼近未知的微分坐标,特别是处理微分坐标的旋转问题。

    本文将讲解LIPMAN等提出的旋转不变量方法:《Linear Rotation-invariant Coordinates for Meshes》,该方法能够较精确求解旋转后的拉普拉斯坐标,主要是通过求解一个稀疏线性系统来确定变形后的拉票拉斯坐标Δ’。其思想与拉普拉斯网格重构类似,首先在网格的每个顶点处建立一个局部坐标系F;其次把每个顶点的拉普拉斯坐标δ表示成局部坐标系F下的相对拉普拉斯坐标δI;然后求解变换后的局部坐标系F’,最后通过δI、F’求取δ’。

二、算法流程

1 、局部标架定义及其性质

(1)局部标架定义

对于给定的三角网格模型M,定义顶点vi处的局部标架Fi=(ei1,ei2,ni)T,ei1、ei2、ni为满足右手法则的一组归一化正交基,如图。


(2)局部标架性质

由局部标架的定义可知,对于任意一个局部标架,其相当于三维线性空间的一组归一化正交基,因此其具有以下性质:

①对于3维线性空间中的任意一个向量α,可由局部标架线性表示为:


②对于3维线性空间中的两组局部标架Fi、Fj,必存在一个过渡矩阵Tij,满足


式中,T为3×3的矩阵。上式相当于三维线性空间中,两组基的相互转化公式。

旋转不变量定义

由定义可知每个顶点的局部标架可用一个3×3的矩阵F表示。设Fi=(ei1,ei2,ni),Fj=(ei1,ei2,ni),且vj为顶点vi的邻接顶点,如图所示。


由局部标架性质可知,对于三维空间中的两个邻接顶点的局部标架Fi、Fj必存在相对变换Tij,使其满足:


其中,Tij为3×3的系数矩阵。由公式1可求得相对变换矩阵


当世界坐标系发生旋转变换时,Fi、Fj也发生相同的旋转变换,然而其相对标架Tij不会发生变化,故称Tij为Fi和Fj间的旋转不变量,Tij是两个局部标架间的内在属性。基于旋转不变量的拉普拉斯网格变形其实质就是保证网格变形前后,两相邻顶点之间的局部标架变换矩阵T不变。

变形后局部标架求取

对于给定的原网格模型,根据定义可以为每个网格定点建立局部标架F,然后求得每一条边之间的旋转不变量T,也就是说T是已知量。我们的目标是求取变形后每个顶点的局部标架F’,用旋转不变量方法求解F’与拉普拉斯变形方法求解变形后的顶点V’类似,其归结为求解如下的最小优化问题:


式中  m ——方向约束顶点的个数

      ak ——权值系数

      Rk ——3×3方向约束矩阵

解(3)中的最小值问题,就相当于求解下面的超静定线性系统:


方程组分为旋转不变量方程组、约束方程组:


由于未知变量F’是3×3的矩阵,每个含有9个未知元素,在求解方程组过程中应采用矩阵分块的思想,每个块包含一个3×3的子矩阵,求取方程组的系数矩阵。因此公式中,H是一个包含3m×3n阶矩阵,H的每一行只有一个非零元素,其值为对应顶点的约束权值。R为3m×3阶矩阵,每个3×3的块矩阵代表每一个约束顶点的方向约束。未知数是的矩阵,其第3i至第3i+2行组成的3×3的矩阵即为网格顶点的局部标架F’i,这样求解该线性系统,可获得F’。

公式1方程具体可写为:


其中E为网格模型的边的集合,对于网格模型的每一条边,可以列出公式1,若网格模型有n条边,则可以获得n个旋转不变方程组成的方程组。然而该方程组系数矩阵的秩小于未知元素的个数,故需要约束方程(2)方程组才有唯一的解。

4、 基于旋转不变量的拉普拉斯网格变形

本节将重点介绍如何把旋转不变量与拉普拉斯网格变形相结合,实现保特征的网格变形。由于拉普拉斯坐标对旋转敏感,我们的目的是通过旋转不变量的方法,来修正拉普拉斯坐标的方向。具体变形框架可归结为:首先由公式2可以估算出网格模型每个顶点变形前后的局部旋转变换矩阵;由每个顶点的局部旋转变换矩阵,可以求得每个顶点的变形后的拉普拉斯坐标;然后由公式1重构网格模型。

基于旋转不变量的拉普拉斯网格变形框架:

(1)建立原网格每个顶点的局部标架F、并求取源网格模型的拉普拉斯坐标δ,如图1所示;


①采用顶点vi的邻接三角面片法矢,进行面积加权,计算得顶点vi的法矢n(xn,yn,zn)

②以垂直于n的向量(yin,-xin,0)作为e1;

③在笛卡尔坐标系下e2=n×e1;

④建立vi点的局部标架为:


④求取源网格模型个顶点的拉普拉斯坐标δ;

建立局部标架

(2)全局坐标δ转换成局部坐标δI;

本步骤的目的是把世界坐标系下的拉普拉斯坐标转换成局部标架下的相对坐标δI;由局部标架的性质1,必有


则可得转换公式:


(3)求解变换后的局部标架F’;

由旋转不变量的定义,根据(1)中为每个顶点建立的局部标架及公式(3),可得网格曲面每条边的两个邻接顶点之间的旋转不变量:


然后根据公式()可求得每个顶点变换后的局部标架F’。

(4)局部坐标δI转换成全局坐标δ’;

通过步骤(2)(3)求得的δI、F’,求取变换后的拉普拉斯坐标δ’。具体转换公式如下:



三、 实验结果

 

示例 1


示例 2


示例 3

具体的相关实验结果,我是结合在了网格融合的算法中,可以参考我的另外一篇博文:《拖拽式网格模型融合》,实现这个功能,就需要用到这篇paper的算法。

参考文献:

1、《网格变形综述

2、《Linear Rotation-invariant Coordinates for Meshes》

3、《As-Rigid-As-Possible Surface Modeling》

4、《laplacian framework for interacitve mesh editing》

5、《Laplacian Surface Editing》

**********************作者:hjimce   时间:2015.6.18  联系QQ:1393852684   地址:http://blog.csdn.net/hjimce   原创文章,版权所有,转载请保留本行信息********************

原创粉丝点击