边缘检测

目录算法

一、介绍函数

二、通常步骤spa

三、canny算子3d

四、sobel算子对象

五、拉普拉斯算子blog

六、scharr滤波器ci

一、介绍

边缘检测也是一种滤波,不一样的算子有不一样的提取效果。比较经常使用的算子是canny、soble、Laplacianio

二、通常步骤

一、滤波图像处理

边缘检测的算法主要是基于图像强度的一阶和二阶导数,导数对噪声很敏感,所以必须采用滤波器来改善。opencv

主要有高斯滤波,采用离散化的高斯函数产生一组归一化的高斯核,而后基于高斯核函数对图像灰度矩阵的每个点进行加权求和。

二、加强

加强边缘的基础是肯定图像各点邻域强度的变化值。

加强算法能够将图像灰度点邻域强度值有显著变化的点凸显出来,经过计算梯度幅值来肯定。

三、检测

通过加强的图像,每每邻域中有不少点的梯度值比较大,在特定的应用中,这些点不是咱们要找的边缘点,因此采用某种方法对这些点进行取舍,经常使用的方法是阈值化来检测。

三、sobel算子

离散差分算子,结合了高斯平滑和微分求导(结果具备更多的抗噪性),计算图像灰度函数的近似梯度,在图像任何一点使用此算子,都将会产生对应的梯度矢量或法矢量。

灰度渐变噪声较多(有平滑做用)的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素;当对精度要求不是很高时,是一种较为经常使用的边缘检测方法。   

(1)sobel算子对图像进行卷积(协相关)

水平变化:将图像I与一个奇数大小的内核进行卷积(图像中的卷积实际上是协相关操做,对应位置相乘求和),例如:

垂直变化:将I与一个奇数大小的内核进行卷积,例如:

或者这个公式:

梯度方向:

(2)将梯度值大于阈值的点标记为边缘

(3)(optional)将边缘细化为一个像素宽度。

四、canny算子

Canny边缘检测是从不一样视觉对象中提取有用的结构信息并大大减小要处理的数据量的一种技术,目前已普遍应用于各类计算机视觉系统。

Canny发现,在不一样视觉系统上对边缘检测的要求较为相似,所以,能够实现一种具备普遍应用意义的边缘检测技术。边缘检测的通常标准包括:

  • 低错误率:标识出尽量多的实际边缘,尽量减小噪声产生的误报;
  • 高定位:标识的边缘要与图像中实际边缘尽量接近;
  • 最小响应:图像中的边缘只能标识一次,噪声不能被标识为边缘

为了知足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它能够由高斯函数的一阶导数来近似。在目前经常使用的边缘检测方法中,Canny边缘检测算法是具备严格定义的,能够提供良好可靠检测的方法之一。因为它具备知足边缘检测的三个标准和实现过程简单的优点,成为边缘检测最流行的算法之一。

Canny方法不容易受噪声干扰,可以检测到真正的弱边缘。优势在于,使用两种不一样的阈值分别检测强边缘和弱边缘,而且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。

4.1 流程介绍

  1. 使用高斯滤波器,平滑图像,消除噪声;
  2. 计算图像中每一个像素点的梯度强度和方向;
  3. 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
  4. 应用双阈值(Double-Threshold)检测来肯定真实的和潜在的边缘。
  5. 经过抑制孤立的弱边缘最终完成边缘检测。

4.2 高斯平滑滤波

尽量减小噪声对边缘检测结果的影响,因此必须滤除噪声以防止由噪声引发的错误检测,使用高斯滤波器与图像进行卷积。

其中i,j是像素点的横纵坐标;

高斯核大小为(2k+1)x(2k+1);

σ:自行设定,通常1.5左右。

获得权值矩阵后归一化(sigma = 1.4,尺寸为3x3的高斯卷积核的例子):

使用该权值矩阵(高斯核)对图像作“卷积”(协相关,对应位置相乘最后求和获得一点的像素值),获得新的图像矩阵。

4.3 计算每一个像素点的梯度和方向

运用一对卷积阵列(分别做用于x方向和y方向):

使用下面公式计算梯度幅值和方向:

梯度方向通常为:0,45,90,135

4.4 非极大值抑制

一种边缘稀疏技术,非极大值抑制的做用在于“瘦”边。对图像进行梯度计算后,仅仅基于梯度值提取的边缘仍然很模糊。对于标准3,对边缘有且应当只有一个准确的响应。而非极大值抑制则能够帮助将局部最大值以外的全部梯度值抑制为0,对梯度图像中每一个像素进行非极大值抑制的算法是:

  • 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较;
  • 若是当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,不然该像素点将被抑制;

一般为了更加精确的计算,在跨越梯度方向的两个相邻像素之间使用线性插值来获得要比较的像素梯度,现举例以下:

将梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE,其中0表明00~45o,1表明450~90o,2表明-900~-45o,3表明-450~0o。像素点P的梯度方向为θ,则像素点P1和P2的梯度线性插值为:

4.5 双阈值检测

NMS以后,剩余的像素能够更准确地表示图像中的实际边缘。然而,仍然存在因为噪声和颜色变化引发的一些边缘像素。为了解决这些杂散响应,必须用弱梯度值过滤边缘像素,并保留具备高梯度值的边缘像素,能够经过选择高低阈值来实现。

  • 若某一像素点的幅值超过阈值,则保留为边缘像素;
  • 若某一像素点的幅值小于低阈值,该像素被排除;
  • 若某一像素点的幅值在二者之间,这个像素仅仅在链接到一个高于高阈值的像素时才被保留;

阈值的选择取决于给定输入图像的内容。

4.6 抑制鼓励低阈值点

到目前为止,被划分为强边缘的像素点已经被肯定为边缘,由于它们是从图像中的真实边缘中提取出来的。然而,对于弱边缘像素,将会有一些争论,由于这些像素能够从真实边缘提取也能够是因噪声或颜色变化引发的。为了得到准确的结果,应该抑制由后者引发的弱边缘。
一般,由真实边缘引发的弱边缘像素将链接到强边缘像素,而噪声响应未链接。为了跟踪边缘链接,经过查看弱边缘像素及其 8个邻域像素只要其中一个为强边缘像素,则该弱边缘点就能够保留为真实的边缘
  • 若某一像素点的幅值超过阈值,则保留为边缘像素;
  • 若某一像素点的幅值小于低阈值,该像素被排除;
  • 若某一像素点的幅值在二者之间,这个像素仅仅在链接到一个高于高阈值的像素时才被保留;

五、laplacian算子

是n维欧里几德空间中的一个二阶微分算子,定义为梯度grad的散度div。因为使用了图像梯度,内部代码调用了sobel算子。根据图像原理可知,二阶导数能够进行边缘检测,由于图像是二维,须要在两个方向上求导,使用laplacian算子会使求导过程变得很简单。

Laplacian算子法 对噪声比较敏感,因此不多用该算子检测边缘,而是用来 判断边缘像素视为与图像的明区仍是暗区。拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉, Laplacian算子是各向同性的,能对任何走向的界线和线条进行锐化,无方向性。这是拉普拉斯算子区别于其余算法的最大优势。  

定义

让一幅图减去它的laplacian算子能够加强对比度。

其中:

所以卷积模板(协相关运算)是:

六、scharr滤波器

在opencv中主要是配合sobel算子的运算存在的。计算x或y方向的图像查分,参数变量和sobel基本同样。

相关文章
相关标签/搜索