基于梯度的图像边缘检测

news2025/7/14 13:47:38

参考视频:https://www.bing.com/videos/search?q=a+computational+approach+to+edge+detection&docid=608014236869751913&mid=8C04384FFDD6A47533238C04384FFDD6A4753323&view=detail&FORM=VIRE
参考文献:A Computational Approach to Edge Detection

Edge Detection Using Gradients

1D边缘检测

边缘可以理解为一个小区域中图像强度的快速变化,假设f(x)的图像图下图所示:
在这里插入图片描述

那么很容易发现里面有2个边缘,一个上升一个下降的。
如果从梯度的角度进行理解,这两个边缘处在f(x)导数不为0的区域,其导函数如下图所示:

如果对导数取绝对值,那么可以发现边缘就处在峰值出现的地方。
在这里插入图片描述

2D边缘检测

推广一下1D的情况,在1D的情况下我们使用的是一阶导数,那么到了2D的情况,对应的就是偏导数,如果像素的位置用(x,y)表示,像素值用I(x,y)表示,那么I对x的偏导数就表示了在x方向上变化的速度,同理对y的偏导也是一样的,如果同时考虑2个偏导数,那么就是梯度向量 ∇ I \nabla I I
∇ I = [ ∂ I ∂ x , ∂ I ∂ y ] \nabla I = [\frac{\partial I}{\partial x}, \frac{\partial I}{\partial y}] I=[xI,yI]
下图展示了y方向上没有变化、x方向上没有变化以及两个方向都发生了变化的三种情况:
在这里插入图片描述

基于梯度我们可以定义梯度的大小和方向:
S = ∣ ∣ ∇ I ∣ ∣ = ( ∂ I ∂ x ) 2 + ( ∂ I ∂ y ) 2 S= ||\nabla I||=\sqrt{{(\frac{\partial I}{\partial x})}^2+{(\frac{\partial I}{\partial y})}^2} S=I=(xI)2+(yI)2
θ = t a n − 1 ( ∂ I ∂ y / ∂ I ∂ x ) \theta=tan^{-1}(\frac{\partial I}{\partial y}/\frac{\partial I}{\partial x}) θ=tan1(yI/xI)

在这里插入图片描述

离散化

由于真实处理的图像都是离散的像素点,因此我们要将导数都变成近似的离散值的计算,假设我们使用4个像素值来近似,那么如下式:
∂ I ∂ x ≈ 1 2 ϵ ( ( I i , j + 1 − I i + 1 , j + 1 ) + ( I i + 1 , j − I i , j ) ) \frac{\partial I}{\partial x}\approx \frac{1}{2\epsilon}((I_{i,j+1}-I_{i+1,j+1}) + (I_{i+1,j}-I_{i,j})) xI2ϵ1((Ii,j+1Ii+1,j+1)+(Ii+1,jIi,j))
∂ I ∂ y ≈ 1 2 ϵ ( ( I i + 1 , j + 1 − I i + 1 , j ) + ( I i , j + 1 − I i , j ) ) \frac{\partial I}{\partial y}\approx \frac{1}{2\epsilon}((I_{i+1,j+1}-I_{i+1,j}) + (I_{i,j+1}-I_{i,j})) yI2ϵ1((Ii+1,j+1Ii+1,j)+(Ii,j+1Ii,j))
其中, ϵ \epsilon ϵ是2个轴上的变化量。
图示:
在这里插入图片描述

可以发现,上面的式子是可以用卷积进行表示的:
在这里插入图片描述

把这种卷积称为梯度算子(Gradient Operators),实际上,我们还可以衍生出更多不同效果的梯度算子:

小的梯度算子和大的有什么区别?

小的算子可能会被局部的微小噪音干扰,而大的则对小噪音没有那么敏感,但是大的算子也会受到距离较远的像素的影像,localization没有小的算子好。

边缘阈值

如果要判断一个像素是不是属于边缘,那么就需要定义一个阈值,如果像素的梯度大小比阈值大,那么才认为是边缘:
∣ ∣ ∇ I ( x , y ) ∣ ∣ ≥ T ||\nabla I(x,y)||\ge T I(x,y)T
这是标准的方法,同时也可以定义一种类似于磁滞回线的方法,可以定义2个不同的阈值 T 0 T_0 T0 T 1 T_1 T1

  1. 如果梯度大小小于 T 0 T_0 T0,那么认为不是边缘。
  2. 如果梯度大小大于等于 T 1 T_1 T1,那么认为肯定是边缘。
  3. 如果在中间,那么当临近的像素是边缘的时候才认为它也是边缘。

效果如下图:
![[Pasted image 20221115135623.png]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图像去噪】基于空间光谱总变化减少高光谱图像的混合噪声(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

线程的“打断”

【打断线程的三个方法】: //Thread.java public void interrupt() //t.interrupt() 打断t线程(设置t线程某给标志位ftrue,并不是打断线程的运行) public boolean isInterrupted() //t.isInterrupted() 查询打…

线程池源码解析 1.前导_FutureTask源码解析

线程池—FutureTask源码解析 简介 在学习线程池之前,需要先学习一下 FutureTask,因为线程池 submit 的结果就是 FutureTask。 那么什么是 FutureTask,其表示一个未来的任务。也就是说这个任务比较耗时,当前调用线程会阻塞拿到这…

某程序员发现 CSDN官方“漏洞”,立省¥10000+,抓紧薅吧

是一个省钱的组织!!!它叫做勤学会,CSDN 官方背书。 打开这篇博客,你首先就要面对一个问题。 勤学会到底是什么?活动?社区?还是一个名词。 今天这篇博客就从解释【勤学会】这三个字开…

【Wins+VSCode】配置C++开发环境

目录1、安装vscode2、安装中文包和c扩展包3、安装c编译工具:g4、运行代码测试5、lauch.json6、tasks.json7、问题7.1、找不到gcc任务Reference1、安装vscode 官网下载就可以了,免费的: https://code.visualstudio.com/ 2、安装中文包和c扩展…

【Java项目】讲讲我用Java爬虫获取LOL英雄数据与图片(附源码)

🚀用Java爬一下英雄联盟数据 📓推荐网站(不断完善中):个人博客 📌个人主页:个人主页 👉相关专栏:CSDN专栏 🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚 &…

【Asesprite】快速自制Tileset瓦片地图集(俯视角)

使用Aseprite软件完成一个Tileset素材的制作,用于2D游戏开发。 目录 一、基础配置 二、草地和泥土 三、导出为TileSet素材 一、基础配置 1.创建一个96x48的画布。 2.在菜单中选择View-》GridSettings。 3.设置网格宽高为16x16。 4.点击View-》Show-》Grid显…

IOS手机和车机互联自动化测试

在酷热的夏天,提前打开空调;在寒冷的冬天,提前加热座椅和方向盘。这些贴心的功能都是通过手机远程控制汽车实现的。随着汽车新四化的进程推进,类似手机和车机连接的功能必然越来越多。 作为汽车行业的工程师,我们都知道…

Jenkins 忘记登录密码解决办法

今天给大家分享下 jenkins 登录密码忘记的解决办法,方法不唯一,都能解决问题,按照自己的习惯来做更好。 1、先停止 jenkins 服务 systemctl stop jenkins 此步骤可以结合 ps -ef | grep jenkins 和 kill -9 jenkins进程号 一起解决2、找到…

简单实用的Python图像处理库Pillow

Pillow图像处理Pillow 库的安装图象处理基本知识图像的RGB 色彩模式像素阵列Image 模块打开和新建混合透明度混合处理遮罩混合处理复制和缩放复制图像缩放像素缩放图像粘贴和裁剪粘贴裁剪图像图像旋转格式转换covert()transpose()分离和合并分离合并滤镜其他内置函数ImageFilte…

A Blockchain-Driven IIoT Traffic Classification Service for Edge Computing 论文学习

A Blockchain-Driven IIoT Traffic Classification Service for Edge Computing IEEE INTERNET OF THINGS JOURNAL,2021 文章目录A Blockchain-Driven IIoT Traffic Classification Service for Edge ComputingSummaryResearch Objective(s)Background / Problem S…

用Canvas绘制一个数字键盘

Hello啊老铁们,这篇文章还是阐述自定义View相关的内容,用Canvas轻轻松松搞一个数字键盘,本身没什么难度,这种效果实现的方式也是多种多样,这篇只是其中的一种,要说本篇有什么特别之处,可能就是纯…

OpenGL 灰度图

目录 一.OpenGL 灰度图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 灰度图 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 &…

振弦采集模块AABB 通讯协议

振弦采集模块AABB 通讯协议 AABB 通讯协议是一种非标准自定义协议, 相较于 MODBUS 通讯协议,结构更简单,指令生成方法更容易,便于进行快速测试。 AABB 通讯协议支持单寄存器读写两种指令。 ( 1) 读取单个寄…

《Care Bears 爱心熊》人物化身来到 The Sandbox 元宇宙!

无论你想要快乐、和谐、幸运还是温暖,都会有一个适合你的爱心熊人物化身!🐻 想成为一只爱心熊吗? 《爱心熊》作品集是由 3060 个独特的 The Sandbox 人物化身组成的作品集,可在欢快而多彩的元宇宙世界中玩耍。每个人物…

【Linux】软件包管理器yum和编辑器vim(内附动图)

大家好我是沐曦希💕 文章目录1.Linux 软件包管理器 yum1.1 什么是软件包1.2 第一个软件rzsz2.Linux编辑器-vim使用2.1 vim的基本概念2.2 vim的基本操作2.3 命令模式2.3.1 光标定位2.3.2 文本复制2.4 插入模式2.5 底行模式2.5.1 调用和取消行号2.5.2 底行&#xff01…

Node.js | 详解 Cookie-Session登录验证 的工作原理

🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 本系列专栏:Node.js从入门到精通 👉 你的一键三连是我更新的最大动力❤️! 📢 欢迎私信博主加入前端交流群🌹 …

Maven版本3.6.1环境配置安装

官网下载安装包配置maven环境变量配置本地仓库以及阿里云镜像官网下载安装包 下载maven安装包官网地址,解压即可使用,推荐下载apache-maven-3.6.1-bin.zip 配置maven环境变量 找到此电脑右键-->点击属性-->选择高级系统设置-->点击环境变量--&g…

EPICS记录参考--计算输出记录(calcout)

计算输出或"Calcout"记录类似于Calc记录,其增加了能够输出的特性(一个"output link"和一个"output event"),根据计算结果条件地执行它们。这种特性允许在一个EPICS数据库内实现了条件分支(例如:只在Record_B有…

BERT预训练模型学习笔记

1.Transforme 1.1 要做一件什么事 基本组成依旧是机器翻译模型中常见的Seq2Seq网络输入输出都很直观,其核心架构就是中间的网络设计了MxN,输入M,输出N 1.2 传统的RNN网络有什么问题 传统RNN是一个时序模型,下一个RNN的输入依靠…