Opencv 之使用方向滤波器检测边缘

文章介绍了边缘检测在图像处理中的重要性,包括基于搜索的Sobel和Scharr算子以及基于零穿越的拉普拉斯算子。Sobel算子因其简单高效,在许多应用中被优先选择,尽管其准确性可能不及Canny边缘检测。文章还提到了使用OpenCV实现Sobel边缘检测的API参数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:一、了解Sobel算子、Scharr算子和拉普拉斯算子

                      二、掌握canny边缘检测的原理及应用

一原理

1、边缘检测

f'(x)=f(x)-f(x-1)或f'(x)=f(x+1)-f(x) 所以有f'(x)=(f(x+1)-f(x-1))/2        边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像中的显著变化通常反映了属性的重要事件和变化。图像边缘检测大幅度地减少年数据量,并且剔除可以认为不相关的信息,保留了图像的重要结构属性。有许多方法用于边缘检测,它们绝大部分可以划分为两类:基于搜索和基于零穿越。

基于搜索:通过寻找图像一阶导数中的最大值来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度值的最大值,代表算法是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=\sqrt{G^{^{2}}x+G^{^{2}}y},统计极大值所在的位置,就是图像的边缘。

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。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值