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 rowright
            right=col;
        end
        if col

下面是处理前的图像:

 

 下面是处理后被标记的区域,注意对应其在原图的位置:

 

你可能感兴趣的:(图像处理,图形形态学)