Pages

2009年12月17日 星期四

找出二值影像的邊緣並序列化

  標題提到的「序列化」,意思是依序記錄邊緣上的點,以便之後取出該物體的 Fourier Descriptor。找邊緣的演算法很多:cannysnake 等,不過這些我都不會,所以我先用了 sobel 來做,但由於 sobel 會讓物體的邊緣「增厚」,這樣對於我之後的序列化會有困難。所以必須換別的做法。


  因為來源是二值影像,所以這邊想到一個更簡潔,效果我覺得一定好的方式 (自我感覺良好:P),整個過程分三步驟:
  1. 對影像做水平掃描,若像素 A 的左或右為背景,則像素 A 為邊緣。
  2. 對影像做垂直掃描,若像素 A 的上或下為背景,則像素 A 為邊緣。
  3. 將步驟一得到的水平影像和步驟二的垂直影像做logical OR operation
  這樣一來,就可以將物體的邊緣找出來,且不會有邊緣增厚的問題發生,接下來就是「序列化」的動作。因為物體是連通,所以邊緣不會有斷掉的問題發生,我只要從某一點出發,朝周圍八個方向走訪即可〈Depth First Search 的應用〉,就是一定可以走出迷宮的老鼠..^_^。



程式碼下載 (DFS is non-recursive version)

10 則留言:

汪汪向前衝 提到...

無意逛到您的Blog發現內容真的很豐富
尤其你這個演算法很有意思,只是你前提有限制輸入影像是二值化過的,所以要先人工處裡二值化影像嗎?

Eric 提到...

沒錯,需要做前處理,產生二值影像。:)

汪汪向前衝 提到...

那你的二值影像是人工去判斷產生還是自動產生,機器能自動判斷那個值會表現比較好的效果嗎?

Eric 提到...

上述的二值影像,我是以膚色去作..。

汪汪向前衝 提到...

所以可以一氣呵成,厲害,小弟剛入門,你的文章對我幫助很大,可以設成好友嗎?

Unknown 提到...

您好
程式碼的連結已失效
想要參考一下
可否提供
謝謝

Eric 提到...

你再試試看...連結應該沒問題。

Unknown 提到...

您好
依然不行耶
如果方便的話
是否可以將程式碼寄給我
另一個Fourier Descriptor 也無法下載
我的email cherry326@gmail.com
謝謝

Eric 提到...

你應該是用IE吧,他對連結比較龜毛一點,已修正!:)

Unknown 提到...

您好
已可下載
謝謝

 
Blogger Templates