实验四形态学操作与空间变换
一、实验目的
1.了解膨胀和腐蚀的Matlab实现方法
2.掌握图像膨胀、腐蚀、开启、闭合等形态学操作函数的使用方法
3.了解二进制图像的形态学应用
4.了解空间变换函数及图像匹配方法
二、实验内容
1.图像膨胀
A)对包含矩形对象的二进制图像进行膨胀操作。
BW=zeros(9,10);
BW(4:6,4:7)=1;
imshow(BW,'notruesize')
se=strel('square',3);
BW2=imdilate(BW,se);
figure,imshow(BW2,'notruesize')
B)改变上述结构元素类型(如:line, diamond, disk等),重新进行膨胀
操作。
Line: BW=zeros(9,10);
BW(4:6,4:7)=1;
imshow(BW,'notruesize')
se=strel('line',3,3);
BW2=imdilate(BW,se);
figure,imshow(BW2,'notruesize')
C)对图像‘text.png’进行上述操作,观察不同结构元素膨胀的效果。
BW3=imread('text.png ');
imshow(BW3)
se2=strel('line',11,90); %线型结构元素
BW4=imdilate(BW3,se2);
figure,imshow(BW4)
2.图像腐蚀
A)对图像‘circbw.tif’进行腐蚀操作。
BW1=imread('circbw.tif');
se=strel('arbitrary',eye(5));
BW2=imerode(BW1,se);
imshow(BW1)
figure,imshow(BW2)
B)对图像‘text.tif’进行腐蚀操作。
BW=imread('text.tif');
se=strel('line',11,90);
BW2=imerode(BW3,se);
imshow(BW)
figure,imshow(BW2)
3.膨胀与腐蚀的综合使用
A)从原始图像‘circbw.tif’中删除电流线,仅保留芯片对象。
方法一:先腐蚀(imerode),再膨胀(imdilate);
BW1=imread('circbw.tif');
imshow(BW1)
se=strel('rectangle',[40 30]); %选择适当大小的矩形结构元素BW2=imerode(BW1,se); %先腐蚀,删除较细的直线
figure,imshow(BW2)
BW3=imdilate(BW2,se); %再膨胀,恢复矩形的大小
figure,imshow(BW3)
方法二:使用形态开启函数(imopen)。
BW1=imread('circbw.tif');
imshow(BW1)
se=strel('rectangle',[30,20]);
BW2=imopen(BW1,se); %开启操作
figure,imshow(BW2)
B)改变结构元素的大小,重新进行开启操作,观察处理结果。se=strel(‘rectangle’,[20 10]);
se=strel(‘rectangle’,[50 40]);
C)置结构元素大小为[4 3],同时观察形态开启(imopen)与闭合(imclose)
的效果,总结形态开启与闭合在图像处理中的作用。
I=imread('circbw.tif');
imshow(I)
se=strel('rectangle',[4 3]);
I1=imopen(I,se); %开启操作
I2=imclose(I,se); %闭合操作
figure,imshow(I1)
figure,imshow(I2)
4.*高帽与低帽变换
A)读入图像‘pearlite.tif’,分别显示其高帽变换与低帽变换结果,并
与原图像比较。(设se=strel('disk',5);)。
I=imread('pearlite.tif');
subplot(221),imshow(I)
se=strel('disk',5);
J=imtophat(I,se);
subplot(222),imshow(J)
K=imbothat(I,se);
subplot(223),imshow(K)
L=imsubtract(imadd(J,I),K);
subplot(224),imshow(L)
B)要求显示在一个窗口中。
5.图像极值的处理方法
A)对于下图所示的图像矩阵A,利用函数imregionalmax寻找其局部极大
值
A=[10 10 10 10 10 10 10 10 10 10;
10 13 13 13 10 10 11 10 11 10;
10 13 13 13 10 10 10 11 10 10;
10 13 13 13 10 10 11 10 11 10;
10 10 10 10 10 10 10 10 10 10;
10 11 10 10 10 18 18 18 10 10;
10 10 10 11 10 18 18 18 10 10;
10 10 11 10 10 18 18 18 10 10;
10 11 10 11 10 10 10 10 10 10;
10 10 10 10 10 10 11 10 10 10];
B=imregionalmax(A)
B =
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 0 1 0
0 1 1 1 0 0 0 1 0 0
0 1 1 1 0 0 1 0 1 0
0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 1 1 0 0
0 0 0 1 0 1 1 1 0 0
0 0 1 0 0 1 1 1 0 0
0 1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
B)利用函数imextendedmax寻找像素值大于其邻域像素值2个单位的局部
极大值。
C=imextendedmax(A,2)
C =
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
6.*创建一幅图像,求其距离矩阵。
bw=zeros(5,5);
bw(2,2)=1;bw(4,4)=1;
D=bwdist(bw)
center1=-10;
center2=-center1;
dist=sqrt(2*(2*center1)^2);
radius=dist/2*1.4;
lims=[floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y]=meshgrid(lims(1):lims(2));
bw1=sqrt((x-center1).^2+(y-center2).^2)<=radius;
bw2=sqrt((x-center2).^2+(y-center2).^2)<=radius;
bw1=sqrt((x-center1).^2+(y-center1).^2)<=radius;
bw=bw1|bw2;
imshow(bw)
D=bwdist(bw);
figure,imshow(D,[ ])
D1=bwdist(~bw);
figure,imshow(D1,[ ])
D =
1.4142 1.0000 1.4142
2.2361
3.1623
1.0000 0 1.0000
2.0000 2.2361
1.4142 1.0000 1.4142 1.0000 1.4142
2.2361 2.0000 1.0000 0 1.0000
3.1623 2.2361 1.4142 1.0000 1.4142
7.*使用伪彩色显示标记矩阵。
BW=[0 0 0 0 0 0 0 0;
0 1 1 0 0 1 1 1;
0 1 1 0 0 0 1 1;
0 1 1 0 0 0 0 0;
0 0 0 1 1 0 0 0;
0 0 0 1 1 0 0 0;
0 0 0 1 1 0 0 0;
0 0 0 0 0 0 0 0]
X=bwlabel(BW,4)
RGB=label2rgb(X,@jet,'k');
imshow(RGB,'notruesize')
8.利用选择控制点实现图像匹配。
Matlab图像匹配的步骤:
将标准图像和待匹配图像读入Matlab;指定图像中的控制点对并保存;使用互相关性进一步协调控制点对(可选);制定所需变换类型并根据控制点对推断变换参数;变换未匹配的图像。
%读入待匹配图像和标准图像
unregistered = imread('westconcordaerial.png');
imshow(unregistered)
orthophoto = imread('westconcordorthophoto.png');
figure,imshow(orthophoto)
%选择图像中对应的控制点
cpselect(unregistered(:,:,1),orthophoto)
%保存控制点对
input_points
base_points
%使用相关性进一步协调控制点对
input_points_corr=cpcorr(input_points,base_points,unregistered( :,:,1),orthophoto);
input_points_corr
%根据控制点对推断空间变换参数
mytform=cp2tform(input_points,base_points,'projective');
%变换未匹配的图像
registered=imtransform(unregistered,mytform);
figure,imshow(registered)
要求做前5个,6-8为选择实验。