经典论文推导: As-Rigid-As-Possible(ARAP) Surface Modeling
论文As-Rigid-As-Possible Surface Modeling 发表于SGP 2007,是变形领域的经典论文,目前引用已经超过1000次。网格变形要求产生视觉合理并且大致满足物理规律的变形效果,而模型细节的保持很大程度地满足了这种需求。刚性作为一个重要的属性在保细节方面具有明显的优势,从某种意义上讲,保持模型的刚性很大程度地促进了模型表面细节的保持。
先来看看文中的变形效果:
本文主要讲一下论文中的旋转矩阵RiR_iRi的求解方法。
一、算法简介
如下图所示,ARAP变形算法首先定义网格顶点与1-邻域的边构成刚性变形单元,所有点的变形单元重叠地覆盖网格表面。
变形过程中假设变形单元仅仅发生旋转变换,形式化的表示如公式(1)所示,变形单元的刚性变换使得网格顶点相对于1-邻域顶点的位置保持不变,从而有效地保持了模型局部的细节。
pi′−pj′=Ri(pi−pj),∀j∈N(i)(1)p'_i-p'_j= R_i(p_i-p_j), \forall j \in N(i)\tag1pi′−pj′=Ri(pi−pj),∀j∈N(i)(1)
其中,RiR_iRi 是该变形单元对应的旋转矩阵,pi,pjp_i,p_jpi,pj 和 pi′,pj′p'_i,p'_jpi′,pj′ 是变形前后的网格顶点,这里点的表示是列向量。
每个变形单元的能量函数定义如下所示,通过最小化该能量函数实现模型的尽可能刚性变形:
E(Ci,Ci′)=∑j∈N(i)wij∣∣(pi′−pj′)−Ri(pi−pj)∣∣2(2)E(C_i,C_i' )= \sum_{j\in N(i)} w_{ij} \left| \left|(p'_i-p'_j) - R_i(p_i-p_j)\right|\right|^2 \tag2 E(Ci,Ci′)=j∈N(i)∑wij∣∣∣∣(pi′−pj′)−Ri(pi−pj)∣∣∣∣2(2)
ARAP变形算法总的能量函数定义为:
E=∑i=1n∑j∈N(i)wij∣∣(pi′−pj′)−Ri(pi−pj)∣∣2(3)E= \sum^n_{i=1}\sum_{j\in N(i)} w_{ij} \left| \left|(p'_i-p'_j) - R_i(p_i-p_j)\right|\right|^2 \tag3 E=i=1∑nj∈N(i)∑wij∣∣∣∣(pi′−pj′)−Ri(pi−pj)∣∣∣∣2(3)
其中,CiC_iCi和Ci′C_i'Ci′分别表示变形前后模型顶点 pip_ipi 和 pi′p'_ipi′ 对应的变形单元,N(i)N(i)N(i) 表示 pip_ipi 的1-邻域点的索引,而 pjp_jpj 和 pj′p'_jpj′ 分别表示 pip_ipi 和 pi′p'_ipi′ 的1-邻域顶点,RiR_iRi表示CiC_iCi到Ci′C_i'Ci′的最优旋转矩阵,wijw_{ij}wij是边eij=(pi,pj)e_{ij}=(p_i, p_j)eij=(pi,pj)的权重, 定义如下所示。其中,αij\alpha_{ij}αij 和 βij\beta_{ij}βij 如上图所示。
wi,j=12(cotαij+cotβij)(4)w_{i,j} = \frac{1}{2}(cot\alpha_{ij} + cot \beta_{ij})\tag4wi,j=21(cotαij+cotβij)(4)
对于公式(3)所示的二次能量函数最小化中的每个变形单元,共有两个未知数:旋转矩阵RRR 和变形后的点坐标 P′P'P′(公式(2)中的pi′p'_ipi′ 和 pj′p'_jpj′). 论文采用迭代的方式进行优化求解:
- 1)固定P′P'P′ 求解使得(3)最小的每个变形单元的最优旋转矩阵RiR_iRi。
- 2)在旋转矩阵RiR_iRi已知的情况下,求解使得(3)最小的变形后的顶点坐标P′P'P′。
- 3)返回1),直到能量误差小于用户指定的阈值为止。
接下来,重点讲一下如何求解RRR 和 P′P'P′.
二、已知P′P'P′求解旋转矩阵RRR
针对每个变形单元单独求解,令eij′=pi′−pj′,eij=pi−pje'_{ij} = p'_i-p'_j, e_{ij} = p_i-p_jeij′=pi′−pj′,eij=pi−pj, 公式(2)可以改写为:
E(Ci,Ci′)=∑j∈N(i)wij(eij′−Rieij)2=∑j∈N(i)wij(eij′Teij′−eij′TRieij+eijTRiTRieij)(5)E(C_i,C_i' )=\sum_{j\in N(i)}w_{ij}(e'_{ij}-R_ie_{ij})^2 =\sum_{j\in N(i)}w_{ij}(e'^T_{ij}e'_{ij}-e'^T_{ij}R_ie_{ij}+e^T_{ij}R^T_iR_ie_{ij})\tag5E(Ci,Ci′)=j∈N(i)∑wij(eij′−Rieij)2=j∈N(i)∑wij(eij′Teij′−eij′TRieij+eijTRiTRieij)(5)
因为RRR是旋转矩阵(正交矩阵),RiTRi=IR^T_iR_i = IRiTRi=I, 所以上式等于:
E(Ci,Ci′)=∑j∈N(i)wij(eij′Teij′−eij′TRieij+eijTeij)(6)E(C_i,C_i' )=\sum_{j\in N(i)}w_{ij}(e'^T_{ij}e'_{ij}-e'^T_{ij}R_ie_{ij}+e^T_{ij}e_{ij})\tag6E(Ci,Ci′)=j∈N(i)∑wij(eij′Teij′−eij′TRieij+eijTeij)(6)
上式的最小值跟不含RiR_iRi的项无关,因此:
Ri=arg minRi∑j∈N(i)wij(−eij′TRieij)=arg maxRi∑j∈N(i)wijeij′TRieij(7)R_i = \argmin \limits_{R_i}\sum_{j\in N(i)}w_{ij}(-e'^T_{ij}R_ie_{ij}) = \argmax \limits_{R_i}\sum_{j\in N(i)}w_{ij}e'^T_{ij}R_ie_{ij}\tag7Ri=Riargminj∈N(i)∑wij(−eij′TRieij)=Riargmaxj∈N(i)∑wijeij′TRieij(7)
上式可以写成矩阵的迹的形式(参见末尾示意图)进行改写:
Ri=arg maxRiTr(∑j∈N(i)wijRieijeij′T)(8)R_i =\argmax \limits_{R_i}Tr(\sum_{j\in N(i)}w_{ij}R_ie_{ij}e'^T_{ij}) \tag8Ri=RiargmaxTr(j∈N(i)∑wijRieijeij′T)(8)
并将RiR_iRi提到外面:
Ri=arg maxRiTr(Ri∑j∈N(i)wijeijeij′T)(9)R_i =\argmax \limits_{R_i}Tr(R_i\sum_{j\in N(i)}w_{ij}e_{ij}e'^T_{ij})\tag9Ri=RiargmaxTr(Rij∈N(i)∑wijeijeij′T)(9)
接下来就是如何求解这个旋转矩阵,假设Si=∑j∈N(i)wijeijeij′TS_i = \sum_{j\in N(i)}w_{ij}e_{ij}e'^T_{ij}Si=∑j∈N(i)wijeijeij′T, 一般而言,SiS_iSi 可以通过奇异值分解得到:
Si=UiΣiViT(10)S_i = U_i\Sigma_iV^T_i\tag{10}Si=UiΣiViT(10)
那么(9)可以进一步写为:
Ri=arg maxRiTr(RiUiΣiViT)(11)R_i =\argmax \limits_{R_i}Tr(R_iU_i\Sigma_iV^T_i) \tag{11}Ri=RiargmaxTr(RiUiΣiViT)(11)
根据Tr(AB)=Tr(BA)Tr(AB) = Tr(BA)Tr(AB)=Tr(BA),上式进一步改写:
Ri=arg maxRiTr(ViTRiUiΣi)(12)R_i =\argmax \limits_{R_i}Tr(V^T_iR_iU_i\Sigma_i) \tag{12}Ri=RiargmaxTr(ViTRiUiΣi)(12)
令:X=ViTRiUiX = V^T_iR_iU_iX=ViTRiUi, 因为此三个矩阵都是正交矩阵,所以XXX也是正交矩阵,上式可以写成:
Ri=arg maxRiTr(XΣi)(13)R_i =\argmax \limits_{R_i}Tr(X\Sigma_i) \tag{13}Ri=RiargmaxTr(XΣi)(13)
而:
Tr(XΣi)=X(1,1)Σi(1,1)+X(2,2)Σi(2,2)+X(3,3)Σi(3,3)(14)Tr(X\Sigma_i) = X_{(1,1)}\Sigma_i(1,1) + X_{(2,2)}\Sigma_i(2,2) + X_{(3,3)}\Sigma_i(3,3)\tag {14}Tr(XΣi)=X(1,1)Σi(1,1)+X(2,2)Σi(2,2)+X(3,3)Σi(3,3)(14)
对于上式有两点需要注意:
1)Σi\Sigma_iΣi保存了矩阵SiS_iSi的所有奇异值,所以Σi\Sigma_iΣi的对角线上的元素均大于等于0(奇异值分解的性质决定)。
2)另外,正交矩阵中的各元素的取值X(i,j)∈[0,1]X_{(i,j)} \in [0,1]X(i,j)∈[0,1]。
因此,当X是单位阵时上式取得最大值,即Σi\Sigma_iΣi对角线元素之和。因此只需要X=ViTRiUi=IX= V^T_iR_iU_i=IX=ViTRiUi=I 即可,所以:
Ri=ViUiT(15)R_i = V_iU^T_i\tag{15}Ri=ViUiT(15)
这就是论文给出的最终的旋转矩阵的求解方法。
三、已知RRR求解变形后的顶点P′P'P′
这一步相对比较简单,直接对能量函数求导即可,具体推导就把论文中搬出来即可:
∂E(S′)∂pi′=∂∂pi′(∑j∈N(i)wij∥(pi′−pj′)−Ri(pi−pj)∥2+∑j∈N(i)wji∥(pj′−pi′)−Rj(pj−pi)∥2)==∑j∈N(i)2wij((pi′−pj′)−Ri(pi−pj))++∑j∈N(i)−2wji((pj′−pi′)−Rj(pj−pi)).(16)\begin{aligned} \frac{\partial E\left(\mathcal{S}^{\prime}\right)}{\partial \mathbf{p}_{i}^{\prime}} &=\frac{\partial}{\partial \mathbf{p}_{i}^{\prime}}\left(\sum_{j \in \mathcal{N}(i)} w_{i j}\left\|\left(\mathbf{p}_{i}^{\prime}-\mathbf{p}_{j}^{\prime}\right)-\mathbf{R}_{i}\left(\mathbf{p}_{i}-\mathbf{p}_{j}\right)\right\|^{2}\right.\\ &\left.+\sum_{j \in \mathcal{N}(i)} w_{j i}\left\|\left(\mathbf{p}_{j}^{\prime}-\mathbf{p}_{i}^{\prime}\right)-\mathbf{R}_{j}\left(\mathbf{p}_{j}-\mathbf{p}_{i}\right)\right\|^{2}\right)=\\ &=\sum_{j \in \mathcal{N}(i)} 2 w_{i j}\left(\left(\mathbf{p}_{i}^{\prime}-\mathbf{p}_{j}^{\prime}\right)-\mathbf{R}_{i}\left(\mathbf{p}_{i}-\mathbf{p}_{j}\right)\right)+\\ &+\sum_{j \in \mathcal{N}(i)}-2 w_{j i}\left(\left(\mathbf{p}_{j}^{\prime}-\mathbf{p}_{i}^{\prime}\right)-\mathbf{R}_{j}\left(\mathbf{p}_{j}-\mathbf{p}_{i}\right)\right) . \end{aligned}\tag{16} ∂pi′∂E(S′)=∂pi′∂⎝⎛j∈N(i)∑wij∥∥(pi′−pj′)−Ri(pi−pj)∥∥2+j∈N(i)∑wji∥∥(pj′−pi′)−Rj(pj−pi)∥∥2⎠⎞==j∈N(i)∑2wij((pi′−pj′)−Ri(pi−pj))++j∈N(i)∑−2wji((pj′−pi′)−Rj(pj−pi)).(16)
因为wij=wjiw_{ij} = w_{ji}wij=wji, 上式进一步改写为:
∂E(S′)∂pi′=∑j∈N(i)4wij((pi′−pj′)−12(Ri+Rj)(pi−pj))\frac{\partial E\left(\mathcal{S}^{\prime}\right)}{\partial \mathbf{p}_{i}^{\prime}}=\sum_{j \in \mathcal{N}(i)} 4 w_{i j}\left(\left(\mathbf{p}_{i}^{\prime}-\mathbf{p}_{j}^{\prime}\right)-\frac{1}{2}\left(\mathbf{R}_{i}+\mathbf{R}_{j}\right)\left(\mathbf{p}_{i}-\mathbf{p}_{j}\right)\right)∂pi′∂E(S′)=j∈N(i)∑4wij((pi′−pj′)−21(Ri+Rj)(pi−pj))
令导数为0,则可以得到:
∑j∈N(i)wij(pi′−pj′)=∑j∈N(i)wij2(Ri+Rj)(pi−pj)(17)\sum_{j \in \mathcal{N}(i)} w_{i j}\left(\mathbf{p}_{i}^{\prime}-\mathbf{p}_{j}^{\prime}\right)=\sum_{j \in \mathcal{N}(i)} \frac{w_{i j}}{2}\left(\mathbf{R}_{i}+\mathbf{R}_{j}\right)\left(\mathbf{p}_{i}-\mathbf{p}_{j}\right) \tag{17}j∈N(i)∑wij(pi′−pj′)=j∈N(i)∑2wij(Ri+Rj)(pi−pj)(17)
最终转换为一个线性方程组求解即可。
四、补充:(7)式到(8)式,矩阵到迹的表示
可令(7)式中的 A=wijeij′T,B=RieijA = w_{ij}e'^T_{ij}, B = R_ie_{ij}A=wijeij′T,B=Rieij, 其中A是一行3列,B是3行一列,对于这种行矩阵跟列矩阵的乘法可以表示为矩阵的迹,下面展示了更一般的情况: A1×nBn×1=Tr(Bn×1A1×n)A_{1\times n}B_{n\times 1} = Tr(B_{n\times 1}A_{1\times n})A1×nBn×1=Tr(Bn×1A1×n)。
参考资料:
[1] 知乎:用数学编辑3D模型(二)- As-Rigid-As-Possible
[2] 知乎:奇异值分解(SVD)
[3] 矩阵迹的性质和运算
[4] http://blog.csdn.net/seamanj/article/details/50597420 (Tr(M) >= Tr(RM))
经典论文推导: As-Rigid-As-Possible(ARAP) Surface Modeling相关推荐
- NeurIPS 2019 获奖论文出炉,微软华人学者Lin Xiao 获经典论文奖
导语:历史之最,参会1.3万人~ 作为最久负盛名的机器学习顶会之一,今年 NeurIPS 2019 在召开之前就消息不断:在今年论文审稿期间,NeurIPS 2019 程序委员会主席专门发布声明称,1 ...
- GPT-3获NeurIPS 2020最佳论文奖,苹果华人学者获经典论文奖
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI NeurIPS 2020今天正式召开,今年共有1900篇论文被接收,创下历史新高. 今天早晨,大会评委会公布了获得最高荣誉的论文名单: 包 ...
- NeurIPS 2019最佳论文出炉,今年增设“新方向奖”,微软华人学者获经典论文奖...
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 第32届神经信息处理系统大会(NeurIPS 2019)今天在加拿大温哥华正式召开. 据大会官方介绍,今年的参会人数达到了空前的1.3万人 ...
- 计算机科学经典论文(zz)
作者:g9yuayon from:http://blog.csdn.net/g9yuayon/article/details/1512851 从Jao的Programming Musing 看到的:B ...
- NeurIPS2019获奖论文!7篇论文斩获!微软华裔研究员斩获经典论文
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :https://mediu ...
- 各个领域中的经典论文,看看你都读过哪些 - 易智编译EaseEditing
易智编译提供个人定制一站式SCI期刊发表服务,拥有丰富的SCI期刊资源,大幅提高成功投稿命中率. 这篇文章以web of science为依据,选取了各个领域中引用最高的文章.他们是各个研究领域中的经 ...
- 沐神点赞!同济子豪兄精读AI经典论文,包括图像分类、目标检测、生成对抗网络、轻量化卷积神经网络等领域...
读研/读博的你,是不是符合: 毕设/研一/博一科研小白刚进课题组,不知道如何写开题报告和综述? 前沿顶会.期刊论文.综述文献浩如烟海,不知道学习路径,无从下手? 导师放养,既不懂也不管,师兄各忙各的, ...
- [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
<娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...
- NLP经典论文:Layer Normalization 笔记
NLP经典论文:Layer Normalization 笔记 论文 介绍 模型结构 batch normalization 和 layer normalization 的相同点 batch norma ...
最新文章
- PHP哈希表碰撞攻击原理
- matlab 图论工具箱
- logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作
- 01)自学JavaScript
- 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
- Effective系列经典著作,铺就程序员殿堂之路
- element ui表单处理的简洁方法
- echarts 圆环图渐变
- [Bada开发]使用静态库
- Mach-O文件, 架构包framework的合并和拆分
- c语言 unpack函数,Pack/Unpack 总结
- 阿里RocketMQ创始人首次分享出这份RocketMQ技术内木神级架构手册
- Hypervisor小记
- 解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?
- 免费的静态网页托管_如何使用自动管道免费托管静态站点
- javaweb企业员工考勤管理系统案例
- 解决:teamview持续很久显示连接未就绪
- 程序启动,遇到Process finished with exit code 1 解决方法
- 视频教程-Python开发全教程-Python
- ORB-SLAM3的Euroc数据集测试
热门文章
- HTML学生作业网页:使用HTML+CSS技术实现非遗文化网页设计题材【汉服文化—共12个页面】
- ipad分屏功能怎么开启_英雄联盟手游设置怎么调最合适?英雄联盟手游设置方法与新手开启功能解析...
- PHP配置环境搭建 MyEclipce添加PHP插件
- 想发国际期刊,这些工具和技巧你都知道吗?
- Sublime Text 3 Build 3065 All System CracKed By Hmily[LCG]
- 服务器输入不显示字,搜狗输入法打字不显示怎么办 快来看看解决办法
- Sleep(0)的妙用
- BUUCTF [HITCON 2016] Leaking
- 判断iOS6/iOS7, 3.5inch/4.0inch
- Android摄像头 只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理 底层Surface