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

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

Canny边缘检测算法

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

边缘检测

描述

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

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

步骤

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

图像降噪

噪声

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

降噪处理

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

首先了解平滑处理

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

计算图像梯度

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

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

非极大值抑制

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

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

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

阈值筛选

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

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

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

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

步骤

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

最后提取的结果

目录
相关文章
|
2月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
26 1
|
2月前
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(二)
FPGA强化(10):基于Sobel算法的边缘检测(二)
41 0
|
2月前
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(一)
FPGA强化(10):基于Sobel算法的边缘检测
21 0
|
4月前
|
算法 数据可视化 计算机视觉
使用Python实现图像处理中的边缘检测算法
图像处理中的边缘检测是计算机视觉和图像识别领域的重要技术之一。本文将介绍如何利用Python语言实现常见的边缘检测算法,包括Sobel、Canny等,并结合实例演示其在图像处理中的应用。
181 16
|
4月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
211 0
|
4月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
154 0
|
4月前
|
算法 vr&ar
1611F - ATM and Students详细题解(*1800,线段树维护前缀和;双指针算法(思维))
1611F - ATM and Students详细题解(*1800,线段树维护前缀和;双指针算法(思维))
36 0
|
11月前
|
算法
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
|
15天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
15天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。