另一個例子可以使用bwperim
。這實際上是查看圖像中所有不同的二進制對象,並提取每個對象的邊界。這僅適用於有白色物體,因此使用@Crazy老鼠的例子作品中,我們可以這樣做:
im = ~im2bw(imread('http://i.stack.imgur.com/p9BZl.png'));
out = ~bwperim(im);
以上將圖像中讀取並把它轉換成二進制/ logical
。接下來,我們需要反轉圖像,以便背景爲黑色時對象/文本爲白色。之後,請撥打bwperim
,以便提取對象的邊界,然後轉換回來以便對象文本爲黑色,然後重新進行反轉。
我得到的輸出是:
的獨特優勢與bwperim
超過imcontour
是bwperim
提供實際輸出圖像,而imcontour
只畫一個圖給你。您當然可以從圖中提取圖像數據,例如使用h = gcf; out = h.cdata;
成語,但這會在結果中包含一些圖形背景。我懷疑你會喜歡實際的原始圖像,所以我會建議使用bwperim
。
我們如何將這與您鏈接的Freeman代碼一起使用?
如果你看看源代碼,它需要在兩個輸入:
b
,這是確定要編碼
unwrap
形狀的邊界座標的N x 2
矩陣 - 一個可選參數
如果您想使用您鏈接到的函數,只需提取沿圖像邊界的像素的行和列座標。因此,這是imcontour
的另一個限制,因爲如果沒有原始輪廓圖像本身,您將無法確定這些位置。因此,您真正需要做的是:
[y,x] = find(out == 0);
cc = chaincode([y x]);
您能舉一個示例圖像嗎?你有輪廓了嗎? – Trilarion 2015-02-06 14:01:56