我有两组点 - 说A和B,两者都是相同的大小。我使用Subdiv2D类的OpenCV中的Delaunay三角剖分对这些集合中的每一个进行三角剖分。每个集合中的点代表每个脸部的脸部特征,我试图从集合A中的每个三角形内抽取纹理,并将它翘曲到集合B中相应的三角形。实际上,这会给我一种将一个脸部表情变形为另一个效果(只是通过扭曲纹理)。不幸的是,事实证明,当我为set A调用getTriangleList方法,然后为set B调用三角形A_i时,而不是对应于三角形B_i。换句话说,三角形的顺序与点被添加到每个集合的顺序是不一样的。我实际上做了一个非常简单的测试,我创建了B作为A的副本,并将常量值添加到B中每个点的x坐标,从而有效地将B中的每个点移到右侧。在三角测量之后,订单再次被打破。有什么方法可以跟踪哪个三角形是哪个?不这样做,我无法正确地从一种形状弯曲到anohter(除非有一些其他的方式来做到这一点)在OpenCV中Delaunay三角剖分的匹配结果
2
A
回答
0
我问上面简单的问题没有答案,因为没有保证两个相似集(一个和B)具有相同的数量,点的含义和顺序在它们中的每一个用Delaunay三角测量处理之后将具有相同的拓扑。换句话说,如果A点中的3个点A_0到A_2形成一个三角形,则点B_0到B_2不必在B中形成一个三角形(它们可以属于两个或更多不同的三角形)。
我发现的解决方案是创建一个地图M(triangleId,点名)从甲与属于从A.接着该triangleId vertexIds相关三角形ID,我不三角乙在所有 - 由于B中的点顺序和含义与A中的相同,因此我可以将地图M应用于B以便以完全相同的方式对B进行三角测量,从而保持拓扑结构。之后,问题就会消失。这显然不能确保B按照Delaunay规则进行适当的三角剖分,但它解决了我的问题。
相关问题
- 1. Delaunay三角剖分opencv C++
- 2. 三维Delaunay三角剖分
- 3. 了解Delaunay三角剖分
- 4. 点云Delaunay三角剖分
- 5. OpenCV:从Delaunay三角剖分提取三角形
- 6. 使用约束delaunay三角剖分三角剖分多边形
- 7. OpenCV中有Delaunay三角剖分的C++ API吗?
- 8. 高效的Delaunay三角剖分
- 9. 从lua的C++ Delaunay三角剖分
- 10. 3D Delaunay三角剖分C#lib?
- 11. 优化Delaunay三角剖分算法
- 12. 用Delaunay三角剖分(n-dim)插值
- 13. 如何从凹形Delaunay三角剖分中切出三角形?
- 14. 如何从3D Delaunay三角剖分中获得三角形
- 15. Delaunay三角剖分的合成三角形的寻找面积
- 16. 由于约束Delaunay三角剖分而识别出多边形三角剖分
- 17. Delaunay三角剖分:太多的三角形
- 18. 缺少OpenCV中的三角剖分库:
- 19. Voronoi图,Delaunay三角剖分 - 数据结构
- 20. 半边数据结构delaunay三角剖分
- 21. 在2D Delaunay三角剖分中插入顶点的错误
- 22. 网格隐藏对角线的Delaunay三角剖分或
- 23. 在Matlab中光栅化Delaunay三角剖分
- 24. 在约束Delaunay三角剖分中约束插入
- 25. 在三角形中访问顶点++(delaunay/voronoi三角剖分)包装类
- 26. OpenCV:如何做Delaunay三角剖分并返回一个邻接矩阵?
- 27. 如何获取脸上的点来绘制Delaunay三角剖分
- 28. 射线和delaunay三角剖分的交点
- 29. 获取Vertex_handles到Delaunay三角剖分的点
- 30. 来自加权Delaunay三角剖分的Alpha形状