我有兩組點 - 說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形狀