2013-02-04 149 views
2

我試圖在matlab中編寫我自己的擴張和侵蝕函數。我有一個可行的實現,但它改變了輸出圖像的大小。擴張/侵蝕圖像不改變大小

這是我有:

侵蝕

function eroded = erode(X) 
eroded = col2im(min(im2col(X, [3 3])), [3 3], size(X)); 
end 

擴張

function dilated = dilate(X) 
dilated = col2im(max(im2col(X, [3 3])), [3 3], size(X)); 
end 

這些作品在視覺上,但是當我嘗試覆蓋與他們所做的地區它被搞砸,因爲圖像矩陣的尺寸已經改變。我發現問題出在col2imim2col。誰能告訴我我做錯了什麼?

玩弄它,我發現它很可能與minmax如何在變換矩陣列的尺寸減小到1

+0

第二個功能應該是'函數f =擴張(X)'......對嗎? – bla

+0

對不起,修正。 – Raufio

回答

1

相關的你似乎並不被考慮您的實現邊界條件。

要做到這一點,您很可能無法將您的功能寫入一行。您可以執行以下兩項操作之一:1)創建一個單獨的過濾器以應用於邊緣,然後將這些值附加到輸出中,或者2)忽略邊界和零填充,或者3)忽略邊界並附加值從原始圖像。

注:雖然你寫你自己的功能,有效的內置MATLAB函數將如下所示:

eroded = imerode(X,[1,1,1;1,1,1;1,1,1]); 

而對於擴張:

dilated = imdilate(X,[1,1,1;1,1,1;1,1,1]);