欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

OpenCV实战篇十八:亲手实现Sobel算子进行边缘检测指南

最编程 2024-02-08 19:24:55
...

1. 前言

众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的。Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子。

2. Sobel算子优缺点

Sobel算子的优点是可以利用快速卷积函数,简单有效,且对领域像素位置的影响做了加权,可以降低边缘模糊程度,有较好效果。然而Sobel算子并没有基于图像的灰度信息进行处理,所以在提取图像边缘信息的时候可能不会让人视觉满意。

3. 手动构造Sobel算子

我们来看一下怎么构造Sobel算子?

Sobel算子是在一个坐标轴的方向进行非归一化的高斯平滑,在另外一个坐标轴方向做一个差分, 大小的Sobel算子是由平滑算子差分算子全卷积得到,其中 代表Sobel算子的半径,必须为奇数。

对于窗口大小为 非归一化Sobel平滑算子等于 阶的二项式展开式的系数,而Sobel平滑算子等于 阶的二项式展开式的系数两侧补 ,然后向前差分。

举个例子:构造一个 阶的Sobel非归一化的Sobel平滑算子和Sobel差分算子

Sobel平滑算子:取二项式的阶数为 ,然后计算展开式系数为, 也即是 ,这就是 阶的非归一化的Sobel平滑算子。

Sobel差分算子:取二项式的阶数为 ,然后计算二项展开式的系数,即为: ,两侧补 并且前向差分得到 ,第 项差分后可以直接删除。

Sobel算子 阶的Sobel平滑算子和Sobel差分算子进行全卷积,即可得到 的Sobel算子。

其中 方向的Sobel算子为:

上一篇: OpenCV基础入门教程之二:从零开始学习

下一篇: 用OpenCV实战 Sobel边缘检测的例子