利用最简单的思维理解Canny边缘检测算法的核心思想

简介: 帮助快速简单的理解Canny边缘检测算法,适合有一定基础的计算机视觉选手。

Canny边缘检测算法

学习完鲁鹏老师的课后的算法总结,适合有一定基础的计算机视觉选手,帮助理解Canny边缘检测算法!

边缘检测

描述

边缘检测是基于灰度突变来分割图像的常用方法,其实质是提取图像中不连续部分的特征。目前常见边缘检测算子有差分算子、Roberts算子、Sobel算子、Prewitt算子、Log算子以及Canny算子等。

其中,Canny算子是由计算机科学家John F. Canny于1986年提出的一种边缘检测算子,是目前理论上相对最完善的一种边缘检测算法。

步骤

  • 图像降噪
  • 计算图像梯度
  • 非极大值抑制
  • 阈值筛选

图像降噪

噪声

图像噪声有大体三种,椒盐噪声、脉冲噪声、高斯噪声。其中椒盐噪声和脉冲噪声是随机出现在像素点上的,而高斯噪声则是在每个点都随机叠加一个随机的像素值。

降噪处理

本文只介绍高斯噪声的去噪方法,前两种噪声采用中值滤波处理,可自行学习了解。

首先了解平滑处理

而高斯噪声利用高斯卷积核卷积处理,可理解为越靠近中间权值越大。

计算图像梯度

图像求导的意思为在某个方向上像素变化的快慢,其中可分解为对x方向上的求导核y方向上的求导。

由图像上的公式可得求导步骤也可由卷积核卷积得到,对两个方向求导后求梯度得模则可以得到相应图像得边缘提取图像。

非极大值抑制

非极大值像素梯度抑制的目的在于消除边缘检测带来的杂散响应,起到将边缘“瘦身”的作用。其基本方法是将当前像素梯度强度与沿正负梯度方向上的相邻像素的梯度强度进行比较,若其最大(即为极值),则保留该像素为边缘点,若不是最大,则对其进行抑制,不将其作为边缘点。为了更精确计算,通常在跨越梯度方向的两个相邻像素之间使用线性插值来得到要参与比较的像素梯度。

如果图像上一段区域像素变化大且范围大,则会造成边缘过厚得情况。

处理方法简单判断是否为中间的点

阈值筛选

通过前面的操作我们能得到一副边缘检测的图像,且线条为细线条,但是如果梯度阈值选取不同,则会影响图像的边缘提取结果,如下。

那么有没有什么好方法能解决呢?

一种解决方法则是利用双阈值法处理

定义一个高阈值和一个低阈值。梯度强度低于低阈值的像素点被抑制,不作为边缘点;高于高阈值的像素点被定义为强边缘,保留为边缘点;处于高低阈值之间的定义为弱边缘,留待进一步处理。

步骤

  • 分别利用两种阈值获取图像
  • 在高阈值的边缘接上低阈值的曲线

最后提取的结果

目录
相关文章
|
5月前
|
机器学习/深度学习 算法 Python
matlab思维进化算法优化BP神经网络
matlab思维进化算法优化BP神经网络
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
159 1
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(二)
FPGA强化(10):基于Sobel算法的边缘检测(二)
171 0
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(一)
FPGA强化(10):基于Sobel算法的边缘检测
129 0
|
算法 数据可视化 计算机视觉
使用Python实现图像处理中的边缘检测算法
图像处理中的边缘检测是计算机视觉和图像识别领域的重要技术之一。本文将介绍如何利用Python语言实现常见的边缘检测算法,包括Sobel、Canny等,并结合实例演示其在图像处理中的应用。
485 16
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
800 0
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
658 0
|
8天前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
|
9天前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
|
10天前
|
负载均衡 算法 调度
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
82 11

热门文章

最新文章