2015-02-06 28 views
0

我在我的項目中從手寫阿拉伯文檔中處理作家識別問題。如何使用freeman鏈碼提取輪廓使用matlab?

來標識作者,我使用了一個數據庫圖像, 我的問題是如何從這些圖像中提取特徵。我是matlab新手,對圖像處理沒有太多知識。

請幫助我,我需要從圖像中提取輪廓,然後使用freeman鏈代碼進行編碼。

The following link contains freeman code in matlab but I do not know how to use it.

我歡迎你的建議,並感謝您提前

+0

您能舉一個示例圖像嗎?你有輪廓了嗎? – Trilarion 2015-02-06 14:01:56

回答

2

可以使用imcontour功能。

例如,如果您加載這個樣本圖像

Sample image

Img = imread('test.png'); 

您可以用命令得到輪廓:

C = imcontour(Img, 1); 

Result contour

然後你可以使用你用C引用的freeman函數作爲fi第一個輸入。

+0

我tryed但我得到錯誤 – sahar 2015-03-01 21:27:38

+0

@ Crasy誤差'錯誤使用chaincode(線78) 曲線不是8連接元件: IDX - > 1 在主(第12行)錯誤 [CC ] = chaincode(C);' – sahar 2015-03-01 22:15:44

+0

得到相同的錯誤 – Hetal 2016-09-20 03:23:33

1

另一個例子可以使用bwperim。這實際上是查看圖像中所有不同的二進制對象,並提取每個對象的邊界。這僅適用於有白色物體,因此使用@Crazy老鼠的例子作品中,我們可以這樣做:

im = ~im2bw(imread('http://i.stack.imgur.com/p9BZl.png')); 
out = ~bwperim(im); 

以上將圖像中讀取並把它轉換成二進制/ logical。接下來,我們需要反轉圖像,以便背景爲黑色時對象/文本爲白色。之後,請撥打bwperim,以便提取對象的邊界,然後轉換回來以便對象文本爲黑色,然後重新進行反轉。

我得到的輸出是:

enter image description here

的獨特優勢與bwperim超過imcontourbwperim提供實際輸出圖像,而imcontour只畫一個圖給你。您當然可以從圖中提取圖像數據,例如使用h = gcf; out = h.cdata;成語,但這會在結果中包含一些圖形背景。我懷疑你會喜歡實際的原始圖像,所以我會建議使用bwperim

我們如何將這與您鏈接的Freeman代碼一起使用?

如果你看看源代碼,它需要在兩個輸入:

  1. b,這是確定要編碼
  2. unwrap形狀的邊界座標的N x 2矩陣 - 一個可選參數

如果您想使用您鏈接到的函數,只需提取沿圖像邊界的像素的行和列座標。因此,這是imcontour的另一個限制,因爲如果沒有原始輪廓圖像本身,您將無法確定這些位置。因此,您真正需要做的是:

[y,x] = find(out == 0); 
cc = chaincode([y x]); 
+0

@ rayryeng我被tryed這段代碼,但我得到錯誤 – sahar 2015-03-01 21:28:36

+0

@sahar - 這將是什麼樣的神祕錯誤?我不是一個心靈讀者。更加詳細一些。 – rayryeng 2015-03-01 21:29:34

+0

主錯誤(第10行) cc = chaincode([y x]); – sahar 2015-03-01 21:45:19