天天看點

matlab與數字圖像處理--閉操作篩選圖像中面積大于一定值的區域(2)

 參考上一篇:https://mp.csdn.net/console/editor/html/105642895

 這次采用matlab的庫函數來進行膨脹和腐蝕,然後查找連通區域,對于每個連通區域,用紅色方框框選其最大的範圍。

膨脹:imdilate();

腐蝕:imerode();

查找連通區域:bwconncomp();

不多說,直接上代碼

%通過matlab函數實作大面積圖形查找
img=imread('ces0.bmp');

%關于img:img圖像中進行了二值化,非零值(白色1),零值(黑色0)
%其中圖像元素為非零值(白色1),圖像背景為零值(黑色0)
%對一個圖形進行二值化,根據各個像素對應的性質去進行
%二值化的條件具體根據需要而定(一般把感興趣的區域标定為1,背景标定為0)
img=im2bw(img,10/255);
sc=[0,1,0;1,1,1;0,1,0]; %用于膨脹的結構元素

imgo=imdilate(img,sc);%圖像img被結構元素sc膨脹

figure
imshow(imgo,[]);

sc2=ones(20,20);%用于腐蝕的結構元素
imgo2=imerode(imgo,sc2);%圖形imgo被結構元素sc2腐蝕



%查找二維圖形中的連通分量
CC=bwconncomp(imgo2);
RECT=zeros(CC.NumObjects,4); %存放所有的連通分量所在範圍--矩形範圍
for i=1:CC.NumObjects
    left=CC.ImageSize(2);
    up=CC.ImageSize(1);
    right=0;
    down=0;
    

    for j=1:length(CC.PixelIdxList{1,i})
        index=CC.PixelIdxList{1,i}(j);
        col=ceil(index/CC.ImageSize(1));
        row=mod(index,CC.ImageSize(1));
        if row>down
            down=row;
        end
        if row<up
            up=row;
        end
        if col>right
            right=col;
        end
        if col<left
            left=col;
        end

        index=CC.PixelIdxList{1,i}(j);
    end
    
    RECT(i,:)=[left,up,right,down];
    
end

figure
imshow(imgo2,[]);
hold on

for i=1:CC.NumObjects
    px=RECT(i,1);
    py=RECT(i,2);
    width=RECT(i,3)-RECT(i,1);
    height=RECT(i,4)-RECT(i,2);
    rectangle('Position',[px,py,width,height],'LineWidth',2,'EdgeColor','r');
end
           

下面是處理前的圖像:

matlab與數字圖像處理--閉操作篩選圖像中面積大于一定值的區域(2)

 下面是處理後被标記的區域,注意對應其在原圖的位置:

matlab與數字圖像處理--閉操作篩選圖像中面積大于一定值的區域(2)

繼續閱讀