2013-08-05 38 views
5

我正在做一些工作(太複雜,無法解釋),我的一個任務是我需要將平滑多邊形的光柵圖像轉換爲骨架。所以我需要做這樣的事情: Pic 01尋找算法:光柵圖像的骨架生成

我有柵格圖像(在左邊),我想要一個由點和邊(右邊)組成的圖來表示圖像。

我已經閱讀過有關算法,特別是Steven Skiena的一本書,他告訴他使用「Brush Fire」算法,他解釋爲「每個循環都會經過邊緣上的每個點,碰撞添加一個點到骨架,並刪除剩餘的點,移動到下一個循環,直到只剩下骨架「但是我可以在線查找這個算法的所有信息都是關於一些機器人的尋路算法,我不明白如何應用它在這裏(基本上我怎麼知道「邊緣」,如果我只有座標填充/空白像素)。

我查了一下CGAL庫,它是骨架演示,但是當多邊形有很多頂點時它不會很好,所以只需將邊界上的每個頂點轉換成多邊形的頂點,然後將它提供給算法不會產生好的結果。

我希望作爲任務似乎是很基本的這必須是一個常見的算法,但我不想發明輪子,並在主題(也許是因爲我不知道我無法找到任何東西正確的關鍵字)

+0

你應該嘗試的二值圖像骨架之後,檢測線通過霍夫變換。例如,如果您使用opencv,會更容易,但也可以實現這些。 –

回答

3

您的搜索更好的術語是數字減薄,數字版本的中軸。例如,本文引用了15種這樣的算法:「關於十五個2D並行細化算法的注意事項」。

「關於十五個2D並行細化算法的註釋」。 M. Couprie(PDF download link

這裏是一小片圖16中,呈現出兩個這樣的算法的結果:
Fig16

+0

謝謝Joseph,這篇論文(和關鍵字)正是我所需要的! – Istrebitel

0

這是我們學校的項目!它基於施萊辛格的角點和鏤空算法。角點是以壓縮形式表示二進制圖像的一種方式,它可以比光柵圖像上的操作快得多。欲瞭解更多信息,請參閱我們的文章:

Corners toolbox allowing processing binary images in a compressed form

骨骼化實際上是我的一部分,我描述了它在高細節:-) 我想在C++代碼仍然是免費的,可地方。