1、第三章第三章 MATLAB图形图像处理图形图像处理3.5 图像的灰度变换与直方图图像的灰度变换与直方图3.6 图像的增强滤波图像的增强滤波3.7 图像的空间变换图像的空间变换3.8 图像边缘检测与分割图像边缘检测与分割3.53.5图像的灰度变换与直方图图像的灰度变换与直方图 在计算机中一幅二维数字图像表示为一个矩阵,在计算机中一幅二维数字图像表示为一个矩阵,该矩阵中的元素是位于相应坐标位置的图像灰度该矩阵中的元素是位于相应坐标位置的图像灰度值。对图像处理,包括对彩色图像的处理,往往值。对图像处理,包括对彩色图像的处理,往往都是对像素灰度的操作,所以对图像进行灰度变都是对像素灰度的操作,所以对图
2、像进行灰度变换是图像处理过程中最简单、最基础内容。换是图像处理过程中最简单、最基础内容。在图像处理中,直接对像素进行的操作称为在图像处理中,直接对像素进行的操作称为空间空间域(简称空域)处理域(简称空域)处理。3.5.13.5.1图像的灰度变换图像的灰度变换 在在MATLAB中,用函数中,用函数imadjust可完成灰度图像可完成灰度图像的灰度变换。其基本语法格式为:的灰度变换。其基本语法格式为:gimadjust(p,low_in high_in,low_out high_out,gamma)其中,其中,p为读入到为读入到MATLAB中的待变换图像矩阵中的待变换图像矩阵;low_in hig
3、h_in指定指定p图像中被执行变换操作的灰度图像中被执行变换操作的灰度范围,范围,low_out high_out是是p图像中的像素变换后被映射图像中的像素变换后被映射到到low_outhigh_out的灰度级上。的灰度级上。默认状态下,默认状态下,low_out high_out及及low_in high_in为空,为空,此时等价于此时等价于0 1,表明输入与输出灰度级为,表明输入与输出灰度级为0255(uint8)或)或065535(uint16)。)。参数参数gamma是指变换映射的方式,默认方式时是指变换映射的方式,默认方式时gamma取作取作1,完成线性映射,这时变换前后的,完成线性
4、映射,这时变换前后的灰度级没有被加权;灰度级没有被加权;当当gamma小于小于1,则映射被加权至更高的灰度级;,则映射被加权至更高的灰度级;相反当相反当gamma大于大于1,输出则被加权映射至较低,输出则被加权映射至较低的灰度级。的灰度级。几种灰度变换过程几种灰度变换过程:【例3.5.1】将将football.jpg灰度级灰度级0.10.6范围的像范围的像素线性变换到素线性变换到01上,效果如图上,效果如图3.29中图中图(b)所示所示 p=imread(football.jpg);g1=imadjust(p,0.1 0.6,);subplot(1,2,1);imshow(p);xlabel(
5、a);subplot(1,2,2);imshow(g1);xlabel(b);【例【例3.5.2】将图像将图像p向高灰度级变换,向高灰度级变换,gamma取取0.6,效果如图,效果如图3.29中图中图(c)所示。所示。g2=imadjust(p,0.6);subplot(2,2,3);imshow(g2);xlabel(c);【例【例3.5.3】将图像将图像p做灰度倒相变换,即输出源图做灰度倒相变换,即输出源图的负片,的负片,gamma取取1,如图,如图3.29中图中图(d)所示。所示。g3=imadjust(p,0 1,1 0);subplot(2,2,4);imshow(g3);xlabe
6、l(d);3.5.23.5.2灰度直方图灰度直方图 图像灰度直方图描述了一幅图像的灰度级内容,即图像灰度直方图描述了一幅图像的灰度级内容,即各个灰度级像素数目的统计。各个灰度级像素数目的统计。直方图统计各个灰度像素的分布概率,是灰度级的直方图统计各个灰度像素的分布概率,是灰度级的函数,它反映不出该像素在图像中的二维坐标。函数,它反映不出该像素在图像中的二维坐标。通过灰度直方图的形状,可以判断该图像的清晰度通过灰度直方图的形状,可以判断该图像的清晰度和黑白对比度。和黑白对比度。在在MATLAB图像处理中,通过命令图像处理中,通过命令imhist来给出来给出图像的直方图。其基本语法格式为:图像的直
7、方图。其基本语法格式为:h=imhist(p,b)其中其中p为读入到为读入到MATLAB环境中的图像矩阵,环境中的图像矩阵,参数参数b指明直方图统计时显示的整个灰度级分段指明直方图统计时显示的整个灰度级分段数目。省略数目。省略b时,表明灰度级不分段,这也是时,表明灰度级不分段,这也是imhist的默认调用方式。的默认调用方式。如:如:uint8数据格式的图像,当数据格式的图像,当b2时,灰度分为时,灰度分为0127及及128256两个区段。两个区段。【例3.5.4】显示图像显示图像p的灰度直方图时,先要把的灰度直方图时,先要把RGB彩色图像彩色图像p变换为灰度图像变换为灰度图像I。运行下列程序
8、。运行下列程序,得到如图,得到如图3.30所示直方图。所示直方图。p=imread(football.jpg);I=rgb2gray(p);imhist(I);3.5.33.5.3直方图均衡化直方图均衡化 在图像处理中,当一幅图像在图像处理中,当一幅图像基调过暗或过亮基调过暗或过亮时,需要对其进行必要的处理,使得图像的时,需要对其进行必要的处理,使得图像的明暗均匀,视觉效果变得更为理想。明暗均匀,视觉效果变得更为理想。通过直方图均衡化做适当的调整,即把一幅通过直方图均衡化做适当的调整,即把一幅已知灰度概率分布图像中的像素灰度做某种已知灰度概率分布图像中的像素灰度做某种映射变换,使它变成一幅映射
9、变换,使它变成一幅具有均匀概率分布具有均匀概率分布的新图像,使图像视觉效果更加清晰。的新图像,使图像视觉效果更加清晰。直方图均衡的直方图均衡的MATLAB函数为函数为histeq,其基,其基本语法格式为:本语法格式为:g=histeq(p,outlev)其中其中p为读入的图像矩阵,为读入的图像矩阵,outlev为输出图像的灰度级数。为输出图像的灰度级数。outlev的默的默认值为认值为64,即,即64个灰度级,这样对图像的个灰度级,这样对图像的细节有一定改变。通常将其赋值为细节有一定改变。通常将其赋值为256,即,即全灰度级(全灰度级(uint8)。)。【例【例3.5.4】对对tire.tif
10、进行直方图均衡,效果如图进行直方图均衡,效果如图3.31所示。所示。p=imread(tire.tif);subplot(2,2,1);imshow(p);xlabel(a);subplot(2,2,2);imhist(p);xlabel(b);g=histeq(p);subplot(2,2,3);imshow(g);xlabel(c);subplot(2,2,4);imhist(g);xlabel(d);3.6 图像的增强滤波图像的增强滤波 上节介绍过的直方图均衡化是图像增强中上节介绍过的直方图均衡化是图像增强中常用的一种方法,此外,图像增强技术还常用的一种方法,此外,图像增强技术还包括包括
11、图像平滑滤波、图像锐化图像平滑滤波、图像锐化等。等。本节将从线性与非线性、平滑与锐化等角本节将从线性与非线性、平滑与锐化等角度介绍一些实用的空域图像增强技术。度介绍一些实用的空域图像增强技术。3.6.1 3.6.1 空域滤波概述空域滤波概述 图像增强技术从总体上可分为图像增强技术从总体上可分为空域增强和空域增强和频域增强频域增强两大类。两大类。空域增强也称为空间增强,是空域增强也称为空间增强,是直接对图像直接对图像中的像素中的像素进行操作的一种增强过程。进行操作的一种增强过程。空域增强从根本上讲是以图像的灰度映射空域增强从根本上讲是以图像的灰度映射变换为基础的像素处理技术。变换为基础的像素处理
12、技术。空域增强方法大致可分为空域增强方法大致可分为对比度拉伸、平滑滤波对比度拉伸、平滑滤波和锐化滤波和锐化滤波。灰度拉伸主要是利用点运算来修改。灰度拉伸主要是利用点运算来修改图像像素灰度值;而平滑和锐化均是利用模板来图像像素灰度值;而平滑和锐化均是利用模板来修改(卷积运算)像素灰度值,从实现方法上讲修改(卷积运算)像素灰度值,从实现方法上讲是基于图像滤波的操作过程。是基于图像滤波的操作过程。空域滤波是在图像空间中空域滤波是在图像空间中借助模板借助模板对图像进行邻对图像进行邻域操作的,输出图像每一个像素的取值都是根据域操作的,输出图像每一个像素的取值都是根据模板对输入像素相应邻域内的像素值进行计
13、算得模板对输入像素相应邻域内的像素值进行计算得到的到的,也叫也叫邻域去噪算法邻域去噪算法。3.6.2 3.6.2 空域滤波分类空域滤波分类 根据根据模板特点模板特点不同可以将空域滤波分为线性和非不同可以将空域滤波分为线性和非线性两大类。线性两大类。按照按照空域滤波器的功能空域滤波器的功能不同,又可将其分为平滑不同,又可将其分为平滑滤波器和锐化滤波器。滤波器和锐化滤波器。平滑滤波器可以用低通滤波实现;锐化滤波器是平滑滤波器可以用低通滤波实现;锐化滤波器是用高通滤波实现的,具体可分为以下用高通滤波实现的,具体可分为以下3类。类。1均值滤波均值滤波 均值滤波也称均值滤波也称线性平滑滤波线性平滑滤波,
14、其输出的像素值是,其输出的像素值是由邻域像素的平均值决定。由邻域像素的平均值决定。2 2中值滤波中值滤波 中值滤波也称为中值滤波也称为非线性平滑滤波非线性平滑滤波,其基本原理与均值,其基本原理与均值滤波不同之处在于:中值滤波的输出像素值是由邻域滤波不同之处在于:中值滤波的输出像素值是由邻域像素的中间值而不是平均值决定,中值滤波的名字也像素的中间值而不是平均值决定,中值滤波的名字也因此而得。因此而得。与均值滤波相比,中值滤波对灰度发生聚变的像素不与均值滤波相比,中值滤波对灰度发生聚变的像素不如均值滤波那么敏感,因此中值滤波能尽量保存图像如均值滤波那么敏感,因此中值滤波能尽量保存图像的细节,模糊效
15、应较少,适于消除图像中孤立噪声。的细节,模糊效应较少,适于消除图像中孤立噪声。3 3锐化滤波锐化滤波 锐化滤波就是可以锐化滤波就是可以使用微分使用微分对图像进行处理,以此来对图像进行处理,以此来锐化由于邻域平均导致的图像模糊。锐化由于邻域平均导致的图像模糊。图像处理中最常用的微分是利用图像沿某方向上的灰图像处理中最常用的微分是利用图像沿某方向上的灰度变化率,即梯度进行的。度变化率,即梯度进行的。3.6.3基于基于MATLAB的空域增强滤波的空域增强滤波 基于基于MATLAB图像处理的空域滤波,首先要定义图像处理的空域滤波,首先要定义滤波器,然后调用定义好的滤波器进行滤波。滤波器,然后调用定义好
16、的滤波器进行滤波。imnoise是是MATLAB提供的图像噪声模拟函数,其提供的图像噪声模拟函数,其基本语法格式为:基本语法格式为:pn=imnoise(p,type,para)其中其中pn为添加噪声的输出图像,为添加噪声的输出图像,p为原图像,为原图像,type指定噪声的类型,指定噪声的类型,para为每种类型噪声的参数。为每种类型噪声的参数。常用的噪声有:常用的噪声有:gaussian(高斯噪声)、(高斯噪声)、salt&pepper(椒盐噪声)、(椒盐噪声)、speckle(均值为(均值为0均匀均匀分布的随机噪声)等。分布的随机噪声)等。fspecial函数用来预定义滤波器,语法格式为:
17、函数用来预定义滤波器,语法格式为:h=fspecial(type,para)其中其中h为预定义的滤波器,参数为预定义的滤波器,参数type指定滤波器的指定滤波器的种类,种类,para为与滤波器相关的参数。为与滤波器相关的参数。滤波器的种类滤波器的种类type可以为:可以为:gaussian(高斯低通滤(高斯低通滤波器)、波器)、laplacian(拉普拉斯算子)、(拉普拉斯算子)、log(拉普(拉普拉斯高斯算子)、拉斯高斯算子)、prewitt(Prewitt算子)、算子)、sobel(Sobel算子)、算子)、average(均值滤波器)及(均值滤波器)及unsharp(对比度增强滤波器)等
18、。(对比度增强滤波器)等。imfilter是用来实现线性空间滤波的函数,其基本是用来实现线性空间滤波的函数,其基本语法格式为:语法格式为:hp=imfilter(p,w,filter_mode,boundary_options,size_options)其中其中hp为经过滤波后输出的图像,为经过滤波后输出的图像,p为原图像,为原图像,参数参数w为滤波模板,为滤波模板,filter_mode指定滤波过程中指定滤波过程中 使用相关核(使用相关核(corr)还是卷积核()还是卷积核(conv)。)。boundary_options控制边界填充方式为边界复制控制边界填充方式为边界复制 (replica
19、te)、边界循环()、边界循环(circular)还是边界对)还是边界对 称(称(symmetric)。)。size_options可以为可以为same或者或者 full两者之一。两者之一。medfilt2是一个二维中值滤波函数,其基本是一个二维中值滤波函数,其基本语法格式为:语法格式为:hp=medfilt2(p,m n,padopt)其中其中hp为经过滤波后输出的图像,为经过滤波后输出的图像,p为原图为原图像,像,m及及n规定了邻域的大小,规定了邻域的大小,padopt指定指定了边界填充方式,默认方式为了边界填充方式,默认方式为zeros【例【例3.6.1】对添加了椒盐噪声的图像分别进行均
20、值对添加了椒盐噪声的图像分别进行均值滤波和中值滤波,滤波前后效果如图滤波和中值滤波,滤波前后效果如图3.32所示。所示。p=imread(coins.png);p0=imnoise(p,salt&pepper,0.02);%为原图添加椒盐噪声为原图添加椒盐噪声 H1=fspecial(average,3 4);%设计均值滤波器设计均值滤波器H1 p1=imfilter(p0,H1,replicate);%用滤波器用滤波器H1对图像对图像p0进行滤波进行滤波 p2=medfilt2(p0,3,3,zeros);%对图像对图像p0进行中值滤波进行中值滤波 subplot(2,2,1),imshow
21、(p);%分别显示原图及处理后的图像分别显示原图及处理后的图像 subplot(2,2,2),imshow(p0);subplot(2,2,3);imshow(p1);subplot(2,2,4);imshow(p2);图图3.32 均值滤波和中值滤波均值滤波和中值滤波(a)原图像;原图像;(b)添加椒盐噪声后图像;添加椒盐噪声后图像;(c)均值滤波后图像;均值滤波后图像;(d)中值滤波后图像中值滤波后图像)(a)(b)(c)(d)【例【例3.6.2】对含有噪声的原图像进行锐化,得到如图对含有噪声的原图像进行锐化,得到如图3.33所示图像。所示图像。p0=imread(moon.tif);p=
22、im2double(p0);%将图像数据类型转换为将图像数据类型转换为double H1=fspecial(laplacian,0);%设计拉普拉斯滤波器设计拉普拉斯滤波器H1 H2=fspecial(log,5 5,0.5);%设计高斯拉普拉斯滤波器设计高斯拉普拉斯滤波器H2 hp1=imfilter(p,H1,replicate);%用滤波器用滤波器H1对图像对图像p进行滤波进行滤波 hp2=imfilter(p,H2,replicate);%用滤波器用滤波器H2对图像对图像p进行滤波进行滤波 p1=p-hp1;%还原灰度色调还原灰度色调 p2=p-hp2;%还原灰度色调还原灰度色调 su
23、bplot(1,3,1),imshow(p0);subplot(1,3,2),imshow(p1);subplot(1,3,3);imshow(p2);图图3.33 拉普拉斯波和高斯拉普拉斯滤波拉普拉斯波和高斯拉普拉斯滤波(a)原图像;原图像;(b)拉普拉斯滤波后图像;拉普拉斯滤波后图像;(c)高斯拉普拉斯滤波后图像高斯拉普拉斯滤波后图像3.7 图像的空间变换图像的空间变换 图像的空间变换也称为图像的几何变换,图像的空间变换也称为图像的几何变换,是指将用户获得或设计的原始图像,按照是指将用户获得或设计的原始图像,按照需要产生大小、形状和位置的变化。需要产生大小、形状和位置的变化。常用的图像几何
24、变换包括常用的图像几何变换包括图像的缩放、图图像的缩放、图像的剪切及图像的旋转像的剪切及图像的旋转等内容。等内容。3.7.1 3.7.1 图像比例缩放图像比例缩放 图像比例缩放图像比例缩放是指将给定的图像在是指将给定的图像在x轴方向按比例轴方向按比例缩放缩放fx倍,在倍,在y轴方向按比例缩放轴方向按比例缩放fy倍,从而获得倍,从而获得一幅新的图像。有一幅新的图像。有fxfy和和 fxfy两种情况。两种情况。比例缩放所产生的图像中的像素可能在原图像中比例缩放所产生的图像中的像素可能在原图像中找不到相应的像素点,这样就必须进行找不到相应的像素点,这样就必须进行插值处理插值处理。图像插值处理图像插值
25、处理常用的方法有两种,常用的方法有两种,一种是最邻近一种是最邻近插值法,另一种是通过一些插值算法来计算相应插值法,另一种是通过一些插值算法来计算相应的像素值。的像素值。MATLAB中提供了三种图像插值方法,即中提供了三种图像插值方法,即最近邻最近邻插值、双线性插值和双三次插值。插值、双线性插值和双三次插值。通过函数通过函数imresize对图像进行插值缩放,其基本语对图像进行插值缩放,其基本语法格式为:法格式为:ps=imresize(p,m,method)其中其中ps为变换后的图像,为变换后的图像,p为输入图像,为输入图像,m放大倍放大倍数(当数(当m1时缩小),时缩小),method为插值
26、方法的选择为插值方法的选择项,可选最近邻插值法(项,可选最近邻插值法(nearest)、双线性插值)、双线性插值法(法(bilinear)及双三次插值法()及双三次插值法(bicubic),默认),默认使用最近邻插值法。使用最近邻插值法。另外一种经常用到的语法格式为:另外一种经常用到的语法格式为:ps=imresize(p,m n,method)其中其中m和和n分别为变换后图像的长宽,其它参数含分别为变换后图像的长宽,其它参数含义与上述相同。义与上述相同。【例【例3.7.1】对对liftingbody.png图像进行缩小,其效果图像进行缩小,其效果如图如图3.34所示。所示。p=imread(
27、liftingbody.png);w=input(please input a number:);%交互输入缩小为交互输入缩小为0.2倍倍 ps=imresize(p,w);%缩小变换缩小变换 imshow(p);figure;imshow(ps);图图3.34 对对liftingbody.png图像进行缩小前后的效果图像进行缩小前后的效果 (a)原图像;原图像;(b)缩小后拉伸显示后图像缩小后拉伸显示后图像3.7.2 图像剪切图像剪切 IPT中用函数中用函数imcrop交互实现图像区域选取功能,交互实现图像区域选取功能,用于剪切图像中的一个矩形子图,可用鼠标选取用于剪切图像中的一个矩形子图,
28、可用鼠标选取这个矩形,也可以通过参数指定这个矩形顶点的这个矩形,也可以通过参数指定这个矩形顶点的坐标。语法格式为:坐标。语法格式为:pc=imcrop(p)或或 pc=imcrop(p,rectangle)其中其中pc为剪切后的图像,为剪切后的图像,p为输入图像,为输入图像,rectangle为四个变量指定的一个矩形区域,即为四个变量指定的一个矩形区域,即left bottom width height,数组中的四个变量分别表示矩形左,数组中的四个变量分别表示矩形左下角的横坐标、纵坐标、矩形长度及宽度。下角的横坐标、纵坐标、矩形长度及宽度。【例【例3.7.2】对对liftingbody.png
29、图像进行剪切,其效果如图图像进行剪切,其效果如图3.35所示。所示。p=imread(liftingbody.png);pc=imcrop(p,80 180 260 220);%输入矩形尺度进行选取输入矩形尺度进行选取 subplot(1,2,1);imshow(p);subplot(1,2,2);imshow(pc);3.7.3 图像旋转图像旋转 图像的旋转是图像的旋转是以图像的中心为原点以图像的中心为原点,将图像上的,将图像上的 所有像素都旋转一个相同的角度。所有像素都旋转一个相同的角度。在图像进行旋转的时候,各像素的坐标必然发生在图像进行旋转的时候,各像素的坐标必然发生 变化,使得旋转之
30、后不能正好落在整数坐标处,变化,使得旋转之后不能正好落在整数坐标处,因此同缩放一样,也需要进行插值,插值方法也因此同缩放一样,也需要进行插值,插值方法也 与缩放的插值方法一样,完全相同,即可用与缩放的插值方法一样,完全相同,即可用3种方种方 法对图像进行插值旋转,默认的插值方法是最近法对图像进行插值旋转,默认的插值方法是最近 邻插值法。邻插值法。在在MATBLA工具箱中的,通过函数工具箱中的,通过函数imrotate实现实现对图像的旋转,对图像的旋转,imrotate函数的语法格式为:函数的语法格式为:pr=imrotate(p,angle,method)或或 pr=imrotate(p,an
31、gle,method,crop)其中其中pr为旋转后得到的图像,为旋转后得到的图像,p为输入图像,为输入图像,angle为指定的旋转度数,参数为指定的旋转度数,参数method用于指定插用于指定插值的方法,可选值为值的方法,可选值为nearest(最近邻法最近邻法),bilinear(双线性插值双线性插值)及及bicubic(双三次插值双三次插值),默认值为,默认值为nearest。参数。参数crop允许用户对旋转后的图像进行允许用户对旋转后的图像进行自动剪切,使返回的图像与原图大小相同。自动剪切,使返回的图像与原图大小相同。【例【例3.7.3】对对liftingbody.png图像进行旋转,
32、其效果如图图像进行旋转,其效果如图3.36所示。所示。p=imread(liftingbody.png);angle=input(please input angle:);%输入旋转角度为输入旋转角度为45度度 pr=imrotate(p,angle,bilinear);%使用双线性插值方法实现旋转变换使用双线性插值方法实现旋转变换 subplot(1,2,1);imshow(p);subplot(1,2,2);imshow(pr);3.8 图像边缘检测与分割图像边缘检测与分割 图像分割图像分割是将数字图像分割成互不相交是将数字图像分割成互不相交(不不重叠重叠)的有意义的子区域的过程。其目的是
33、的有意义的子区域的过程。其目的是使各个区域与景物中以某种方式描述的物使各个区域与景物中以某种方式描述的物体相对应,以便进行高层次的体相对应,以便进行高层次的图像解释、图像解释、图像识别图像识别等处理。等处理。3.8.1 边缘检测概述边缘检测概述 图像分割图像分割一般是基于图像像素灰度值的一般是基于图像像素灰度值的基本特性基本特性不连续性与相似性中的一个或两个来进行的不连续性与相似性中的一个或两个来进行的。区区域内部的像素一般具有灰度相似性,而在区域之间域内部的像素一般具有灰度相似性,而在区域之间的边界上一般具有灰度不连续性。的边界上一般具有灰度不连续性。根据图像灰度级的突变进行图像分割的方法中
34、,根据图像灰度级的突变进行图像分割的方法中,边边缘检测方法缘检测方法通过检测包含不同区域的边缘来解决图通过检测包含不同区域的边缘来解决图像分割问题。边缘检测最通用的方法是像分割问题。边缘检测最通用的方法是检测灰度值检测灰度值的不连续性的不连续性,灰度值的不连续是指在不同区域之间,灰度值的不连续是指在不同区域之间的边缘上像素灰度值的变化往往比较剧烈,一般利的边缘上像素灰度值的变化往往比较剧烈,一般利用图像一阶导数的极大值或者二阶导数的过零点信用图像一阶导数的极大值或者二阶导数的过零点信息提供判断边缘点的依据。息提供判断边缘点的依据。3.8.2 梯度算子梯度算子 对于图像中任一像素点,可以用二维函
35、数对于图像中任一像素点,可以用二维函数f(x,y)来表示,来表示,而而梯度梯度定义为向量定义为向量f:该向量的幅值为:该向量的幅值为:为简化计算,通常省略开方或通过取绝对值来近似计算,为简化计算,通常省略开方或通过取绝对值来近似计算,即即 或或 TTyfxfGyGxyxf),(21222122)(yfxfGGfmagfyx22)(yxGGfmagfyxGGf 梯度向量的含义在于,它总是指向梯度向量的含义在于,它总是指向f(x,y)在在点点(x,y)处的最大变化率方向。最大变化率是处的最大变化率方向。最大变化率是用方向用方向角来衡量的,即角来衡量的,即 原理:若所求的一阶层数(梯度)高于某一原理
36、:若所求的一阶层数(梯度)高于某一阈值,则可确定该点为边缘点。阈值,则可确定该点为边缘点。)/arctan(),(xyGGyx 为了能估计出为了能估计出Gx及及Gy值,通常使用一些经典的模值,通常使用一些经典的模板来做数字化近似。这些模板有板来做数字化近似。这些模板有Sobel模板、模板、Prewitt模板、模板、Roberts模板模板等。等。MATLAB图像处理工具箱中提供了图像处理工具箱中提供了边缘函数(边缘函数(edge)实现对图像边缘的检测,其基本语法格式实现对图像边缘的检测,其基本语法格式为:为:e,s=edge(p,method,para)其中其中p为输入图像,为输入图像,meth
37、od是边缘检测的类型,是边缘检测的类型,para为与为与edge对应的参数,对应的参数,e为与为与p同样大小的逻同样大小的逻辑矩阵,在检测到边缘的位置时值为辑矩阵,在检测到边缘的位置时值为1,其它位置,其它位置则为则为0,s为一可选参数。为一可选参数。1Roberts模板模板(算子算子)Roberts算子又称为算子又称为Roberts交叉算子,它是由交叉算子,它是由Roberts提提出的一种出的一种利用局部差分算子利用局部差分算子寻找边缘的模板,它在寻找边缘的模板,它在22邻域上计算对角导数。在实际应用中,为了简化计算,邻域上计算对角导数。在实际应用中,为了简化计算,常用梯度函数的常用梯度函数
38、的Roberts绝对值来近似。另外还可以用绝对值来近似。另外还可以用Roberts最大值算子来计算。最大值算子来计算。Roberts边缘检测算子如图所示:边缘检测算子如图所示:(a)Roberts-x (b)Roberts-y-10010-110 Roberts边缘检测器的语法格式如下:边缘检测器的语法格式如下:e,s=edge(p,roberts,thresh,direct)其中其中p为输入图像,为输入图像,thresh为指定的阈值为指定的阈值T,若,若T值未指定,则函数值未指定,则函数edge自动选择一个值。自动选择一个值。direct为为检测边缘的首选方向,通常可选作检测边缘的首选方向,
39、通常可选作horizontal(水水平平)、vertical(垂直)或(垂直)或both(默认值)。(默认值)。Roberts算子的一个主要问题是计算方向差分时对算子的一个主要问题是计算方向差分时对噪声敏感。噪声敏感。2Sobel模板模板(算子算子)Sobel提出一种提出一种将方向差分运算与局部平均相结将方向差分运算与局部平均相结合合的方法,即的方法,即Sobel算子。该算子是在以算子。该算子是在以f(x,y)为为中心的中心的33邻域上计算邻域上计算x和和y方向的偏导数,其方向的偏导数,其模板如图所示:模板如图所示:(c)Sobel-x (d)Sobel-y-1-2-1000121-101-2
40、02-101 Sobel边缘检测器语法格式:边缘检测器语法格式:e,s=edge(p,sobel,thresh,direct)其中其中p为输入图像,为输入图像,thresh为指定的阈值,为指定的阈值,direct为检测边缘的首选方向,通常可选作为检测边缘的首选方向,通常可选作horizontal(水平水平)、vertical(垂直)或(垂直)或both(默认值)。(默认值)。3Prewitt模板模板(算子算子)Prewit提出了与提出了与Sobel算子类似的计算偏微分估算子类似的计算偏微分估计值的方法,计值的方法,Prewit模板如图:模板如图:(e)Prewit-x (f)Prewit-y-
41、101-101-101-1-1-1000111 Prewit边缘检测器调用语法如下:边缘检测器调用语法如下:e,s=edge(p,prewitt,thresh,direct)其中其中p为输入图像,为输入图像,thresh为指定的阈值,为指定的阈值,direct为为检测边缘的首选方向,通常可选作检测边缘的首选方向,通常可选作horizontal(水平水平)、vertical(垂直)或(垂直)或both(默认值)。(默认值)。梯度算子的缺点:可能会导致检测的边缘点太多。梯度算子的缺点:可能会导致检测的边缘点太多。3.8.2 二阶微分算子二阶微分算子 一种更好的方法就是求梯度局部最大值对应的点,并认
42、一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点。定它们是边缘点。一阶导数的局部最大值对应着二阶导数的一阶导数的局部最大值对应着二阶导数的零交叉点零交叉点(zero crossing)。这样,通过找图像强度的二阶导数的零交叉。这样,通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。点就能找到精确边缘点。在数字图像处理中,二阶导数常用于拉普拉斯算子的计在数字图像处理中,二阶导数常用于拉普拉斯算子的计算,即二维函数算,即二维函数f(x,y)的拉普拉斯的表达式为的拉普拉斯的表达式为:22222(,)(,)(,)fx yfx yf x yxy 二阶微分算子边缘检测器主要包括二阶微分算
43、子边缘检测器主要包括LoG算子和算子和Canny算子。算子。常用的两种拉普拉斯模板如图所示:常用的两种拉普拉斯模板如图所示:0-10-14-10-10-1-1-1-18-1-1-1-1 1.LoG(Laplacian of a Gaussian)算子算子 LoG算子对含有噪声的图像是效果较好的算子对含有噪声的图像是效果较好的边缘检测器。当拉普拉斯算子输出出现边缘检测器。当拉普拉斯算子输出出现过过零点零点时就表明有边缘存在。时就表明有边缘存在。LoG边缘检测器的语法格式如下:边缘检测器的语法格式如下:e,s=edge(p,log,thresh,sigmma)其中其中p为输入图像,为输入图像,th
44、resh为指定的阈值为指定的阈值T,sigmma为高斯滤波器的标准方差,默认为高斯滤波器的标准方差,默认值为值为2。若。若T值未指定,则函数值未指定,则函数edge会自动会自动选择一个阈值。选择一个阈值。2Canny算子算子 Canny算子对最急剧变化方向上的边缘特别敏感,但在沿算子对最急剧变化方向上的边缘特别敏感,但在沿边缘方向上是不敏感的,其作用就像一个平滑算子。边缘方向上是不敏感的,其作用就像一个平滑算子。Canny边缘检测器是高斯函数的一阶导数,是对信噪比和边缘检测器是高斯函数的一阶导数,是对信噪比和定位之乘积的最优化逼近算子。定位之乘积的最优化逼近算子。算法有以下四个步骤:先用高斯滤
45、波器平滑图像,再用一算法有以下四个步骤:先用高斯滤波器平滑图像,再用一阶偏导的有限差分来计算梯度的幅值和方向,然后对梯度阶偏导的有限差分来计算梯度的幅值和方向,然后对梯度幅值进行非极大值抑制,最后用双阈值算法检测和连接边幅值进行非极大值抑制,最后用双阈值算法检测和连接边缘。缘。canny边缘检测器的语法格式如下:边缘检测器的语法格式如下:e,s=edge(p,canny,thresh,sigmma)其中其中p为输入图像,为输入图像,thresh为指定的阈值为指定的阈值T,若,若T值未指定值未指定,则函数,则函数edge会自动选择一个值,会自动选择一个值,sigmma为平滑滤波器为平滑滤波器的标
46、准方差,默认值为的标准方差,默认值为1。【例【例3.8.1】对对lena.bmp图像使用不同的算子进行边缘检测。图像使用不同的算子进行边缘检测。检测结果如图检测结果如图3.39所示。所示。p=imread(lena.bmp);p=im2double(p);%转换为doublee1,s1=edge(p,sobel,0.03,both);%sobel检测器e2,s2=edge(p,roberts,0.03,both);%roberts检测器e3,s3=edge(p,prewitt,0.04,both);%prewitt检测器e4,s4=edge(p,log,0.003,2.10);%LoG检测器e
47、5,s5=edge(p,canny,0.05 0.12,1.6);%canny检测器subplot(2,3,1),imshow(p);subplot(2,3,2),imshow(e1);subplot(2,3,3),imshow(e2);subplot(2,3,4);imshow(e3);subplot(2,3,5),imshow(e4);subplot(2,3,6),imshow(e5);图3.39 边缘检测结果((a)Lena源图;(b)使用Sobel算子;(c)使用Robert算子;(d)使用Prewitt算子;(e)使用LoG算子;(f)使用Canny算子)(a)(b)(c)几种边缘检
48、测算子性能比较:几种边缘检测算子性能比较:Roberts算子是卷积模板为算子是卷积模板为22的算子,对具有陡峭的低噪的算子,对具有陡峭的低噪声图像响应最好,但它存在一些功能上的缺陷,如不能检测声图像响应最好,但它存在一些功能上的缺陷,如不能检测45倍数的边缘,因此一般使用较少。倍数的边缘,因此一般使用较少。Sobel边缘检测器卷积模板为边缘检测器卷积模板为33的算子,对灰度渐变和噪的算子,对灰度渐变和噪声较多的图像处理效果较好。声较多的图像处理效果较好。Prewitt边缘检测器比边缘检测器比Sobel检测器在计算上简单,但易于产检测器在计算上简单,但易于产生噪声。生噪声。LoG算子边缘检测器是
49、先对图像作最佳平滑,然后再利用平算子边缘检测器是先对图像作最佳平滑,然后再利用平滑图像的二阶微分零交叉确定边缘位置,它被认为是微分法滑图像的二阶微分零交叉确定边缘位置,它被认为是微分法中利用平滑二阶微分检测图像边缘较成功的一种算法。中利用平滑二阶微分检测图像边缘较成功的一种算法。Canny边缘检测器是在抗噪声干扰和精确定位之间选择一个边缘检测器是在抗噪声干扰和精确定位之间选择一个最佳折衷方案,在理论上是迄今为至所发现的性能最优的一最佳折衷方案,在理论上是迄今为至所发现的性能最优的一种边缘检测理论。种边缘检测理论。3.8.3 阈值分割阈值分割 阈值化算法利用图像中要提取的目标物与其背景在灰度特阈
50、值化算法利用图像中要提取的目标物与其背景在灰度特性上的差异,把图像视为具有不同灰度级的两类区域性上的差异,把图像视为具有不同灰度级的两类区域(目目标和背景标和背景)的组合,选取一个合适的阈值,以确定图像中的组合,选取一个合适的阈值,以确定图像中每一个像素点应该属于目标还是背景区域,从而产生相应每一个像素点应该属于目标还是背景区域,从而产生相应的二值图像。的二值图像。thresh1,(,)(,)0,(,)f x yTg x yf x yT如图所示,最简单的利用阈值如图所示,最简单的利用阈值方法来分割灰度图像的步骤如方法来分割灰度图像的步骤如下:首先对一幅灰度取值在下:首先对一幅灰度取值在0和和L