数字图像处理实验报告
姓名:________学号:_________日期:___________
实验要求
一、
1.通过本次的实验理解图像的形态学变化原理。
2.能够掌握图像的腐蚀,膨胀,开闭运算的基本步骤
3..能用 MATLAB 实现二值数字图像的腐蚀,膨胀,开闭运算,并且能够对实验结果进行比
较,分析各种运算的特点。
二、
实验代码
第一组:图像的腐蚀程序代码
clear;clc
I1=imread('c:\lenna.jpg');
I=graythresh(I1);
I1=im2bw(I1,I);
figure,imshow(I1);title('原图图像');
I1=double(I1);
[m,n]=size(I1);
s=[1 1 1;1 1 1;1 1 1];
mm=zeros([m,n]);
I2=size(mm);
for i=2:m-1
for j=2:n-1
if(I1(i-1:i+1,j-1:j+1)==s)
I2(i,j)=1;
I2(i,j)=0;
else
end
end
end
I2=255.*I2;
figure;imshow(uint8(I2));title('腐蚀后的图像');
执行的结果如下所示:
原 图 图 像
腐 蚀 后 的 图 像
第二组:图像的膨胀程序代码
clear;clc
I1=imread('c:\lenna.jpg');
I=graythresh(I1);
I1=im2bw(I1,I);
figure,imshow(I1);title('原图图像');
I1=double(I1);
[m,n]=size(I1);
s=[1 1 1;1 1 1;1 1 1];
mm=zeros([m,n]);
I2=size(mm);
for i=2:m-2
for j=2:n-2
I2(i,j)=1;
I2(i,j)=0;
else
end
end
%if(I1(i-1,j)==s(1,2)||I1(i,j+1)==s(2,3)||I1(i,j-1)==s(2,1)||I1(i
+1,j)==s(3,2))
if(I1(i-1,j)==s(1,2)||I1(i,j+1)==s(2,3)||I1(i,j-1)==s(2,1)||I1(i+
1,j)==s(3,2)||I1(i-1,j-1)==s(1,1)||I1(i-1,j+1)==s(1,3)||I1(i+1,j-
1)==s(3,1)||I1(i+1,j+1)==s(3,3))
end
I2=255.*I2;
figure;imshow(uint8(I2));title('膨胀后的图像');
执行的结果如下所示:
原 图 图 像
膨 胀 后 的 图 像
第三组:对图像进行开运算程序代码
clear;clc
I1=imread('c:\lenna.jpg');
I=graythresh(I1);
I1=im2bw(I1,I);
figure,imshow(I1);title('原图图像');
%先对图像进行腐蚀运算
I1=double(I1);
[m,n]=size(I1);
s=[1 1 1;1 1 1;1 1 1];
mm=zeros([m,n]);
I2=size(mm);
for i=2:m-1
for j=2:n-1
if(I1(i-1:i+1,j-1:j+1)==s)
end
%%对图像进行膨胀运算
II1=zeros(m,n);
II1=I2;
for i=2:m-2
for j=2:n-2
else
I2(i,j)=1;
I2(i,j)=0;
end
end
%if(I1(i-1,j)==s(1,2)||I1(i,j+1)==s(2,3)||I1(i,j-1)==s(2,1)||I1(i
II1(i,j)=1;
II1(i,j)=0;
else
end
end
+1,j)==s(3,2))
if(I2(i-1,j)==s(1,2)||I2(i,j+1)==s(2,3)||I2(i,j-1)==s(2,1)||I2(i+
1,j)==s(3,2)||I2(i-1,j-1)==s(1,1)||I2(i-1,j+1)==s(1,3)||I2(i+1,j-
1)==s(3,1)||I2(i+1,j+1)==s(3,3))
end
II1=255.*II1;
figure;imshow(uint8(II1));title('开运算后的图像');
执行的效果:
原 图 图 像
开 运 算 后 的 图 像
第四组:对图像进行闭运算程序代码
clear;clc
I1=imread('c:\lenna.jpg');
I=graythresh(I1);
I1=im2bw(I1,I);
figure,imshow(I1);title('原图图像');
%先对图像进行膨胀运算
I1=double(I1);
[m,n]=size(I1);
s=[1 1 1;1 1 1;1 1 1];
mm=zeros([m,n]);
for i=2:m-2
for j=3:n-2
%if(I1(i-1,j)==s(1,2)||I1(i,j+1)==s(2,3)||I1(i,j-1)==s(2,1)||I1(i
+1,j)==s(3,2))
if(I1(i-1,j)==s(1,2)||I1(i,j+1)==s(2,3)||I1(i,j-1)==s(2,1)||I1(i+
1,j)==s(3,2)||I1(i-1,j-1)==s(1,1)||I1(i-1,j+1)==s(1,3)||I1(i+1,j-
1)==s(3,1)||I1(i+1,j+1)==s(3,3))
III1(i,j)=1;
III1(i,j)=0;
else
end
end
end
%再对图像进行腐蚀运算
[m,n]=size(III1);
I2=zeros(m,n);
I2=III1;
for i=2:m-1
for j=2:n-1
I2(i,j)=1;
I2(i,j)=0;
if(III1(i-1:i+1,j-1:j+1)==s)
else
end
end
end
I2=255.*I2;
figure;imshow(uint8(I2));title('闭运算后的图像');
执行的效果:
原 图 图 像
闭 运 算 后 的 图 像
一、
实验结果截图并做分析
第一组:对图像进行了腐蚀处理,从执行的结果上来看,对图像进行腐蚀后图像变少了,
好像图像的外层被剥去了一样,对于图像的边缘区域,我们可以看的更加清晰,可以推想到
利用对图像的腐蚀操作,如果我们可以得到图片的边缘。在这题中我是这样对图像腐蚀操作:
用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素
与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。
第二组:对二值图像进行膨胀处理,由得到的结果我们可以看出图像进行膨胀操作以后,
图像的显示的图像变大了,边缘变得平滑了,膨胀是将与物体接触的部分的背景合并到该物
体中,使物体的外边界起到扩张的作用。在这题中我是这样对图像膨胀操作:用一个结构元
素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像
素做“与”操作,如果都为0,则该像素为0,否则为1。
第三组:对图像进行开运算处理,即先对图像进行腐蚀运算再做膨胀运算。从执行的效
果来看,开算可以使图像的边界的离散点或者尖峰处起到抑制作用,可以消除物体的细小部
分,平滑了图像的部分,但是物体的面积并没有改变。
第四组:对图像进行闭运算处理,即先对图像进行膨胀运算再做腐蚀运算。从执行的效
果来看,开闭运算虽然使用了相同的算子,但是的效果并不同。闭运算可以用来填充物体内
的细小空洞部分,连接邻近物体,平滑物体的边界,不改变其边界的同时不改变物体的面积。