在一個離散的基於網格的平面限定倉(認爲:圖像的像素),我有可以表示爲任一封閉的輪廓:算法來計算設置利用離散輪廓
- 一組2D的點
(x1,y1);(x2,y2);(x3,y3);...
- 或4-連接Freeman code,具有起點:
(x1,y1) + 00001112...
我知道如何從一個切換到另一個這些表示。這將是輸入數據。
我想要得到一組網格座標有界等高線。 考慮下面這個例子,其中紅的座標輪廓,和一個灰色的起點:
如果灰色座標是,比方說,在(0,0),那麼我想的載體持有: (1,1),(2,1),(3,1),(3,2)
順序不重要,輸出矢量也可以保持輪廓本身。選擇
語言是C++,但我開到任何現有的代碼,算法,圖書館,指針,無論...
不過,我覺得,也許CGAL將有這樣的事情,但我不熟悉它並不能通過手冊找到我的方式,所以我甚至不確定。 我也看着Opencv,但我認爲它不提供這種算法(但我可能是錯的?)。
我正在考慮尋找邊界矩形,然後檢查矩形中的每個點,看它們是否爲inside/outside,但這看起來不是最理想的。任何想法 ?
您只需在邊界內找到單個點,然後進行填充。這是一個簡單的遞歸算法。 –
你應該檢查「找到邊界矩形」是否真的很慢。如果你的輪廓不是很大,那麼繪製一個二維數組然後按照j_random_hacker的建議進行填充填充可能是最快的。否則,你很難找出哪個網格位置屬於輪廓。 – DrV
@j_random_hacker謝謝,我沒有想到那個,但它似乎是個好主意。雖然可能不是遞歸實現,但恐怕它可能不是最快的。我會調查。 – kebs