1. 程式人生 > >OpenCV的Delaunay三角剖分和Voronoi圖的實現

OpenCV的Delaunay三角剖分和Voronoi圖的實現

給定平面中的一組點,三角測量指的是將平面細分為三角形,將點作為頂點。在圖1中,我們在左影象上看到一組界標,以及在中間影象中的三角測量。一組點可以有許多可能的三角剖分,但Delaunay三角剖分出眾,因為它有一些不錯的屬性。在Delaunay三角剖分中,選擇三角形使得沒有點在任何三角形的外接圓內。圖2示出了4點A,B,C和D的Delaunay三角剖分。在頂部影象中,為了使三角剖分是有效的Delaunay三角剖分,點C應該在三角形ABD的外接圓外,並且點A應該在三角形BCD的外接圓。
Delaunay三角形的一個有趣的屬性是它不喜歡“瘦”三角形(即具有一個大角度的三角形)。
圖2顯示了當移動點時,三角形如何改變以選擇“胖”三角形。在頂部影象中,點B和D的x座標在x = 1.5,在底部影象中,它們向右移動到x = 1.75。在頂部影象中,角度ABC和ABD大,並且Delaunay三角剖分在B和D之間建立邊緣,將兩個大角度分割成更小的角度ABD,ADB,CDB和CBD。另一方面,在底部影象中,角度BCD太大,並且Delaunay三角剖分產生邊緣AC以劃分大角度。
有很多演算法來找到一組點的Delaunay三角剖分。最明顯的(但不是最有效的)一個是從任何三角形開始,並檢查任何三角形的外接圓包含另一個點。如果是,翻轉邊緣(如圖2所示),並繼續,直到沒有三角形的外接圓包含一個點。
關於Delaunay三角剖分的任何討論必須包括Voronoi圖,因為一組點的Voronoi圖是對其Delaunay三角剖分的數學對。