------------------------------------------------------------------
------------------------------------------------------------------
------------------------------------------------------------------
前言
这次作业多少有点让人头疼,找边界执行的操作相对来说比较多,和课上学的有点脱钩。。。。
诶。。。。。 这周状态不太好,垃圾事有点多,脑瓜子懵,代码写得属实烂,别介意哈,将就着看吧。 另外这算法也不太行,运算太慢了。。。。。。
诶嘿嘿, 不过也算是勉勉强强完成了,提供两种方法吧,大同小异
------------------------------------------------------------------
------------------------------------------------------------------
分界线
话不多说,上代码
------------------------------------------------------------------
------------------------------------------------------------------
第一种方法 (想了半天,脑子一抽搞出来了)
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('原图像区域边缘分割');