边缘检测:
在视觉计算理论框架中,抽取二维图像上的边缘、角点、纹理等基本特征,是整个系统框架中的第一步。这些特征所组成的图称为基元图。 在不同“尺度”意义下的边缘点,在一定条件下包含了原图像的全部信息。定义:•目前,具有对边缘的描述性定义,即两个具有不同灰度的均匀图像区域的边界,即边界反映局部的灰度变化。•局部边缘是图像中局部灰度级以简单(即单调)的方式作极快变换的小区域。这种局部变化可用一定窗口运算的边缘检测算子来检测。边缘的描述:1)边缘法线方向——在某点灰度变化最剧烈的方向,与边缘方向垂直;2)边缘方向——与边缘法线方向垂直,是目标边界的切线方向;3)边缘强度——沿边缘法线方向图像局部的变化强度的量度。
边缘检测的基本思想是通过检测每个像素和其邻域的状态,以决定该像素是否位于一个物体的边界上。如果一个像素位于一个物体的边界上,则其邻域像素的灰度值的变化就比较大。假如可以应用某种算法检测出这种变化并进行量化表示,那么就可以确定物体的边界。
边缘检测算法有如下四个步骤:
滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能.需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折衷.
增强:增强边缘的基础是确定图像各点邻域强度的变化值.增强算法可以将邻域(或局部)强度值有显著变化的点突显出来.边缘增强一般是通过计算梯度幅值来完成的.
检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点.最简单的边缘检测判据是梯度幅值阈值判据.
定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来.
在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向.边缘检测误差通常是指边缘误分类误差,即把假边缘判别成边缘而保留,而把真边缘判别成假边缘而去掉.边缘估计误差是用概率统计模型来描述边缘的位置和方向误差的.我们将边缘检测误差和边缘估计误差区分开,是因为它们的计算方法完全不同,其误差模型也完全不同.
几种常用的边缘检测算子主要有Roberts边缘检测算子,Sobel算子、Prewitt算子、Krisch边缘算子,高斯-拉普拉斯算子。边缘大致可以分为两种,一种是阶跃状边缘,边缘两边像素的灰度值明显不同;另一种为屋顶状边缘,边缘处于灰度值由小到大再到小的变化转折点处。
边缘检测的主要工具是边缘检测模板。我们以一个一维模板为例来考察边缘检测模板是如何作用的。假设有一个模板 和一幅图象
可以看出,图象中左边暗,右边亮,中间存在着一条明显的边缘,是一个典型阶跃状边缘。使用模板 进行模板操作后,结果如下
可以看出,边缘检测后的图象在原图象暗亮边缘处的灰度值高很多。观察时,就能发现一条很明显的亮边,其他区域都很暗,这样就起到了边缘检测的作用。
模板的作用是将右邻点的灰度值减去左邻点的灰度值作为该点的灰度值。在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0;而在边缘附近,灰度值有明显的跳变,这么做的结果使得该点的灰度值很大,这样就出现了上面的结果。这种模板就是一种边缘检测器,它在数学上的涵义是一种基于梯度的滤波器,习惯上又称边缘算子。我们知道,梯度是有方向的,和边缘的方向总是垂直的。模板是水平方向的,而上面那幅图象的边缘恰好是垂直方向的,使用模板就可以将它检测出来。如果图象的边缘是水平方向的,我们可以用梯度是垂直
方向的模板 检测它的边缘。如果图象的边缘是45。方向的,我们可以用模板 检测它的边缘。
常用的边缘检测模板有Laplacian算子、Roberts算子、Sobel算子、log(Lapla--cian-Gauss)算子、Kirsch算子和Prewitt算子等。
二.Roberts算子
如果我们沿如下图方向角度求其交叉方向的偏导数,则得到Roberts于1963年提出的交叉算子边缘检测方法。该方法最大优点是计算量小,速度快。但该方法由于是采用偶数模板,如下图所示,所求的(x,y)点处梯度幅度值,其实是图中交叉点处的值,从而导致在图像(x,y)点所求的梯度幅度值偏移了半个像素(见下图)。
Roberts算子的推导:
Sobel算子Sobel算子也有两个,一个是检测水平边缘的模板 ,另一个是检测水平边缘的模板。与Prewitt算子相比,Sobel算子对于象素位置的影响作了加权,因此效果更好。
sobel算子的另一种形式是各向同性Sobel算子,也有两个模板组成,一个是检测水平边缘的 ,另一个是检测垂直边缘的 。各向同性Sobel算子和普通Sobel算子相比,位置加权系数更为准确,在检测不同方向的边缘时梯度的幅度一致。
Sobel算子的推导:
Prewitt算子
Prewitt算子由两部分组成,检测水平边缘的模板
和检测垂直边缘的模板
prewitt算子一个方向求微分,一个方向求平均,所以对噪声相对不敏感。
laplacian算子
Laplacian算子定义为
它的差分形式为
表示成模板的形式就是 。Laplacian算子另外一种形式是 ,也经常使用。Laplace算子是一种各向同性算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。
canny算子????
1.Canny边缘检测基本原理
(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。
(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
2.Canny边缘检测算法:
step1:用高斯滤波器平滑图象;
step2:用一阶偏导的有限差分来计算梯度的幅值和方向;
step3:对梯度幅值进行非极大值抑制;
step4:用双阈值算法检测和连接边缘。
step1:高斯平滑函数
Step2:一阶微分卷积模板
step3:非极大值抑制
仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。(non-maximasuppression,NMS)
解决方法:利用梯度的方向。
图1非极大值抑制
四个扇区的标号为0到3,对应3*3邻域的四种可能组合。在每一点上,邻域的中心象素M与沿着梯度线的两个象素相比????。如果M的梯度值不比沿梯度线的两个相邻象素梯度值大,则令M=0。
即:
Step4:阈值化
减少假边缘段数量的典型方法是对N[i,j]使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值?
解决方法:双阈值算法。双阈值算法对非极大值抑制图象作用两个阈值τ1和τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图象N1[i,j]和N2[i,j]。由于N2[i,j]使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在N2[i,j]中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在N1[i,j]的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在N1[i,j]中收集边缘,直到将N2[i,j]连接起来为止。
3.canny算法程序实现
Canny算法程序中将上述的4个步骤再加以细分,分成以下7步:
l生成高斯滤波系数;
l用生成的高斯滤波系数对原图像进行平滑;
l求滤波后图像的梯度;
l进行非最大抑制;
l统计图像的直方图,对阈值进行判定;
l利用函数寻找边界起点;
l根据第6步执行的结果,从一个像素点开始搜索,搜索以该像素点为边界起点的一条边界的一条边界的所有边界点;