CV:边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。

目录

[1. 边缘检测(Prewitt)](#1. 边缘检测(Prewitt))

[2. 边缘检测(Sobel)](#2. 边缘检测(Sobel))

[3. 边缘检测(Laplacian)](#3. 边缘检测(Laplacian))

[3. 边缘检测(Canny)](#3. 边缘检测(Canny))


边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。

人在图像识别上具有难以置信的能力,可以在几毫秒内处理图像,确定图像的边缘、图像内物体的位置和标签。研究者让计算机模拟人检测图像的边缘,是在图像中找到变化明显的区域,也就是像素明显变化的点或区域。

1. 边缘检测(Prewitt)

接下来用黑白像素值介绍如何获得图像的边缘,先建立一个全为 0 的三维数组,维度分别为行、列、通道数,其中 2 列的值再赋值为 255,用以下代码实现,效果展示如 1 下,黑色与白色的接壤的区域的像素值变化巨大。

从黑色到白色(0 到 255)的过渡是正斜率,而从白色到黑色(255 到 0)的过渡是负斜率。梯度指向增长率最大的方向,其大小是该方向上的斜率,可以通过灰度图像的梯度可以找到变化巨大的像素值。

图1:黑白图像

不考虑图像通道数的情况下,假设图像是二维离散函数 f(x,y),图像梯度是在 x 和 y 方向求导,求导之后的公式如图 2 下,使用求导公式对一个 3 行 3 列的二维数组求导,数组的值是 A 到 I,则对应 x 和 y 方向求导,如图 3 所示,其中常数可以忽略,x 方向求导可以看成两个数组相乘,如图 4 所示:

图2: 梯度计算公式

图3: 梯度计算上

图4:梯度计算下

图 4 中的像素值和数字相乘的过程,与卷积操作非常像,数字类比卷积核,此处把这些数字称为模板。接下来,用代码实现 x 方向的图像梯度,先建立一个模板 dx,对应代码中的 kernel 数组,其数值是展示在图 5,再实现模板与图像像素值的相乘的过程,对应代码中的 filter2D 函数,代码实现如下,最后图 6 展示图像梯度的效果,找到了上图 1 中像素值剧烈变化的区域。

图5:模板

图6:梯度效果

通过比较图像在水平和垂直方向像素值差异找到图像的边缘方法称为 Prewitt 算子,水平的算子模板 dx 和垂直的算子模板 dy 如图 7 所示,可以使用 OpenCV 中的 filter2D 函数实现 Prewitt 算子,代码如下,效果如图 8 所示。

图7:Prewitt 算子模板

图8:边缘检测效果

2. 边缘检测(Sobel)

在 Prewitt 算子的基础上提高中心点的权重便是 Sobel 算子,中心点的权重为 2,其模板展示在图 9。

图9:Sobel 算子模板

3. 边缘检测(Laplacian)

通过二阶导数的形式找到图像中的边缘便是 Laplacian 算子,图像的二阶导数展示在图10,其模板展示在图 11,OpenCV 中的 Laplacian 函数实现该算子,代码如下,效果如图 12 所示。

图10:图像二阶导数

图11:Laplacian算子模板

图12:边缘检测效果

3. 边缘检测(Canny)

以上的算子是找到图像中像素值变化巨大的区域,而这个变化巨大的区域不一定是边缘,面对这个不足,John.F.Canny 提出一个 Canny 边缘检测算法,它具有低错误率,检测出的边缘是真正的边缘;良好的定位,检测出的边缘像素点与真正边缘的像素点距离近;对噪声不敏感,噪声不应该标注为边缘。Canny边缘检测算法有四个步骤:

  1. 降低对噪声的影响,对图像做高斯滤波或中值滤波,过滤噪声。

  2. 使用Sobel算子对图像的每个像素点求梯度大小和方向。

  3. 使用非极大值抑制算法在一组边缘中选取最好的边缘,具体做法是检查每个像素点与附近梯度方向一致的像素点,当前像素点梯度最大,则保留,否则去除。

  4. 使用双阈值(小阈值, 大阈值)确定最终的边缘,像素点梯度高于大的阈值,则保留;像素点低于小的阈值,则忽略;介于两个阈值之间,判断像素点与边缘像素点是否相连。

OpenCV 中 cv2.Canny 函数可以进行 Canny 边缘检测,示例代码如下,效果展示在图13。

图13:边缘检测效果

关注+星标【CV算法恩仇录】

相关推荐
郄堃Deep Traffic11 分钟前
机器学习+城市规划第十三期:XGBoost的地理加权改进,利用树模型实现更精准的地理加权回归
人工智能·机器学习·回归·城市规划
iceslime16 分钟前
旅行商问题(TSP)的 C++ 动态规划解法教学攻略
数据结构·c++·算法·算法设计与分析
aichitang20241 小时前
矩阵详解:从基础概念到实际应用
线性代数·算法·矩阵
databook1 小时前
概率图模型:机器学习的结构化概率之道
python·机器学习·scikit-learn
春末的南方城市2 小时前
中山大学&美团&港科大提出首个音频驱动多人对话视频生成MultiTalk,输入一个音频和提示,即可生成对应唇部、音频交互视频。
人工智能·python·深度学习·计算机视觉·transformer
AI视觉网奇2 小时前
调试快捷键 pycharm vscode
机器学习
春末的南方城市2 小时前
Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
人工智能·计算机视觉·自然语言处理·aigc·音视频
OpenCSG2 小时前
电子行业AI赋能软件开发经典案例——某金融软件公司
人工智能·算法·金融·开源
dfsj660113 小时前
LLMs 系列科普文(14)
人工智能·深度学习·算法
摘取一颗天上星️3 小时前
深入解析机器学习的心脏:损失函数及其背后的奥秘
人工智能·深度学习·机器学习·损失函数·梯度下降