logo资料库

MATLAB图像腐蚀和膨胀.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
数字图像处理实验报告 姓名:________学号:_________日期:___________ 实验要求 一、 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。 第三组:对图像进行开运算处理,即先对图像进行腐蚀运算再做膨胀运算。从执行的效 果来看,开算可以使图像的边界的离散点或者尖峰处起到抑制作用,可以消除物体的细小部 分,平滑了图像的部分,但是物体的面积并没有改变。 第四组:对图像进行闭运算处理,即先对图像进行膨胀运算再做腐蚀运算。从执行的效 果来看,开闭运算虽然使用了相同的算子,但是的效果并不同。闭运算可以用来填充物体内 的细小空洞部分,连接邻近物体,平滑物体的边界,不改变其边界的同时不改变物体的面积。
分享到:
收藏