【发布时间】:2017-05-03 09:34:13
【问题描述】:
我有两组点 - 比如说 A 和 B,它们的大小相同。我使用带有 Subdiv2D 类的 OpenCV 中的 Delaunay 三角剖分对这些集合中的每一个进行三角剖分。每组中的点代表每张脸的面部特征,我试图从组 A 中对每个三角形内的纹理进行采样,并将其扭曲到组 B 中的相应三角形。实际上,这会给我一种将一种面部表情变形为另一种面部表情的方法效果(只是通过扭曲纹理)。不幸的是,事实证明,当我为集合 A 调用 getTriangleList 方法,然后为集合 B 调用时,三角形 A_i 确实不对应于三角形 B_i。换句话说,三角形顺序与将点添加到每个集合的顺序不同。我实际上做了一个非常简单的测试,我创建了集合 B 作为 A 的副本,并将常数值添加到 B 中每个点的 x 坐标,有效地将 B 中的每个点向右移动。三角剖分后,秩序再次被打破。有没有办法跟踪哪个三角形是哪个?没有它,我无法正确地从一种形状变形到另一种形状(除非有其他方法可以做到这一点)
【问题讨论】:
-
我这里也有同样的问题。您找到的解决方案找到了一个图像的三角形索引并将其用于其他工作,在大多数情况下完美地映射了三角形。然而,在某些情况下,映射并不完美,一个或几个三角形根本没有映射。所以这个解决方案并不完美。有没有人作为更好的解决方案?这并不容易,因为如果图像 1 中的点与图像 2 中的点周围的其他点的比例不同,使用 Voronoi 图创建三角形的方式会使映射变得复杂。谢谢你的帮助:)
标签: opencv triangulation delaunay