2014-12-23 108 views
5

我想在MATLAB(特別是)的圖像中做一個對象的形狀分析。爲此,我找到了邊界像素。對於每個邊界像素,我使用8鄰域理論計算它的鄰居。現在我正在計算一個點與其唯一鄰居的切線(取決於我如何選擇順時針或其他方式)。如果每個像素恰好有兩個鄰居,我的算法就可以正常工作。對於this picture(訂購9 X 15像素)中顯示的形狀。尋找最佳鄰居像素

但是,如果有一個像素超過2個鄰居,那麼我的算法會變得困惑。例如(如9×15像素)所示。

enter image description here

我想利用每個邊界像素的切線與順時針或逆時針方向的相鄰像素,如果您發現第二個圖像,這是有效的邊界圖像,如果我在順時針方向正在移動,然後紅色像素的鄰居將是綠色的,順時針方向的綠色鄰居將是「1」,鄰居的「1」是「2」,但是我不能回到藍色和棕色像素,我不能訪問並取得每個邊界的切線像素與其相鄰像素。

我已經學習了圖形的節點訪問算法,其中你維護隊列或堆棧,但在這種情況下,我不只是想訪問每個像素,而且還根據我的方向採用每個像素的正切鄰居像素正在移動。

這是一個示例問題,類似的問題可能以其他方式發生,所以我試圖爲它生成一些通用算法。我會感謝你的幫助。謝謝。

+0

應查看計算爲發生的像素上,而不是像素之間的邊界。那麼沒有問題。所以順時針你會發現綠藍色導致藍紅色導致紅藍色導致藍褐色並且沒有問題。 – btilly

+0

但第二張圖像是所有像素都是邊界像素的有效圖像。因此,在遍歷像素時,請記住每個白色像素都是邊界像素。 –

回答

1

就像已經說過的一樣。解決的辦法是找到像素之間的邊界,而不是像素之間的邊界。我向你推薦potrace算法的一部分。它是矢量化二進制圖像的一種算法。有趣的部分是你的路徑反彙編。這裏是路徑decompisition的想法:

Path following

Potrace Algorithm,你可以在這裏找到。

其他算法來自Wilhelm Burge和Burger在書籍"digital image processing an algorithmic introduction using enter link description here"中。在鏈接中,您可以看到本書的某些部分。內部部分是第538頁的「TraceContour」功能。此算法像您想象的那樣工作,並圍繞「內部」像素走動。我發現了一些在內邊界追蹤處的Alorith here的消除。您可以使用四個或八個相鄰連接來執行算法。

The connectivity