Matlab基于腐蚀和膨胀的边缘检测Word文档格式.docx
- 文档编号:3830376
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:13
- 大小:233.95KB
Matlab基于腐蚀和膨胀的边缘检测Word文档格式.docx
《Matlab基于腐蚀和膨胀的边缘检测Word文档格式.docx》由会员分享,可在线阅读,更多相关《Matlab基于腐蚀和膨胀的边缘检测Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
对于灰度图像,unit8类型的最小值也为255。
膨胀
超出图像边界的像素值定义为该数据类型允许的最小值,对于二进制图像,这些像素值设置为0;
对于灰度图像,unit8类型的最小值也为0。
通过对膨胀操作使用最小值填充和对腐蚀操作使用最大值填充,可以有效地消除边界效应(输出图像靠近边界处的区域与图像其它部分不连续)。
否则,如果腐蚀操作使用最小值进行填充,则进行腐蚀操作后,输出图像会围绕着一个黑色边框。
结构元素:
膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。
二维平面结构元素由一个数值为0或1的矩阵组成。
结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。
三维或非平面的结构元素使用0,1定义结构元素在x和y平面上的范围,第三维z定义高度。
(1)任意大小和维数的结构元素B原点坐标的获取:
>
origin=floor((size(nhood)+1)/2)
其中nhood是指结构元素定义的邻域(STREL对象的属性nhood)
(2)创建结构元素:
(strel函数来创建任意大小和形状的STREL对象,支持如线形line、钻石形diamond、圆盘形disk、球形ball等许多种常用的形状)
se=strel('
diamond'
3)
se=
FlatSTRELobjectcontaining25neighbors.
Decomposition:
3STRELobjectscontainingatotalof13neighbors
Neighborhood:
0001000
0011100
0111110
1111111
%se返回了结构元素的有关信息。
(3)结构元素的分解
为了提高执行效率,stel函数可能会将结构元素拆为较小的块,这种技术称为结构元素的分解。
例如要对一个11×
11的正方形结构元素进行膨胀操作,可以首先对1×
11的结构元素进行膨胀操作,然后再对11×
1的结构元素进行膨胀,通过这样的分解,在理论上可以使执行速度提高6.5倍。
对圆盘形和球形结构元素进行分解,其结构是近似的,而对于其他形状的分解,得到的分解结果是精确的。
可以调用getsequence函数来查看分解所得的结构元素序列。
seq=getsequence(sel)
seq=
4x1arrayofSTRELobjects
seq
(1)
ans=
FlatSTRELobjectcontaining5neighbors.
010
111
seq
(2)
FlatSTRELobjectcontaining4neighbors.
101
seq(3)
00100
00000
10001
seq(4)
1.图像膨胀的Matlab实现:
可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。
结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。
此外,imdilate还可以接受两个可选参数:
PADOPT(padopt)——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。
举个实例如下:
步骤1,首先创建一个包含矩形对象的二值图像矩阵。
BW=zeros(9,10);
BW(4:
6,4:
7)=1
BW=
0000000000
0001111000
步骤2,使用一个3×
3的正方形结构元素对象对创建的图像进行膨胀。
SE=strel('
square'
3)
SE=
FlatSTRELobjectcontaining9neighbors.
步骤3,将图像BW和结构元素SE传递给imdilate函数。
BW2=imdilate(BW,SE)
BW2=
0011111100
步骤4,显示结果。
imshow(BW,'
notruesize'
)
imshow(BW2,'
膨胀前后效果图:
2.图像腐蚀的Matlab实现:
可以使用imerode函数进行图像腐蚀。
imerode函数需要两个基本输入参数:
待处理的输入图像以及结构元素对象。
此外,imerode函数还可以接受3个可选参数:
M——指定原始图像的行数。
以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。
步骤1,读取图像cameraman.tif(该图像是Matlab当前目录下自带的图片)
BW1=imread('
cameraman.tif'
);
步骤2,创建一个任意形状的结构元素对象
arbitrary'
eye(5));
步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。
BW2=imerode(BW1,SE);
步骤4,显示操作结果
imshow(BW1)
figure,imshow(BW2)
图像cameraman.tif腐蚀前后的效果对比:
3.膨胀和腐蚀联合操作(图像开运算操作):
下面以图像开启为例,说明如何综合使用imdilate和imerode这两个函数,实现图像处理操作。
步骤1,创建结构元素:
clear;
closeall
SE=strel('
rectangle'
[4030]);
%注意:
结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.
步骤2,使用结构元素腐蚀图像:
%将会删除所有直线,但也会缩减矩形
circbw.tif'
imshow(BW2)
figure,imshow(BW1)
步骤3,恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.
BW3=imdilate(BW2,SE);
figure,imshow(BW3)
最终效果如下图:
a.原始图像->
b.腐蚀后的图像->
c.膨胀后的图像
4.基于膨胀与腐蚀的形态操作——骨架化和边缘检测
(1)骨架化:
某些应用中,针对一副图像,希望对图像中所有对象简化为线条,但不修改图像的基本结构,保留图像基本轮廓,这个过程就是所谓的骨架化。
提供了专门的函数bwmorph,可以实现骨架化操作。
BW2=bwmorph(BW1,'
skel'
Inf);
(2)边缘检测
对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。
在一副图像中,如果图像某个像素满足以下两个条件:
1.该像素状态为ON,
2.该像素邻域中有一个或多个像素状态为OFF。
则认为该像素为边缘像素。
Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。
以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。
BW2=bwperim(BW1);
基于腐蚀和膨胀的形态操作函数如下:
bwhitmiss图像逻辑"
与"
操作,该函数使用一个结构元素对图像进行腐蚀操作后,再使用第二个结构元素对图像进行腐蚀操作
imbothat从原始图像中减去经过形态关闭后的图像,该函数可用来寻找图像中的灰度槽
imclose闭合操作.首先对图像进行膨胀,然后再对膨胀后的图像进行腐蚀,两个操作使用同样的结构元素
imopen开启操作,首先对图像进行腐蚀,然后再对腐蚀后的图像进行膨胀,两个操作使用同样的结构元素
imtophat从原始图像中减去形态开启后的图像,可以用来增强图像的对比度
边缘检测算子:
Roberts(2×
2)、Prewitt(3×
3)、Sobel(3×
3)、IsotropicSobel(3×
3)、log、candy、zerocross。
Matlab提供了专门的边缘检测edge函数。
(用法详请参见Matlab图像处理函数大全)
四、所需用到的图像基本操作
1.图像类型转换:
mat2gray(数据矩阵转灰度图像)、rgb2gray(彩色转灰度)、im2bw(将真彩色、索引色、灰度图转换成二值图)
I=mat2gray(A,[aminamax])%其中[aminamax]是[0,1]间的任意值
I=mat2gray(A)%数据矩阵转换为可视化灰度图像
I=rgb2gray(RGB)%输入是真彩色,则输出图像类型可以是unit8或double
newmap=rgb2gray(map)%输入输出图像都是double型的。
BW=im2bw(I,level)%灰度图像二值化,level是归一化的阈值,取值范围在[0,1]之间
BW=im2bw(X,map,level)%索引色图像二值化(map为调色板)
BW=im2bw(RGB,level)%彩色图像二值化
2.图像的块边缘操作:
(对图像某一部分块进行操作,一次只处理一个图像像素)
像素的边缘是个像素集,由该像素(中心像素)的相关位置确定。
像素的边缘就是一个矩形块,当操作从图像矩阵的一个元素移动到另一个元素时,该矩形块也以相向的方向同时移动。
通常,对于m×
n的边缘来说,中心像素的计算方法:
floor([(m+1n+1)]/2)
Matlab对图像边缘操作的过程如下:
步骤1,选择像素,即读入所需要的图片像素。
I=imread('
tire.tif'
步骤2,确定该像素的边缘块。
f=inline('
max(x(:
))'
步骤3,调用适当的函数对边缘中的元素进行操作
I2=nlfilter(I,[33],f);
%对图像边缘进行滤波操作
步骤4,查找对应于输出图像中心像素的每个像素点,重复
(1)~(4)步骤。
imshow(I);
figure,imshow(I2);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 基于 腐蚀 膨胀 边缘 检测