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

下面是处理前的图像:

 

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

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值