深度学习传统CV算法——边缘检测算法综述

2023-05-16

边缘检测

  • 边缘概述
    • 认识边缘
      • 定义
      • 轮廓和边缘的关系
      • 边缘的类型
  • 边缘检测的概念
    • 概念
  • 边缘检测方法
  • 基本方法
      • 图像滤波
      • 图像增强
      • 图像检测
      • 图像定位
  • 边缘检测算子的概念
  • 常见的边缘检测算子
  • 用梯度算子实现边缘检测的原理
    • 梯度算子
      • 边缘点
      • 梯度
      • 梯度算子
    • 梯度如何衡量
    • 使用梯度算子实现边缘检测
      • 原理
      • 实现
    • 参考

边缘概述

认识边缘

定义

边缘是不同区域的分界线,是周围(局部)灰度值有显著变化的像素点的集合,有幅值方向两个属性。这个不是绝对的定义,主要记住边缘是局部特征,以及周围灰度值显著变化产生边缘。

轮廓和边缘的关系

一般认为轮廓是对物体的完整边界的描述,边缘点一个个连接起来构成轮廓。边缘可以是一段边缘,而轮廓一般是完整的。人眼视觉特性,看物体时一般是先获取物体的轮廓信息,再获取物体中的细节信息,比如看到几个人站在那,我们一眼看过去马上能知道的是每个人的高矮胖瘦,然后才获取脸和衣着等信息。
总结:边缘组合起来可以构成轮廓,轮廓可以由多个边缘组成。

边缘的类型

简单分为4种类型,阶跃型、屋脊型、斜坡型、脉冲型,其中阶跃型和斜坡型是类似的,只是变化的快慢不同,同样,屋脊型和脉冲型也是如此。在边缘检测中更多关注的是阶跃和屋脊型边缘。见图1,(a)和(b)可认为是阶跃或斜坡型,(c)脉冲型,(d)屋脊型,阶跃与屋脊的不同在于阶跃上升或下降到某个值后持续下去,而屋脊则是先上升后下降。
在这里插入图片描述

边缘检测的概念

概念

边缘检测是图像处理与计算机视觉中极为重要的一种分析图像的方法,它的目的是找到图像中亮度变化剧烈的像素点构成的集合,表现出来往往是轮廓。如果图像中边缘能够精确的测量和定位,那么,就意味着实际的物体能够被定位和测量,包括物体的面积、物体的直径、物体的形状等就能被测量。在对现实世界的图像采集中,有下面4种情况会表现在图像中时形成一个边缘。

  1. 深度的不连续(物体处在不同的物平面上);
  2. 表面方向的不连续(如正方体的不同的两个面);
  3. 物体材料不同(这样会导致光的反射系数不同);
  4. 场景中光照不同(如被树萌投向的地面);
    在这里插入图片描述
    例如上面的图像是图像中水平方向7个像素点的灰度值显示效果,我们很容易地判断在第4和第5个像素之间有一个边缘,因为它俩之间发生了强烈的灰度跳变。在实际的边缘检测中,边缘远没有上图这样简单明显,我们需要取对应的阈值来区分出它们。

边缘检测方法

基本方法

一般图像边缘检测方法主要有如下四个步骤:

图像滤波

作用:进行去噪
传统边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出的是,大多数滤波器在降低噪声的同时也造成了了边缘强度的损失,因此,在增强边缘和降低噪声之间需要一个折衷的选择。

图像增强

增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度的幅值来完成的。

图像检测

在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判断依据是梯度幅值。

图像定位

如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。

边缘检测算子的概念

在这里插入图片描述

在数学中,函数的变化率由导数来刻画,图像我们看成二维函数,其上面的像素值变化,当然也可以用导数来刻画,当然图像是离散的,那我们换成像素的差分来实现。对于阶跃型边缘,图2中显示其一阶导数具有极大值,极大值点对应二阶导数的过零点,也就是,准确的边缘的位置是对应于一阶导数的极大值点,或者二阶导数的过零点(注意不仅仅是二阶导数为0值的位置,二值正负值过渡的零点)。故边缘检测算子的类型当然就存在一阶和二阶微分算子。

常见的边缘检测算子

近20多年来提出了许多边缘检测算子,在这里仅讨论集中常见的边缘检测算子。
在这里插入图片描述

  1. 常见的一阶微分边缘算子包括Roberts,Prewitt,Sobel,Kirsch以及Nevitia,
  2. 常见的二阶微分边缘算子包括Laplace算子,LOG算子,DOG算子和Canny算子等。
  3. 其中Canny算子是最为常用的一种,也是当前被认为最优秀的边缘检测算子。 此外本文还会介绍一种边缘检测方法SUSAN,它没有用到图像像素的梯度(导数)。以及本文会概述一些新兴的边缘检测方法,如小波分析,模糊算法以及人工神经网络等。

用梯度算子实现边缘检测的原理

梯度算子

边缘点

对应于一阶微分幅度的最大值点以及二阶微分的零点。

梯度

一个曲面沿着给定方向的倾斜程度,在单变量函数中,梯度只是导数,在线性函数中,是线的斜率——有方向的向量。

梯度算子

梯度属于一阶微分算子,对应一阶导数。若图像含有较小的噪声并且图像边缘的灰度值过渡较为明显,梯度算子可以得到较好的边缘检测结果。Canny,Sobel都属于梯度算子

梯度如何衡量

对于连续函数f(x,y),我们计算出了它在(x,y)处的梯度,并且用一个矢量(沿x方向和沿y方向的两个分量)来表示,如下:

对于连续函数 f ( x , y ) \mathrm{f}(\mathrm{x}, \mathrm{y}) f(x,y), 我们计算出了它在 ( x , y ) (\mathrm{x}, \mathrm{y}) (x,y) 处的梯度, 并且用一个矢量 ( ( ( 沿 x \mathrm{x} x 方向和沿 y \mathrm{y} y 方向的两个分量) 来表示, 如下:
G ( x , y ) = [ G x G y ] = [ ∂ f ∂ x ∂ f ∂ y ] \mathrm{G}(\mathrm{x}, \mathrm{y})=\left[\begin{array}{l} G_{x} \\ G_{y} \end{array}\right]=\left[\begin{array}{l} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{array}\right] G(x,y)=[GxGy]=[xfyf]
现在我们需要衡量梯度的幅值, 可以用到以下三种范数:
∣ G ( x , y ) ∣ = G x 2 + G y 2 , 2  范数梯度  ∣ G ( x , y ) ∣ = ∣ G x ∣ + ∣ G y ∣ , 1  范数梯度  ∣ G ( x , y ) ∣ ≈ max ⁡ ( ∣ G x ∣ , ∣ G y ∣ ) , ∞  范数梯度  \begin{array}{r} |\mathrm{G}(\mathrm{x}, \mathrm{y})|=\sqrt{G_{x}^{2}+G_{y}^{2}}, 2 \text { 范数梯度 } \\ |\mathrm{G}(\mathrm{x}, \mathrm{y})|=\left|G_{x}\right|+\left|G_{y}\right|, \quad 1 \text { 范数梯度 } \\ |\mathrm{G}(\mathrm{x}, \mathrm{y})| \approx \max \left(\left|G_{x}\right|,\left|G_{y}\right|\right) \quad, \quad \infty \text { 范数梯度 } \end{array} G(x,y)=Gx2+Gy2 ,2 范数梯度 G(x,y)=Gx+Gy,1 范数梯度 G(x,y)max(Gx,Gy), 范数梯度 
要注意的是,由于使用2范数梯度要对图像中的每个像素点进行平方及开方运算,计算复杂度高,在实际应用中,通常取绝对值或最大值来近似代替该运算以实现简化,与平方及开方运算相比,取绝对值或最大值进行的边缘检测的准确度和边缘的精度差异都很小。

使用梯度算子实现边缘检测

原理

基于梯度算子的边缘检测大多数是基于方向导数求卷积的方法

实现

以3×3的卷积模板为例。
在这里插入图片描述
设定好卷积模板后,将模板在图像中移动,并将图像中的每个像素点与此模板进行卷积,得到每个像素点的响应R,用R来表征每个像素点的邻域灰度值变化率,即灰度梯度值,从而可将灰度图像经过与模板卷积后转化为梯度图像。模板系数𝑊𝑖(i=1,2,3,……9)相加的总和必须为零,以确保在灰度级不变的区域中模板的响应为零。Z表示像素的灰度值 :
R = W 1 Z 1 + W 2 Z 2 + ⋯ + W 9 Z 9 \mathrm{R}=W_{1} Z_{1}+W_{2} Z_{2}+\cdots+W_{9} Z_{9} R=W1Z1+W2Z2++W9Z9
然后我们设定一个阈值,如果卷积的结果R大于这个阈值,那么该像素点为边缘点,输出白色;如果R小于这个阈值,那么该像素不为边缘点,输出黑色。于是最终我们就能输出一幅黑白的梯度图像,实现边缘的检测。

参考

链接: G-Lab.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习传统CV算法——边缘检测算法综述 的相关文章

  • SAP-PI/PO ICO中增加过滤条件

  • 今日头条笔试之手串问题

    一 问题描述 题目摘自牛客网 xff0c 可以到牛客网直接查找 xff0c 现直接贴上原题目描述 作为一个手串艺人 xff0c 有金主向你订购了一条包含n个杂色串珠的手串 每个串珠要么无色 xff0c 要么涂了若干种颜色 为了使手串的色彩看
  • VS2015对WDK10驱动程序进行双机调试

    1 设置Visual Studio 2015调试方式 xff1a 主计算机 xff1a WIN7 64位 虚拟机 xff1a WIN7 64位 调试器 xff1a VS2015 调试的软件 xff1a 内核驱动程序 一 主计算机和虚拟机两台
  • Node.js下载及安装步骤

    一 安装环境 1 本机系统 xff1a Windows 11 xff08 64位 xff09 2 Node js xff1a v16 14 2LTS xff08 64位 xff09 二 安装Node js步骤 1 下载对应系统的Node j
  • IDEA中设置默认Maven配置

    一 每次打开项目时修改maven配置 xff08 默认的maven地址可能不是我们想要的 xff0c 可以通过下面方法修改 xff09 二 配置默认的地址 第一种方法太麻烦 xff0c 每次打开项目都需要配置maven xff0c 我们可以
  • sql server 2014下载及安装步骤—图解

    注意 xff1a 1 Win10之后的系统 xff0c 在安装之前需要安装 net framework 3 5 sp1 xff0c 以免后续安装报错 2 Express版本为缩减版 xff0c 无SSMS xff0c 需自行下载 xff0c
  • win11安装IIS步骤—图解

    1 使用快捷键win 43 r 输入control 打开控制面板 xff0c 然后点击程序 xff0c 选择启用或关闭Windows功能 xff0c 勾选Internet Information Services 默认安装IIS 2 通过
  • SqlServer怎么计算两个日期之差,精确到毫秒计算

    DateTime xff1a 字段类型对应的时间格式是 yyyy MM dd HH mm ss fff xff0c 3个f xff0c 精确到1毫秒 ms xff0c 示例 2023 01 07 10 06 15 433 DateTime2
  • 直接在浏览器中访问程序无问题,在IIS中点击浏览网站无反应

    问题 xff1a 直接在浏览器中访问程序无问题 xff0c 在IIS中点击浏览网站无反应 解决方案 xff1a 在设置中点击应用后设置默认的浏览器
  • 在IIS中发布NetCore程序

    需安装的软件 xff0c 如下图所示 软件下载地址 xff1a https dotnet microsoft com en us download dotnet 注意 xff1a 发布的程序版本必须和本地安装的一致 xff0c 否则会报错
  • PotPlayer优化与最高画质设置(最强本地播放器)

    一 前言 软件 xff1a PotPlayer 描述 xff1a 被誉为本地视频最好用的播放器 xff01 PotPlayer下载地址参考 xff1a https potplayer org 推荐Potplayer论坛 xff1a http
  • 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟

    基于51单片机 74HC595移位寄存器 8位数码管时钟 Proteus仿真 实例代码 span class token macro property span class token directive hash span span cl
  • 51单片机外部中断使用示例程序

    51单片机外部中断使用示例程序 本实例来源以STC89演示示例 xff0c 为了方便初学者更好的阅读 xff0c 直接将其贴出来 首先分享一份 STC单片机资源一览表 你也可以从https www stcisp com 下载到 xff0c
  • 使用kubeadm部署kubernetes集群

    一 安装环境准备 1 安装环境 xff1a centos7 5 xff0c 一个master节点 xff0c 两个node节点 CentOS Linux release 7 5 1804 Core 2 设置 etc hosts文件的IP和主
  • 【Proteus仿真】51单片机自定义倒计时

    Proteus仿真 51单片机自定义倒计时 Proteus仿真 类似一个时间闹铃的一个功能 只不过这是只是一个用来倒计时的 程序源码 span class token comment 实验说明 实验接线 1 动态数码管模块 gt 单片机管脚
  • 微信小程序云开发之数据库操作

    一 初始化 xff1a 在做数据的操作 xff08 增删改查 xff09 之前 xff0c 先要获取数据库的对象 xff0c 可以通过wx cloud database函数来获取到 xff0c 这个函数默认会使用wx cloud init方
  • QT中QTablewidget表格常用操作

    QTabwidget常用操作 0 QTableWidget初始化示例1 列设置 xff08 表头 xff09 1 1 添加表头1 2 设置表头样式 xff08 颜色和字体 xff09 1 3 设置表头宽度1 4 自适应表头宽度1 5 设置表
  • qt获取天气代码

    qt显示天气信息 1 发送网络请求获取天气数据1 1 需要包含的头文件1 2 创建QNetworkAccessManager对象1 3 发送请求1 4 获取数据并解析 2 天气JSON格式数据3 demo代码4 最终效果 1 发送网络请求获
  • qt弹窗界面模态设置

    1 模态说明 模态 xff1a 启动模态界面时 xff0c 例如弹出对话框强制用户从其他正在进行的业务中聚焦到当前对话框 xff0c 除了该对话框整个应用程序窗口都无法接受用户响应 xff0c 无法切换界面 xff0c 无法切换当前Qt应用

随机推荐

  • QTabWidget常用样式设置

    1 前言 个人使用qt xff0c 感觉QTabwidget是个非常好用的控件 xff0c 但有时候总是感觉其tab样式不好控制或说不够灵活 xff0c 从而导致放弃使用该控件 比如说 xff0c 标签横向显示的时候 xff0c 文字随之也
  • qt环形进度条控件设计

    上效果 推荐文章 xff1a qt电池控件设计 xff1a https blog csdn net weixin 42887343 article details 113932145QWidget控件拖动 xff1a https blog
  • GPL协议认识

    图片链接 xff1a https www runoob com w3cnote open source license html GPL协议 1 GPL GNU General Public License xff0c GNU通用公共许可协
  • C++中的Lambda函数

    Lambda函数也叫匿名函数 xff0c 是自定义函数的一种 专指用关键字 lambda 定义的无名短函数 xff0c 所以也有Lambda表达式这种说法 这种函数得名于省略了用def声明函数的标准步骤 xff0c 是C 43 43 11中
  • go语言判断文件是否为UTF8编码

    一 思路 xff1a 1 UTF8编码规则 xff1a 对于单字节字符 xff0c 8个比特位最高位为0 对于多字节字符 xff0c 若字符由n个字节组成 xff0c 则第一个字节8个比特中最高n位都是1 xff0c 剩下n 1字节中最高位
  • qtcreator调试经常断点导致卡死问题解决

    一 问题描述 在qt开发中 xff0c 使用debuging进行调试 xff08 点击下面按钮 xff09 总会出现 xff0c 软件运行还好 xff0c 就是运行到断点的时候 xff0c 软件一直在等待卡死 在windows上面没有遇到过
  • python+opencv读取摄像头并显示

    解释看注释 xff0c 直接上代码 xff01 span class token keyword import span cv2 span class token comment 打开本地摄像头 span cap span class to
  • python+opencv拉流(串流)

    解释看注释 xff0c 直接上代码 xff01 span class token keyword import span cv2 span class token comment 流链接 span url span class token
  • python+opencv做一个视频录制器(mp4)

    1 功能说明 代码的功能就是读取摄像头视频显示 xff0c 并同时保存为mp4文件 xff0c 示例代码为1小时保存一个视频 2 代码 解释看注释 xff0c 直接上代码 xff01 span class token keyword imp
  • [Python] Pandas 中 read_csv 与 read_hdf 速度对比

    1 read csv VS read hdf 一般情况下 我们习惯使用 Pandas 中的 read csv 函数来读取 CSV 文件 但当 CSV 文件比较大时 read csv 的速度会显得有点慢 这时可以考虑使用 HDF5 格式来存储
  • inode节点(详解)

    首先 xff0c 要明确理解inode是理解Linux Unix文件系统和硬盘存储的基础 1 什么是inode xff1f 理解inode xff0c 要从文件存储说起 文件存储在硬盘上 xff0c 硬盘的最小存储单位叫做 扇区 每个扇区能
  • 8b/10b编码技术系列(一):Serdes、CDR、K码

    和大家分享一下关于8b 10b编码的知识点 xff0c 如有什么错误之处或大家有什么额外的见解欢迎大家公众号后台留言 xff01 一 Serdes高速收发器 在传统的源同步传输中 xff0c 数据和时钟分离 xff0c 在速率较低 lt 1
  • Java处理文件时常用的文件类型及对应的contentType

    2023 3 02 项目管理系统中对项目文档的处理 本来全部设置的是二进制流 xff0c 发现下载后没有文件类型和文件名称 对应的解决办法 xff1a 上传 下载的时候对文件类型进行说明 上传 span class token keywor
  • 51单片机入门-点亮第一个LED灯

    前期准备 keil软件的安装 可以参考我的另一篇文章 https blog csdn net weixin 42911200 article details 81590158 安装烧录软件和添加单片机 由于笔者所用的芯片为STC89C52
  • 基于Docker的容器集群调度机制的设计与实现

    本文来自于北京邮电大学2018年硕士论文的整理 xff0c 作者李战 论文主要分为如下四部分 一 集群调度架构总结 1 xff09 中央式架构 最原始 xff0c k8s xff0c swarm均是该调度方式 由于所有任务都由唯一的调度器处
  • Linux版的Mysql基本操作命令整理

    1 更改密码 SET PASSWORD 61 PASSWORD 39 123456 39 ALTER USER 39 root 39 64 39 localhost 39 PASSWORD EXPIRE NEVER flush privil
  • 关于MySQL5.7 密码策略/审计日志开启详细步骤

    一 配置密码策略 登录mysql xff1a mysql u root p 输入密码 xff1a xxxxxx xff08 以实际情况为例 xff0c 例如 xff1a 123456 xff09 目标密码策略 xff1a 至少一个大写 至少
  • 软件测试的基本理论-黑盒测试-1

    黑盒测试方法 一 黑盒测试方法1 xff0c 等价类划分法a 等价类划分概述等价类划分 b xff1a 设计测试用例等价类划分demo 2 边界值分析法边界值分析法概述边界值分析法demo 3 因果图方法因果图设计方法因果图设计demo 4
  • Python二维插值(scipy.interpolate.interp2d)注意输入参数维度问题

    问题描述 SGLI将数据的经纬度进行了重采样 xff0c 例如本来是10001000的图像重采样到了100100像元 xff0c 这导致在对影像插值时需要先把经 纬度重采样到1000 1000 xff0c 本文主要记录在重采样中遇到的输入数
  • 深度学习传统CV算法——边缘检测算法综述

    边缘检测 边缘概述认识边缘定义轮廓和边缘的关系边缘的类型 边缘检测的概念概念 边缘检测方法基本方法图像滤波图像增强图像检测图像定位 边缘检测算子的概念常见的边缘检测算子用梯度算子实现边缘检测的原理梯度算子边缘点梯度梯度算子 梯度如何衡量使用