格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)

转载 2015年11月19日 17:49:47

http://www.cnblogs.com/shushen/p/4977870.html

      在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感。下面分别介绍这两个算法:

  文章[Lipman et al. 2005]提出的网格形变算法需要求解两次稀疏线性方程组:第一个方程定义了网格上离散坐标系之间的关系,通过求解该方程可以重组每个顶点的坐标系;第二个方程记录了顶点在局部坐标系的位置信息,通过求解该方程可以得到每个顶点的几何坐标。

在网格顶点建立局部坐标系(b1ib2iNi),i∈V。对于(i,j)∈E,定义差分算子δ:

δj(b1i) = b1j – b1i

δj(b2i) = b2j – b2i

δj(Ni) = Nj – Ni

       将差分算子表示为b1ib2iNi的形式:

δj(b1i) = C11ijb1i + C12ijb2i + C13ijNi

δj(b2i) = C21ijb1i + C22ijb2i + C23ijNi

δj(Ni) = C31ijb1i + C32ijb2i + C33ijNi

       进一步表示为:

b1j = (C11ij+1)b1i + C12ijb2i + C13ijNi

b2j = C21ijb1i + (C22ij+1)b2i + C23ijNi

Nj = C31ijb1i + C32ijb2i + (C33ij+1)Ni

  上式为第一个方程,记录了网格上离散坐标系之间的关系,其中的系数可以由原始网格得到。

xj -xi = <eij , b1i >b1i + <eij , b2i >b2i + <eij , Ni >Ni

  上式为第二个方程,记录了顶点在局部坐标系的位置信息,其中的系数也可以由原始网格得到。

  算法效果:

 

  文章[Sorkine et al. 2007]提出了ARAP的网格形变算法,网格顶点的一环邻域三角片组成一个单元(Cell),当顶点i对应的单元Ci变形为Ci’时,定义其刚性(rigidity)能量函数为:

  网格上所有单元的刚性能量之和为:

 

  根据能量函数,算法实现过程分两步进行迭代,第一步更新Ri,第二步更新 pi’,下面为具体推导过程。

  1.更新Ri

  设eij = p- pj,那么能量函数E(S’)可以表示为:

  忽略不含Ri的项,那么:

  定义协方差矩阵Si,将Si奇异值分解:S= UiΣiViT,那么R= ViUiT

  2.更新pi’:

  权重wij和wi分别为:wij = 1/2(cotαij + cotβij),wi = 1。我们将E(S’)对pi’求偏导,并令其等于零:

 

  上式中wij = wji,于是,那么我们可以得到:

 

  上式相当于求解稀疏矩阵方程组。

  算法效果:

 

 

 

参考文献:

[1] Y. Lipman, O. Sorkine, D. Levin, and D. Cohen-Or. 2005. "Linear rotation-invariant coordinates for meshes." In ACM SIGGRAPH 2005 Papers (SIGGRAPH '05) 24:3 (2005), 479-487.

[2] O. Sorkine and M. Alexa. "As-Rigid-As-Possible Surface Modeling." In Proc. of Eurographics Symposium on Geometry Processing. Aire-la-Ville, Switzerland: Eurographics Association, 2007.

Locally linear embedding (LLE)局部线性嵌入(降维)

转载自:http://blog.sina.com.cn/s/blog_6a1bf1310101habg.html
  • u012856866
  • u012856866
  • 2014年10月20日 12:40
  • 1270

Levenberg-Marquardt(列文伯格-马夸尔特)算法

 什么是最优化? Levenberg-Marquardt算法是最优化算法中的一种。最优化是寻找使得函数值最小的参数向量。它的应用领域非常广泛,如:经济学、管理优化、网络分析 、最优设计、机械或...
  • u010922186
  • u010922186
  • 2014年11月17日 19:48
  • 4230

Linear Regression 线性回归算法

基本介绍   线性回归一般用来解决连续值变量预测问题。是有监督学习。叫线性回归,是因为,我们假定自变量和因变量之间是线性相关关系。 线性回归   基本形式: ...
  • wangpei1949
  • wangpei1949
  • 2017年03月12日 16:47
  • 1143

数值分析之龙贝格求积法

利用Richardson外推算法,得到如下的求积方法,其只产生四个序列: 即: 其结束迭代准则为: 并认为为所求积分近似值。 有一定数值分析基础,不难写出如下程序 #include #i...
  • zhengnanlee
  • zhengnanlee
  • 2013年07月17日 16:51
  • 2265

龙格库塔C 语言编程实现

最新一直在学一门很苦逼的课程《数值分析》,哎,高等数学没学好现在后悔了呀,哎回来再恶补,现在说正事。 龙格库塔很牛掰的名字,是两个国外数学家的名字的合并,应该又是两个大牛。 这个方法主要是用来解决...
  • on_way_
  • on_way_
  • 2013年04月22日 21:39
  • 2763

数据结构分析之线性哈希表(Linear Hash Tables)

在看Hector Garcia-Molina,Jeffrey D.Ullman,Jennifer Widom等人写的《数据库系统实现》的时候, 第14.3节介绍了两种可以动态扩充容量的哈希算法。 1....
  • u012891242
  • u012891242
  • 2015年09月24日 18:47
  • 1127

28个不得不看的经典编程算法!!

前十个是来自圣经的十大算法: 发起人的描述:《来自圣经的证明》收集了数十个简洁而优雅的数学证明,迅速赢得了大批数学爱好者的追捧。如果还有一本《来自圣经的算法》,哪些算法会列入其中呢? 第一名:Un...
  • hemmingway
  • hemmingway
  • 2015年08月02日 16:29
  • 6888

算法学习 - Gray Code(格雷码)的解释和c++实现

Gray Code(格雷码) 典型的二进制格雷码(Binary Gray Code)简称格雷码。当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中。 特点是:一组数的编码中,若任意两个相...
  • chenfs1992
  • chenfs1992
  • 2014年12月11日 02:23
  • 2751

数据挖掘十大算法翻译——2K-means

1 算法 K-means算法是一个能够将给定的数据集分为用户定义的数量k个类的简单的迭代算法。很多研究者从不同的研究方向都发现了这个算法,其中特别显著的由Lloyed,Forgey,Friedman和...
  • u010293844
  • u010293844
  • 2015年11月23日 15:03
  • 741

图形学领域的关键算法及源码链接

Graphics Conference Paper Link Archive (Ke-Sen Huang)Reproducible Research archive (image processing...
  • renqian1991
  • renqian1991
  • 2016年03月08日 12:06
  • 2426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
举报原因:
原因补充:

(最多只允许输入30个字)