学习目标:一、了解Sobel算子、Scharr算子和拉普拉斯算子
二、掌握canny边缘检测的原理及应用
一原理
1、边缘检测
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像中的显著变化通常反映了属性的重要事件和变化。图像边缘检测大幅度地减少年数据量,并且剔除可以认为不相关的信息,保留了图像的重要结构属性。有许多方法用于边缘检测,它们绝大部分可以划分为两类:基于搜索和基于零穿越。
基于搜索:通过寻找图像一阶导数中的最大值来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度值的最大值,代表算法是Sobel算子和Scharr算子。
基于零穿越:通过寻找图像二阶导数零穿越来寻找边界,代表算法是Laplacian算子。
2、Sobel检测算子
Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率高,但是边缘检测不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是效率要求较高,而对细纹理不太关心的时候。
2.1方法
对于不连续的函数,一阶导数可以写作:f'(x)=f(x)-f(x-1)或f'(x)=f(x+1)-f(x),
所以有:f'(x)=(f(x+1)-f(x-1))/2
假设要处理的图像为I,在两个方向求导:
水平变化:将图像I与奇数大小的模板进行卷积,结果为Gx。
垂直变化:将图像I与奇数大小的模板进行卷积,结果为Gy。
图像上的每一点,结果以上两个结果求出:G=,统计极大值所在的位置,就是图像的边缘。
2.2应用
利用OpenCV进行sobel边缘检测的API是:
Sobel(src,dst,ddepth,dx,dy,ksize=3,scale=1,delta=0,borderType=BORDER_DEFAULT)
实现了边缘检测的功能。
参数:
src表示输入矩阵;
dst表示输出矩阵,即src与sobel核得到的卷积;
ddepth表示输出矩阵的数据类型;
dx,dy表示src与差分方向为水平方向上的Sobel核卷积(dx不为0)以及src与差分方向为垂直方向上的Sobel核卷积(dx为0,dy不为0);
ksize表示sobel核的尺寸,值一般取奇数;
scale表示比例系数,呈现的比例;
delta表示平移系数;
borderType表示边界扩充的类型,默认值是ORDER_DEFAULT。