matlab图像处理 原图如下 希望能去掉左下角白色小块
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/28 01:15:59
matlab图像处理 原图如下 希望能去掉左下角白色小块
原图如下 希望去除左下角小块 小块与大块8邻域连通 用imfill跟bwareaopen苦试无果
![](http://img.wesiedu.com/upload/a/dc/adcc87b49476441bbf6627b3b3cb2f30.jpg)
原图如下 希望去除左下角小块 小块与大块8邻域连通 用imfill跟bwareaopen苦试无果
![](http://img.wesiedu.com/upload/a/dc/adcc87b49476441bbf6627b3b3cb2f30.jpg)
用4连通不就可以了吗
你要的腰形区域面积肯定是最大的
而你要去掉的那一个区域是面积第二大的,找出来去掉它就可以了
如果你原来的图像是个二值图BW
[L num]=bwlabel(BW,4); %4连通标记
s=zeros(num,1);
for ii=1:num
s(ii)=sum(sum(L==ii)); %计算每个连通区域的面积
end
[ss IX]=sort(s,'descend'); %面积从大到小排序
BWout=xor(BW,L==IX(2)); %从原来图像中扣除面积大小排第二的区域
你会发现除了左下那快比较大的区域外,还有很多小的区域
如果你只要保留面积最大的腰形区域,最后两句改成这样就可以了
[ms ind]=max(s);
BWout=(L==ind);
当然,只保留最大快,其实用bwareaopen可以轻松实现
BWout(BW,s,4); %s对应一个面积值,小于最大的那块面积,大于其他小块面积
再问: 1、真的太谢谢了!结果能出来了,还是有一个不懂的地方,最后的“BWout(BW,s,4); %s对应一个面积值,小于最大的那块面积,大于其他小块面积”这一个是做什么用的?到BWout=(L==ind);这一句不是已经可以解决问题了吗? 2、关于bwareaopen这个方法实现的能再给我讲一下吗?真心求教!
再答: 写错了是BWout=bwareaopen(BW,s,4) 只要一句就好,前面的都不要了 返回的BWout会把BW中4连通区域面积小于s的区域都抹掉 后面的4就是四连通,不写的时候默认8连通 当然,你的先知道你要保留的区域面积有多大,你要去掉的区域面积有多大 让s设在两者之间,就会保留大面积,去掉小面积 不过只要是小于s的都会被去掉
再问: 非常给力!谢谢你!
你要的腰形区域面积肯定是最大的
而你要去掉的那一个区域是面积第二大的,找出来去掉它就可以了
如果你原来的图像是个二值图BW
[L num]=bwlabel(BW,4); %4连通标记
s=zeros(num,1);
for ii=1:num
s(ii)=sum(sum(L==ii)); %计算每个连通区域的面积
end
[ss IX]=sort(s,'descend'); %面积从大到小排序
BWout=xor(BW,L==IX(2)); %从原来图像中扣除面积大小排第二的区域
你会发现除了左下那快比较大的区域外,还有很多小的区域
如果你只要保留面积最大的腰形区域,最后两句改成这样就可以了
[ms ind]=max(s);
BWout=(L==ind);
当然,只保留最大快,其实用bwareaopen可以轻松实现
BWout(BW,s,4); %s对应一个面积值,小于最大的那块面积,大于其他小块面积
再问: 1、真的太谢谢了!结果能出来了,还是有一个不懂的地方,最后的“BWout(BW,s,4); %s对应一个面积值,小于最大的那块面积,大于其他小块面积”这一个是做什么用的?到BWout=(L==ind);这一句不是已经可以解决问题了吗? 2、关于bwareaopen这个方法实现的能再给我讲一下吗?真心求教!
再答: 写错了是BWout=bwareaopen(BW,s,4) 只要一句就好,前面的都不要了 返回的BWout会把BW中4连通区域面积小于s的区域都抹掉 后面的4就是四连通,不写的时候默认8连通 当然,你的先知道你要保留的区域面积有多大,你要去掉的区域面积有多大 让s设在两者之间,就会保留大面积,去掉小面积 不过只要是小于s的都会被去掉
再问: 非常给力!谢谢你!