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

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

Canny边缘检测算法

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

边缘检测

描述

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

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

步骤

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

图像降噪

噪声

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

降噪处理

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

首先了解平滑处理

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

计算图像梯度

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

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

非极大值抑制

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

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

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

阈值筛选

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

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

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

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

步骤

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

最后提取的结果

目录
相关文章
|
8月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
机器学习/深度学习 算法 Python
matlab思维进化算法优化BP神经网络
matlab思维进化算法优化BP神经网络
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
306 1
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(二)
FPGA强化(10):基于Sobel算法的边缘检测(二)
298 0
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(一)
FPGA强化(10):基于Sobel算法的边缘检测
280 0
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
1221 0
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
1218 0
|
8月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
733 0
|
8月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
457 2
|
9月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
377 3

热门文章

最新文章