目录
1、介绍
2、一般步骤
3、canny算子
4、sobel算子
5、拉普拉斯算子
6、scharr滤波器
1、介绍
边缘检测也是一种滤波,不同的算子有不同的提取效果。比较常用的算子是canny、soble、Laplacian
2、一般步骤
1、滤波
边缘检测的算法主要是基于图像强度的一阶和二阶导数,导数对噪声很敏感,因此必须采用滤波器来改善。
主要有高斯滤波,采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核函数对图像灰度矩阵的每一个点进行加权求和。
2、增强
增强边缘的基础是确定图像各点邻域强度的变化值。
增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来,通过计算梯度幅值来确定。
3、检测
经过增强的图像,往往邻域中有很多点的梯度值比较大,在特定的应用中,这些点不是我们要找的边缘点,所以采用某种方法对这些点进行取舍,常用的方法是阈值化来检测。
3、sobel算子
离散差分算子,结合了高斯平滑和微分求导(结果具有更多的抗噪性),计算图像灰度函数的近似梯度,在图像任何一点使用此算子,都将会产生对应的梯度矢量或法矢量。
对灰度渐变和噪声较多(有平滑作用)的图像处理效果较好,sobel算子对边缘定位不是很准确,图像的边缘不止一个像素;当对精度要求不是很高时,是一种较为常用的边缘检测方法。
(1)sobel算子对图像进行卷积(协相关)
水平变化:将图像I与一个奇数大小的内核进行卷积(图像中的卷积其实是协相关操作,对应位置相乘求和),例如:
垂直变化:将I与一个奇数大小的内核进行卷积,例如:
或者这个公式:
梯度方向:
(2)将梯度值大于阈值的点标记为边缘
(3)(optional)将边缘细化为一个像素宽度。
4、canny算子
Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。
Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括:
- 低错误率:标识出尽可能多的实际边缘,尽可能减少噪声产生的误报;
- 高定位:标识的边缘要与图像中实际边缘尽可能接近;
- 最小响应:图像中的边缘只能标识一次,噪声不能被标识为边缘
为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。
Canny方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。
4.1 流程介绍
- 使用高斯滤波器,平滑图像,消除噪声;
- 计算图像中每个像素点的梯度强度和方向;
- 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
- 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
- 通过抑制孤立的弱边缘最终完成边缘检测。
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 抑制鼓励低阈值点
- 若某一像素点的幅值超过阈值,则保留为边缘像素;
- 若某一像素点的幅值小于低阈值,该像素被排除;
- 若某一像素点的幅值在两者之间,这个像素仅仅在连接到一个高于高阈值的像素时才被保留;
5、laplacian算子
是n维欧里几德空间中的一个二阶微分算子,定义为梯度grad的散度div。由于使用了图像梯度,内部代码调用了sobel算子。根据图像原理可知,二阶导数可以进行边缘检测,因为图像是二维,需要在两个方向上求导,使用laplacian算子会使求导过程变得很简单。
定义
让一幅图减去它的laplacian算子可以增强对比度。
其中:
因此卷积模板(协相关运算)是:
6、scharr滤波器
在opencv中主要是配合sobel算子的运算存在的。计算x或y方向的图像查分,参数变量和sobel基本一样。