北理工贾云德《计算机视觉》chapter06边缘检测

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

68第六章边缘检测边缘(edge)是指图像局部强度变化最显著的部分.边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征和形状特征等图像分析的重要基础.图像分析和理解的第一步常常是边缘检测(edgedetection).由于边缘检测十分重要,因此成为机器视觉研究领域最活跃的课题之一.本章主要讨论边缘检测和定位的基本概念,并使用几种常用的边缘检测器来说明边缘检测的基本问题.图像中的边缘通常与图像强度或图像强度的一阶导数的不连续性有关.图像强度的不连续可分为:(1)阶跃不连续,即图像强度在不连续处的两边的像素灰度值有着显著的差异;(2)线条不连续,即图像强度突然从一个值变化到另一个值,保持一个较小的行程后又返回到原来的值.在实际中,阶跃和线条边缘图像是很少见的,由于大多数传感元件具有低频特性,使得阶跃边缘变成斜坡型边缘,线条边缘变成屋顶形边缘,其中的强度变化不是瞬间的,而是跨越一定的距离,这些边缘如图6.1所示.(a)(b)图6.1两种常见的边缘,(a)阶跃函数,(b)线条函数.其中第一排为理想信号,第二排对应实际信号对一个边缘来说,有可能同时具有阶跃和线条边缘特性.例如在一个表面上,由一个平面变化到法线方向不同的另一个平面就会产生阶跃边缘;如果这一表面具有镜面反射特性且两平面形成的棱角比较圆滑,则当棱角圆滑表面的法线经过镜面反射角时,由于镜面反射分69量,在棱角圆滑表面上会产生明亮光条,这样的边缘看起来象在阶跃边缘上叠加了一个线条边缘.由于边缘可能与场景中物体的重要特征对应,所以它是很重要的图像特征。比如,一个物体的轮廓通常产生阶跃边缘,因为物体的图像强度不同于背景的图像强度.在讨论边缘算子之前,首先给出一些术语的定义:边缘点:图像中具有坐标],[ji且处在强度显著变化的位置上的点.边缘段:对应于边缘点坐标],[ji及其方位,边缘的方位可能是梯度角.边缘检测器:从图像中抽取边缘(边缘点和边缘段)集合的算法.轮廓:边缘列表,或是一条表示边缘列表的拟合曲线.边缘连接:从无序边缘表形成有序边缘表的过程.习惯上边缘的表示采用顺时针方向来排序.边缘跟踪:一个用来确定轮廊的图像(指滤波后的图像)搜索过程.边缘点的坐标可以是边缘位置像素点的行、列整数标号,也可以在子像素分辨率水平上表示.边缘坐标可以在原始图像坐标系上表示,但大多数情况下是在边缘检测滤波器的输出图像的坐标系上表示,因为滤波过程可能导致图像坐标平移或缩放.边缘段可以用像素点尺寸大小的小线段定义,或用具有方位属性的一个点定义.请注意,在实际中,边缘点和边缘段都被称为边缘.由边缘检测器生成的边缘集可以分成两个子集:真边缘集和假边缘集.真边缘集对应场景中的边缘,假边缘集不是场景中的边缘.还有一个边缘子集,即场景中漏检的边缘集.假边缘集称之为假阳性(falsePositive),而漏掉的边缘集则称之为假阴性(falseNegative).边缘连接和边缘跟踪之间的区别在于:边缘连接是把边缘检测器产生的无序边缘集作为输入,输出一个有序边缘集;边缘跟踪则是将一幅图像作为输入,输出一个有序边缘集.另外,边缘检测使用局部信息来决定边缘,而边缘跟踪使用整个图像信息来决定一个像素点是不是边缘.6.1梯度边缘检测是检测图像局部显著变化的最基本运算.在一维情况下,阶跃边缘同图像的一阶导数局部峰值有关.梯度是函数变化的一种度量,而一幅图像可以看作是图像强度连续函数的取样点阵列.因此,同一维情况类似,图像灰度值的显著变化可用梯度的离散逼近函数来检测.梯度是一阶导数的二维等效式,定义为向量yfxfyxGGyxG),((6.1)有两个重要的性质与梯度有关:(1)向量),(yxG的方向就是函数),(yxf增大时的最大变化率方向;(2)梯度的幅值由下式给出:22|),(|yxGGyxG(6.2)在实际应用中,通常用绝对值来近似梯度幅值:yxGGyxG|),(|(6.3)或),max(|),(|yxGGyxG(6.4)由向量分析可知,梯度的方向定义为)/arctan(),(xyGGyxa(6.5)其中角是相对x轴的角度.注意梯度的幅值实际上与边缘的方向无关,这样的算子称为各向同性算子(isotropicoperators).对于数字图像,方程6.1的导数可用差分来近似.最简单的梯度近似表达式为70],1[],[],[]1,[jifjifGjifjifGyx(6.6)请注意j对应于x轴方向,而i对应于负y轴方向.这些计算可用下面的简单卷积模板来完成11xG11yG(6.7)在计算梯度时,计算空间同一位置x和y处的真实偏导数是至关重要的.然而采用上面公式计算的梯度近似值xG和yG并不位于同一位置,xG实际上是内插点[,/]ij12处的梯度近似值,yG是内插点],2/1[ji处的梯度近似值.由于这个缘故,人们常常使用22一阶差分模板(而不用21或12模板)来求x和y的偏导数:1111xG1111yG(6.8)用上式计算x和y方向梯度的位置是相同的,这一点位于内插点]2/1,2/1[ji处,即在22邻域的所有四个像素点之间.不过这种计算可能会导致一些混淆,所以,通常用33邻域计算梯度值.这一方法将在下一节讨论.6.2边缘检测算法边缘检测算法有如下四个步骤:滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能.需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折衷.增强:增强边缘的基础是确定图像各点邻域强度的变化值.增强算法可以将邻域(或局部)强度值有显著变化的点突显出来.边缘增强一般是通过计算梯度幅值来完成的.检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点.最简单的边缘检测判据是梯度幅值阈值判据.定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来.在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向.边缘检测误差通常是指边缘误分类误差,即把假边缘判别成边缘而保留,而把真边缘判别成假边缘而去掉.边缘估计误差是用概率统计模型来描述边缘的位置和方向误差的.我们将边缘检测误差和边缘估计误差区分开,是因为它们的计算方法完全不同,其误差模型也完全不同.最近的二十年里发展了许多边缘检测器,这里仅讨论常用的几种边缘检测器.6.2.1Roberts算子Roberts交叉算子为梯度幅值计算提供了一种简单的近似方法:]1,[],1[]1,1[],[],[jifjifjifjifjiG(6.9)用卷积模板,上式变成:yxGGjiG],[(6.10)71其中xG和yG由下面的模板计算:Gx1001Gy0110(6.11)同前面的22梯度算子一样,差分值将在内插点[/,/]ij1212处计算.Roberts算子是该点连续梯度的近似值,而不是所预期的点[,]ij处的近似值.Roberts边缘检测器的试验结果见图6.3.6.2.2Sobel算子正如前面所讲,采用33邻域可以避免在像素之间内插点上计算梯度.考虑一下图6.2中所示的点[,]ij周围点的排列.Sobel算子也是一种梯度幅值,Mssxy22(6.12)其中的偏导数用下式计算:)()()()(456210670432acaaacaasacaaacaasyx(6.13)其中常数2c和其他的梯度算子一样,sx和sy可用卷积模板来实现:101202101xs121000121ys(6.14)请注意这一算子把重点放在接近于模板中心的像素点.图6.3和图6.4表明了这一算子的作用.Sobel算子是边缘检测器中最常用的算子之一.45637210],[aaaajiaaaa图6.2用于说明Sobel算子和Prewitt算子的邻域像素点标记6.2.3Prewitt算子Prewitt算子与Sobel算子的方程完全一样,只是常量c=1.所以101101101xs111000111ys(6.15)请注意,与Sobel算子不同,这一算子没有把重点放在接近模板中心的像素点.这种边缘检测器的性能也示意在图6.3和图6.4中.6.2.4各种算法比较现在来比较一下上面讨论过的边缘检测器.我们将按照本节开头所提出的滤波、增强和72检测这三个步骤,来比较各种方法.第四步定位将不讨论.首先给出在忽略滤波步骤情况下Roberts、Sobel和Prewitt边缘检测方法实验结果,如图6.3所示.对滤波后的图象进行边缘检测的结果见图6.4,其中滤波器为前一章介绍的77高斯滤波器,梯度幅值的计算见方程6.3.比较图6.3和图6.4可以发现,由于噪声影响,一些假边缘也被检测出来了.图6.2用于边缘检测的测试图像(a)原始图像(b)7x7高斯滤波的图像图6.3各种边缘检测器对未经滤波的图像(a)进行边缘检测的比较.(c)Roberts交叉算子.(d)Sobel算子.(e)Prewitt算子.73图6.4各种边缘检测器对滤波后的图像(图6.3(b))进行边缘检测的结果.(a)Roberts交叉算子.(b)Sobel算子.(c)Prewitt算子6.3二阶微分算子前面讨论了计算一阶导数的边缘检测器,如果所求的一阶导数高于某一阈值,则确定该点为边缘点.这样做会导致检测的边缘点太多(注意一下图6.3和图6.4中阈值化后的粗线).一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,如图6.5所示.在图6.5中,若用阈值来进行边缘检测,则在a和b之间的所有点都被记为边缘点.但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘.一阶导数的局部最大值对应着二阶导数的零交点这意味着在边缘点处有一阶导数的峰值,同样地,有二阶导数的零交叉点.这样,通过找图像强度的二阶导数的零交叉点就能找到边缘点.在二维空间,对应二阶导数有两种算子:拉普拉斯算子和二阶方向导数.74图6.5用阈值进行边缘检测和用二阶导数的零交点进行边缘检测示意图.6.3.1拉普拉斯算子平滑过的阶跃边缘二阶导数是一个在边缘点处过零的函数(见图6.5).拉普拉斯算子是二阶导数的二维等效式.函数),(yxf的拉普拉斯算子公式为22222ffxfy(6.16)使用差分方程对x和y方向上的二阶偏导数近似如下:],[])1,[2]2,[(],[]1,[]),[]1,[(22jifjifjifxjifxjifxjifjifxGxfx(6.17)这一近似式是以点]1,[ji为中心的.用1j替换j,得到22xf]1,[]),[2]1,[(jifjifjif(6.18)它是以点[,]ij为中心的二阶偏导数的理想近似式,类似地,22yf],1[]),[2],1[(jifjifjif(6.19)把这两个式子合并为一个算子,就成为下面能用来近似拉普拉斯算子的模板:0101410102(6.20)有时希望邻域中心点具有更大的权值,比如下面的模板就是一种基于这种思想的近似拉普拉斯算子:7514142041412(6.21)当拉普拉斯算子输出出现过零点时就表明有边缘存在,其中忽略无意义的过零点(均匀零区).原则上,过零点的位置精度可以通过线性内插方法精确到子像素分辨率,不过由于噪声,结果可能不会很精确.考虑图6.6中所给的例子.图中表明了对一幅具有简单阶跃边缘的图像进行拉普拉斯运算的结果.输出图像中的一行是:0006-6000在本例中,对应于原始图像边缘的零交叉点位于两个中心像素点之

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功