OpenCV中Delaunay三角剖分的匹配结果

OpenCV中Delaunay三角剖分的匹配结果,opencv,triangulation,delaunay,Opencv,Triangulation,Delaunay,我有两组点,比如A和B,它们的大小都一样。我在OpenCV和Subdiv2D类中使用Delaunay三角剖分对每个集合进行三角剖分。每个集合中的点代表每个人脸的面部特征,我正在尝试从集合A中的每个三角形中采样纹理,并将其扭曲到集合B中相应的三角形。有效地,这将给我一种将一个面部表情变形为另一种效果的方法(仅通过扭曲纹理)。不幸的是,当我为集合A调用GetTriangelList方法,然后为集合B调用GetTriangelList方法时,三角形A_I与三角形B_I并不对应。换句话说,三角形顺序与点

我有两组点,比如A和B,它们的大小都一样。我在OpenCV和Subdiv2D类中使用Delaunay三角剖分对每个集合进行三角剖分。每个集合中的点代表每个人脸的面部特征,我正在尝试从集合A中的每个三角形中采样纹理,并将其扭曲到集合B中相应的三角形。有效地,这将给我一种将一个面部表情变形为另一种效果的方法(仅通过扭曲纹理)。不幸的是,当我为集合A调用GetTriangelList方法,然后为集合B调用GetTriangelList方法时,三角形A_I与三角形B_I并不对应。换句话说,三角形顺序与点添加到每个集合的顺序不同。实际上,我做了一个非常简单的测试,我创建了集合B作为a的副本,并将常量值添加到B中每个点的x坐标,有效地将B中的每个点向右移动。三角测量后,秩序再次被打破。有没有办法追踪哪个三角形是哪个三角形?如果没有这些,我就无法正确地从一个形状变形到另一个形状(除非有其他方法)

我上面问的问题根本没有答案,因为无法保证两个相似的集合(A和B)具有相同的数字,在对每个点进行Delaunay三角剖分后,点的意义和顺序将具有相同的拓扑。换句话说,如果3个点A_0到A_2在A中形成三角形,那么点B_0到B_2不一定要在B中形成三角形(它们可以属于两个或多个不同的三角形)


我找到的解决方案是创建一个映射M(triangleId,PointID),它将a中的三角形id与a中属于该三角形id的顶点关联起来。接下来,我根本不三角化B-因为B中的点顺序和意义与a中的相同,我可以用完全相同的方式将映射M应用到B中,也可以三角化B,维护拓扑。之后,问题就消失了。这显然不能确保B根据Delaunay规则正确地进行三角剖分,但是它解决了我的问题。

我这里也有同样的问题。您找到的解决方案是为一幅图像找到三角形的索引,并将其用于另一幅图像,在大多数情况下,该解决方案可以完美地映射三角形。但是,在某些情况下,映射并不完美,一个或几个三角形根本没有映射。所以这个解决方案并不完美。有人认为这是一个更好的解决方案吗?这并不容易,因为如果图像1中的点与图像2中的点周围的其他点的比例不同,则使用Voronoi图创建三角形的方式会使映射变得复杂。谢谢你的帮助:)