2014-02-07 31 views
1

我想只從圖像中獲得葉。 背景是普通的白皮書(A4),並且有一些陰影。我應用了一些方法(結構元素,邊緣檢測使用過濾器),但我找不到可以應用所有圖像的一般方法。使用圖像處理在白紙上的細分對象(葉)

這些都是例子。 ex1

ex2

對於這個問題有更好的方法?

謝謝

另一個例子。 ex3

和我得到的結果是 ex3_result

通過使用

hsv_I = rgb2hsv(I); 
Is = hsv_I(:,:,2); 
Is_d = imdilate(Is,strel('diamond',4)); 
Is_e = imerode(Is,strel('diamond',2)); 
Is_de = imerode(Is_d,strel('disk',2)); 
Is_def = imfill(Is_de,'holes'); 
Is_defe = imerode(Is_def,strel('disk',5)); 

然後Is_defe是一個面具段 enter image description here

但是,我做的方法是非常具體的。一般來說,我無法使用它。

+2

你的代碼,你沒試過嗎? – Marcin

+0

分水嶺分割。考慮到可能比這個稍微困難的情況。爲此,即使簡單的顏色閾值也可以工作。 –

+0

首先,我使用過濾器,例如sobel,laplacian,來應用它,但是使用RGB空間,HSV空間存在太多噪音。 – BOSS

回答

0

如果您有圖像處理工具箱,你可以做如下:

低於初步估計的代碼與功能graythresh門檻,閾值的形象和充滿與imfill功能孔。假設I是包含您的RGB圖像細胞:

for k=1:length(I) 
    t=graythresh(rgb2gray(I{k})); 
    BW{k}=imfill(~im2bw(I{k}, t), 'holes'); 
    subplot(length(I),1,k), imshow(BW{k}); 
end 

enter image description here

+0

我包含3張圖片,k是數字 – BOSS

+0

感謝你的想法,但我認爲你的結果包含了我不需要的影子 – BOSS

+0

@BOSS是的,'I'是一個3格的單元格,因此'k '循環從1到3.循環對你來說不是必須的,它只是爲了自動執行這個過程。 –