实验一:设计结构元素,编程实现以下过程:
长方形目标物A,内部有噪声导致的空洞,周围有噪声块。
处理效果:目标本身除了4个角的直角变为圆角外没有变化。
实验二:确定目标物位置,击中击不中变换:
1.1腐蚀和膨胀
方法一:采用四邻域的单位结构元素
B=[0 1 0
1 1 1
0 1 0];
利用imdilate()函数对图像不断地进行迭代膨胀,再利用imerode()函数,对图像进行迭代膨胀,最终得到处理后地图像如下图所示:
方法二:采用matlab中已有的结构元素函数strel()对图像进行膨胀和腐蚀。利用正方形square对图像进行膨胀操作,再用圆形disk对图像进行腐蚀操作,最终处理结果如下图所示:
通过对比可以发现两种方法均得到实验结果,但方法二腐蚀后的图形两边阴影较为明显,应该是参数选择不够准确的原因。
附录代码如下:
clc;
close all;
A1=imread('zaosheng.png');
%膨胀的结构元素
B=[0 1 0
1 1 1
0 1 0];
subplot(1,3,1);
imshow(A1),title('原图','fontsize',16);
A2=imdilate(A1,B);%图像A1被结构元素B膨胀
A3=imdilate(A2,B);
A4=imdilate(A3,B);
A5=imdilate(A4,B);
A6=imdilate(A5,B);
A7=imdilate(A6,B);
A8=imdilate(A7,B);
subplot(1,3,2);
imshow(A8),title('膨胀后的图','fontsize',16);
%%
%腐蚀的结构元素
C=[ 0 1 0
1 1 1
0 1 0];
A9=imerode(A8,C); %腐蚀
A10=imerode(A9,C);
A11=imerode(A10,C);
A12=imerode(A11,C);
A13=imerode(A12,C);
A14=imerode(A13,C);
A15=imerode(A14,C);
A16=imerode(A15,C);
A17=imerode(A16,C);
A18=imerode(A17,C);
A19=imerode(A18,C);
A20=imerode(A19,C);
subplot(1,3,3);
imshow(A20),title('腐蚀后的图','fontsize',16);
%%
f = imread('zaosheng.png');
se = strel('square', 12);
g = imdilate(f, se);
se = strel('disk', 20);
g1 = imerode(g, se);
figure;
subplot(1,3,1), imshow(f);title('原始图像','fontsize',16);
subplot(1,3,2), imshow(g);title('用正方形膨胀','fontsize',16);
subplot(1,3,3), imshow(g1);title('用圆形腐蚀','fontsize',16);
实验二:确定目标物位置,击中击不中变换:
根据击中击不中变换的原理,可以得到已知图像在原图中的位置的中点。
算法步骤:
1、使用已知图像对原图进行腐蚀操作,得到图像A1。
2、对图像的四周加上边框,对原图的补集进行腐蚀操作,得到图像A2。
3、对A1和A2求交集,得到图像A3即为击中击不中变换处理后的图像。
2.11、使用for循环构造初始图像,如下图所示:
2.2 2、对初始图像取反:
2.3 构造已知图像:
2.4 4、使用已知图像对原图进行腐蚀操作:
2.5 5、对图像的四周加上边框,对原图的补集进行腐蚀操作:
2.6 对A1和A2求交集,得到图像A3即为击中击不中变换处理后的图像:
由图像结果可以清晰的看到,右下角出现一个白色的点,即为已知图像在原图像中的中心点的位置。
附录代码如下:
clear;
I=zeros(500,500);
for i=50:250
for j=50:150
I(i,j)=1;
end
end
for i=350:450
for j=350:450
I(i,j)=1;
end
end
for i=60:120
for j=300:360
I(i,j)=1;
end
end
imshow(I),title('原图');%构造原图
figure;
imshow(~I),title('补集');%构造原图
H=zeros(100,100);
for i=1:100
for j=1:100
H(i,j)=1;
end
end
figure,imshow(H);%构造m结构元素
M=zeros(104,104);
for i=1:104
for j=1:104
M(i,j)=1;
end
end
for i=2:102
for j=2:102
M(i,j)=0;
end
end
figure,imshow(M);
x1=imerode(I,H);
figure,imshow(x1);%原图被H结构元素腐蚀后
x2=imerode(~I,M);
figure,imshow(x2);%原图补集被M结构元素腐蚀后
x3=x1.*x2;
figure,imshow(x3);%求两张腐蚀后图像的交集