ARAP(As-Rigid-As-Possible)变形算法

ARAP(As-Rigid-As-Possible)变形算法_第1张图片
上图中,最左侧的模型为其初始状态,由后面几种模型形状的变换我们可以发现它实际上就是要求变形前后模型每一个局部都只经历了平移或者旋转,也就是刚体变换(rigid -transformation)。我们知道,刚体变换是不会产生形状扭曲的,那么如果局部的形状都尽量被保持,变化的只是模型的大体姿态,也就满足了我们之前所说的保持局部细节不变的要求。这也是我们今天要讲的as-rigid-as-possible其名称的由来。

ARAP算法介绍
如下图所示,ARAP变形算法首先定义网格顶点与1-邻域的边构成刚性变形单元,所有点的变形单元重叠地覆盖网格表面。变形过程中假设变形单元仅仅发生旋转变换,形式化的表示如公式(1)所示,变形单元的刚性变换使得网格顶点相对于1-邻域顶点的位置保持不变,从而有效地保持了模型局部的细节
ARAP(As-Rigid-As-Possible)变形算法_第2张图片
C 至 C ′ C至C' CC为刚体变换, 则其变换过程中存在旋转矩阵 R i Ri Ri如下:
在这里插入图片描述(1)
ARAP变形算法的核心能量函数如下所示,通过最小化该能量函数实现模型的尽可能刚性变形,此为形状匹配问题的加权实例
在这里插入图片描述(2)
其中, C i Ci Ci C ′ i C′i Ci分别表示变形前后模型顶点 p i pi pi p i ′ pi′ pi对应的变形单元, N ( i ) N(i) N(i)表示 p i pi pi的1邻域点的索引,而 p j pj pj p j ′ pj′ pj分别表示 p i pi pi p i ′ pi′ pi的1邻域顶点, R i Ri Ri表示 C i Ci Ci C i ′ Ci′ Ci的最优旋转矩阵, w i j wij wij是边 e i j = ( p i , p j ) eij = (pi,pj) eij=(pi,pj)的权重
由于R为变量,那么不包含R的部分可理解为常数,由此可得:
ARAP(As-Rigid-As-Possible)变形算法_第3张图片
协方差矩阵+SVD得:
(下一篇会讲一下SVD(奇异值分解)的几何意义及用途)
在这里插入图片描述
在这里插入图片描述
对于公式(2)所示的二次能量函数最小化,首先,根据中间变形结果 P ′ P′ P和初始模型坐标 P P P使用奇异值分解估算出变形单元的最优旋转矩阵 R i Ri Ri。接下来,在旋转矩阵已知的情况下,令能量函数的导数等于0即可得到函数取得最小值时的 P ′ P' P,即等价于求解公式(3)所示的线性方程组,从而更新了中间变形结果 P ′ P' P。下一次迭代中,再将 P ′ P' P作为已知量, R i Ri Ri作为未知量进行类似的求解,如此迭代,直到能量误差小于用户指定的阈值为止(如下函数中1e-3即为用户指定阈值)。

lg.set_attribute(LocalGlobal::Attribute::OneRingNeighbor, LocalGlobal::Attribute::ContangentWeights,
  LocalGlobal::Attribute::Default, 1e-3)

结语

ARAP之所以会这样受欢迎,是因为它真正做到了我们一直所讲的“在保持局部细节的情况下去编辑模型的大体形态”这一要求,而且易于实现,计算量较小,并且保证会收敛。在制作动画时,ARAP的计算量还是相对较大的,这是因为ARAP是纯几何处理方法,是静态的,并不具有物理模拟中的动态效果(其实就是符合物理规律的模型上各顶点的运动速度及其变化),将所有中间帧用它生成后串起来看会感觉不太自然。另外,ARAP是对3D模型进行刚体变换,是否可以应用到3D模型参数化为二维平面上还有待考究。

ARAP网格变形原文出自:Sorkine O, Alexa M. As-rigid-as-possible surface modeling是04年一篇经典的网格变形的论文
参考链接:
[1]: https://blog.csdn.net/u011426016/article/details/79128909
[2]: https://zhuanlan.zhihu.com/p/25846219

你可能感兴趣的:(三维重建)