W4-数学形态学找区域边界

------------------------------------------------------------------
------------------------------------------------------------------
------------------------------------------------------------------

前言

这次作业多少有点让人头疼,找边界执行的操作相对来说比较多,和课上学的有点脱钩。。。。

诶。。。。。 这周状态不太好,垃圾事有点多,脑瓜子懵,代码写得属实烂,别介意哈,将就着看吧。 另外这算法也不太行,运算太慢了。。。。。。

诶嘿嘿, 不过也算是勉勉强强完成了,提供两种方法吧,大同小异

------------------------------------------------------------------
------------------------------------------------------------------

分界线

话不多说,上代码

------------------------------------------------------------------
------------------------------------------------------------------

第一种方法 (想了半天,脑子一抽搞出来了)

src =imread('F:/image/round.png');
src=rgb2gray(src);
D=60;
TeBall=zeros(D,D);
for i=0:D
    for j=0:D
        if((i-D/2)^2+(j-D/2)^2 <= (D/2)^2)
            TeBall(i+1,j+1) = 1;
        end
    end
end

%图像膨胀
figure;
subplot(2,4,1);
imshow(src);
title('原图像');
imag1=imdilate(src,TeBall);
subplot(2,4,2);
imshow(imag1);
title('圆形元素膨胀图像');

%图像腐蚀
imag2=imerode(imag1,TeBall);
subplot(2,4,3);
imshow(imag2);
title('圆形元素腐蚀图像');

%二值化
imag3=imbinarize(imag2);
imag4=rescale(imag3);
subplot(2,4,4);
imshow(imag4);
title('二值图像')


D=150;
TeBall=zeros(D,D);
for i=0:D
    for j=0:D
        if((i-D/2)^2+(j-D/2)^2 <= (D/2)^2)
            TeBall(i+1,j+1) = 1;
        end
    end
end

%腐蚀图像
imag5=imerode(imag4,TeBall);
imag5=rescale(imag5);
imag6=imdilate(imag5,TeBall);

subplot(2,4,5);
imshow(imag5);
title('圆形区域腐蚀图像');
subplot(2,4,6);
imshow(imag6);
title('圆形区域膨胀图像');

%找边缘
imag7=edge(imag6,'Roberts');
edgdilate=uint8(imag7*255);
edgdilate=imdilate(edgdilate,ones(3,3));
subplot(2,4,7);
imshow(edgdilate);
title('图像边缘');
imag8=uint8(edgdilate+src);
subplot(2,4,8);
imshow(imag8);
title('原图像区域边缘分割');

在这里插入图片描述

方法二

(部分灵感来源于某博主手动@出来 @LPY 069)

clear;
src0 = imread('F:/image/round.png');
src = rgb2gray(src0);
figure;
subplot(3,3,1);
imshow(src);
title('原图像');

ent = entropyfilt(src);
E = mat2gray(ent);
E=rescale(ent);
subplot(3,3,2);
imshow(E);
title('纹理图像');

bin1 = imbinarize(E);
bin1=rescale(bin1);
subplot(3,3,3);
imshow(bin1);
title('纹理图像二值化');

bin2=bwareaopen(1-bin1,2300,8);
subplot(3,3,4);
bin2=rescale(bin2);
imshow(bin2);
title('提取纹理');

D=30;
TeBall=zeros(D,D);
for i=0:D
    for j=0:D
        if((i-D/2)^2+(j-D/2)^2 <= (D/2)^2)
            TeBall(i+1,j+1) = 1;
        end
    end
end

closeb=imdilate(bin2,TeBall);
closeb=imerode(closeb,TeBall);

subplot(3,3,5);
imshow(closeb);
title('闭操作图像')

image1=1-closeb;
subplot(3,3,6);
imshow(image1);
title('图像取反');

D=100;
TeBall=zeros(D,D);
for i=0:D
    for j=0:D
        if((i-D/2)^2+(j-D/2)^2 <= (D/2)^2)
            TeBall(i+1,j+1) = 1;
        end
    end
end


subplot(3,3,7);
image2=imdilate(image1,TeBall);
image2=imerode(image2,TeBall);
imshow(image2);
title('再次闭操作');

imag7=edge(image2,'Roberts');
edgdilate=uint8(imag7*255);
edgdilate=imdilate(edgdilate,ones(3,3));
subplot(3,3,8);
imshow(edgdilate);
title('区域边缘');
imag8=uint8(edgdilate+src);
subplot(3,3,9);
imshow(imag8);
title('原图像区域边缘分割');

在这里插入图片描述

附上灵感来源链接:https://blog.csdn.net/LPYchengxuyuan/article/details/121308506?spm=1001.2014.3001.5501

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值