matlab数字图像处理膨胀和腐蚀.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Matlab的腐蚀和膨胀的边缘检测
一、实验目的:
掌握运用Matlab软件对灰度与二值图像的膨胀与腐蚀的处理方法。
二、实验环境(软件条件):
Windws2000/XP MATLAB 7.x
三、实验内容:
1、图像膨胀的Matlab实现
①实验原理:
膨胀:给图像中的对象边界添加像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。在二进制图像中,如果任何像素值为1,那么对应的输出像素值为1。
可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate 还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。
②实验步骤:
A、首先创建一个包含矩形对象的二值图像矩阵。
R=zeros(9,10);
R(4:6,4:7) =1
R =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 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 0
0 0 0 0 0 0 0 0 0 0
B、使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。
C=strel('square',3)
C =
Flat STREL object containing 9 neighbors. Neighborhood:
1 1 1
1 1 1
1 1 1
C、将图像R和结构元素C传递给imdilate函数。R1=imdilate(R,C)
R1 =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 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
D、显示结果:
imshow(R,'notruesize')
imshow(R1,'notruesize')
③实验结果:
膨胀前后效果图:
2、图像腐蚀的Matlab实现
①实验原理:
腐蚀:删除对象边界某些像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素的最小值。在二进制图像中,如果任何一个像素值为0,那么对应的输出像素值为0。
可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。
②实验内容及步骤:
A、读取图像cameraman.tif (该图像是Matlab当前目录下自带的图片)
R=imread('cameraman.tif');
B、创建一个任意形状的结构元素对象
C=strel('arbitrary',eye(5));
C、以图像R和结构元素C为参数调用imerode函数进行腐蚀操作。
R1=imerode(R,C);
D、显示操作结果
imshow(R);
figure,imshow(C);
③实验结果:
图像cameraman.tif 腐蚀前后的效果对比:
3、膨胀和腐蚀联合操作
①实验内容及步骤:
A、创建结构元素:
clear;close all
C= strel('rectangle',[40 30]);
%结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.
B、使用结构元素腐蚀图像:
%将会删除所有直线,但也会缩减矩形
R=imread('circbw.tif');
R1=imerode(R,C);
imshow(R1);
figure,imshow(R);
C、恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.
R2=imdilate(R1,C);
figure,imshow(R2);
②实验结果:
最终效果如下图:
原始图像腐蚀后的图像膨胀后的图像
4、边缘检测
①实验原理:
对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。在一副图像中,如果图像某个像素满足以下两个条件:
1.该像素状态为ON;
2.该像素邻域中有一个或多个像素状态为OFF。
则认为该像素为边缘像素。
Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。
②实验内容及步骤:
以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。
clear;close all
R=imread('circbw.tif');
R1=bwperim(R);