3 d网格变形

27次浏览(最近30天)
艾娃
艾娃 2012年2月10日
评论道: 席琳Roux2017年2月10日
我有两个3D网格(460 × 3),我想在它们之间做简单的变形,并将变形保存为avi。文件。
有人知道吗?
谢谢你!
1评论
席琳Roux
席琳Roux 2017年2月10日
你能告诉我最终代码吗?谢谢你!

登录评论。

接受的答案

安东Semechko
安东Semechko 2012年2月10日
在变形之前,您首先必须建立两个曲面之间的密集点对应关系。您可以用多种方法来解决这个问题。这里有一个方法:
首先,你必须确保表面是在一个共同的参考框架内注册的。换句话说,您必须找到一个全局刚性(或相似,如果比例不重要)转换,将最大限度地对齐两个面。为此,您可以使用FEX的ICP(迭代最近点)算法的一种实现。例如: //www.tatmou.com/matlabcentral/fileexchange/24301-finite-iterative-closest-point
其次,你需要找到曲面(S1和S2)之间的点态对应。这意味着给定S1上的一个点,你可以在S2上找到对应的点。最简单的方法是根据空间邻近度选择点。选择一组对应的点{x1_i}和{x2_i}后,可以使用薄板样条(TPS)找到光滑的位移场D(),使D(x1_i)=x2_i。FEX的许多TPS实现之一: //www.tatmou.com/matlabcentral/fileexchange/22227-thin-plate-splines
第三,现在可以使用步骤2中的D()将所有顶点从S1映射到S2。
最后,您现在可以使用S(t)=(1-t)*S1+t*S2将S1变成S2,其中t是区间[0,1]上的标量。注:S(t=0)=S1, S(t=1)=S2。
1评论
艾娃
艾娃 2012年2月11日
谢谢安东!

登录评论。

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!