严格的说,梯度计算需要求导数。但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值。图像梯度表示的是图像变化的速度,反映了图像的边缘信息。
边缘是像素值快速变化的地方。所以对于图像的边缘部分,其灰度值变化较大,梯度值也较大;对于图像中较平滑的部分,其灰度值变化较小,梯度值也较小。
为了检测边缘,我们需要检测图像中的不连续性,可以使用图像梯度来检测不连续性。但是,图像梯度也会受到噪声的影响,因此建议先对图像进行平滑处理。
本文目录:
1. 图像梯度与几种算子Sobel算子
Scharr算子
Roberts算子
Laplacian算子
2. Canny边缘检测高斯滤波
计算梯度强度和方向
非极大值抑制(NMS)
用双阈值算法检测和连接边缘
3. 基于OpenCV的实现Sobel算子函数
Scharr算子
Laplacian算子
一、图像梯度与几种算子
“滤波器”也可以称为“卷积核”,“掩膜”,“算子”等。
1.1 Sobel算子
Sobel算子是一个3×3的卷积核,利用局部差分寻找边缘,计算得到梯度的近似值。x和y方向的Sobel算子分别为:
梯度有方向,对于一个图像,可以通过Sobel算子分别计算水平方向和垂直方向的偏导数的近似值。
计算水平方向偏导数的近似值
设原图像大小为,水平方向偏导数为:
计算像素点P5的梯度,需要利用邻域内的像素点,公式为:即用像素点P5右侧像素值减去左侧像素值,距离P5近的点权重较大,为2;距离P5远的点权重较小,为1。
计算垂直方向偏导数的近似值
设原图像大小为,垂直方向偏导数为:
计算像素点P5的梯度,需要利用邻域内的像素点,公式为:
即用像素点P5下一行的像素值减去上一行的像素值,距离P5近的点权重较大,为2;距离P5远的点权重较小,为1。
1.2 Scharr算子
x和y方向的Scharr算子分别为:
Sobel算子与Scharr算子比较:Sobel算子的缺点是,当结构较小是,精确度不高,Scharr算子具有更高的精度。
1.3 Roberts算子
当图像边缘接近于正45°或负45°时,该算法处理效果更理想。其缺点是对边缘的定位不太准确,提取的边缘线条较粗。正45°和负45°方向的Roberts算子分别为:
1.4 Laplacian算子
Laplacian算子是一种二阶导数算子,具有旋转不变性,可以满足不同方向的边缘检测要求。通常其算子的系数之和需要为0。例如,一个3×3的Laplacian算子如下:对原图像使用Laplacian算子:
计算P5的近似导数值,如下:
二、Canny边缘检测
Canny边缘检测是一种多级边缘检测算法。于1986年由John F. Canny在论文《A Computational Approach to Edge Detection》中提出。Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括:以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。
检测到的边缘应精确定位在真实边缘的中心。
图像中给定的边缘应只被标记一次,并且在可能