2017-04-08 66 views
0

我正在學習計算機視覺和玩過濾器。一個問題是提出一個過濾器,可以檢測黑色背景上正方形爲白色的二值圖像中正方形的左上角。簡單的圖像過濾器,檢測廣場的左上角?

在MATLAB中,我嘗試了過濾器,看起來像這樣:

ul = [0 0 0; 0 1 1; 0 1 1] 

但它似乎並沒有給我我想要的東西。命令imshow基本上顯示與原始相同的圖像。

i = imread('white_square_on_black.png'); 
imshow(imfilter(i, ul, 'conv')); 

什麼是正確的過濾器做到這一點,一般的原則是什麼?

回答

3

首先,過濾後接近同一圖像的原因是,您的過濾器正在檢測所有右側和下側的鄰居非零的像素。這包括位於圖像中間的所有像素,因爲它們具有非零的鄰居。

要解決這個問題,你需要懲罰一個像素,如果其左邊或上邊的鄰居不爲零。因此,我們可以更改過濾器:

ul = [-5 -5 -5; 
     -5 1 1; 
     -5 1 1]; 

這樣一來,如果不想要的像素甚至一個不爲零,它會迫使低於零值。 (假設您使用的是帶符號的數字類型)。

如果您在代碼中使用此篩選器,您會注意到它突出顯示了廣場右上角的右下角。這是因爲conv在卷積之前翻轉內核。您可以通過將conv更改爲corr,或者完全刪除它,或者通過預先翻轉過濾器來解決該問題。

我創建的測試圖像:

enter image description here

然後創建使用濾波圖像

sf = (imfilter(img, ul) >= 3); % make sure we get a full corner 

enter image description here