Sobel边缘检测

news2024/11/23 12:35:47

声明:学习过程中的知识总结,欢迎批评指正。

基本原理

  1. 灰度处理:边缘检测是基于图像亮度变化实现的,而图像的亮度信息通过灰度图像体现,因此需要把彩色图像转换成灰度图像。
  2. 平滑处理:可以使用高斯滤波等滤波算法将图像中的噪声去除,使图像的信息更加纯粹,便于检测边缘信息。
  3. 计算梯度:使用Sobel算子计算图像的梯度,包括水平方向的算子Gx和垂直方向的算子Gy,分别用于检测水平方向和垂直方向的边缘。
  4. 计算梯度幅度和方向:对于每个像素,根据其水平方向和垂直方向的梯度值,计算梯度幅度和方向。梯度幅度通常使用以下公式计算:,梯度方向通常使用以下公式计算:
  5. 非极大值抑制:为了得到细的边缘,使用非极大值抑制处理梯度幅度图像。对于每个像素,如果其梯度幅度不是其邻域内沿梯度方向的最大值,则将其梯度幅度设为0。
  6. 双阈值处理:为了分离出真正的边缘,使用双阈值处理梯度幅度图像。选择两个阈值:高阈值和低阈值。对于每个像素,如果其梯度幅度大于高阈值,则认为它是边缘;如果其梯度幅度小于低阈值,则认为它不是边缘;如果其梯度幅度在两个阈值之间,则只有当它连接到一个边缘像素时,才认为它是边缘。

具体实现过程

灰度处理

不同的标准对应的RGB转灰度公式是不一样的,这里选用NTSC(National Television System Committee, 美国国家电视系统委员会)标准中的RGB888转YCbCr公式,这是目前中国乃至世界范围内使用最广泛的标准,具体公式如下:

Y = 0.299R +0.587G + 0.114B

Cb = 0.568(B-Y) + 128 = -0.172R-0.339G + 0.511B + 128

CR = 0.713(R-Y) + 128 = 0.511R-0.428G -0.083B + 128

由于FPGA无法处理浮点数,所以通过加法和移位来实现这一过程,具体公式如下:

Y = (77 R + 150G + 29 *B)>>8

Cb = (-43*R - 85 G + 128B)>>8 + 128

Cr = (128R - 107G - 21 *B)>>8 + 128

Y = (77 R + 150G + 29 *B )>>8

Cb = (-43*R - 85 G + 128B + 32768)>>8

Cr = (128R - 107G - 21 *B + 32768)>>8

平滑处理

对于图像的滤波有均值滤波、中值滤波和高斯滤波等多种滤波方式,其主要目的是增强图像的某些特性或消除某些不需要的信息。基本上都可以理解成是通过卷积实现的,这里以高斯滤波为例。

将图像中每个像素的颜色值替换为其邻域内像素颜色值的加权平均。这个权重由高斯函数决定,距离中心像素越近的像素权重越大,距离中心像素越远的像素权重越小。这样可以保证中心像素的颜色值最大程度地保留下来,而周围像素的颜色值则对其有所影响,从而达到模糊的效果。在实际应用中,通常会选择一个大小为 𝑛×𝑛 的窗口(其中 𝑛n是奇数),然后计算窗口内每个位置的高斯权重,形成一个高斯核。然后,这个高斯核会在图像上滑动,对每个像素及其邻域进行卷积操作,得到模糊后的图像。其中高斯核,是利用 高斯函数​ 生成的,3×3高斯核生成过程如下:

​卷积的实现过程如下:

这里借用其他博主的gif显示动画,有水印。

梯度值和方向计算

使用Gx和Gy两个卷积核分别对图像进行卷积,分别得出横向及纵向的亮度差分近似值,卷积过程与上面描述的高斯滤波卷积过程类似,不赘述。

关于梯度值的计算,在FPGA中乘法和开方消耗硬件逻辑资源较多,因此通常采用绝对值求和进行代替,即|G|=|Gx|+|Gy|。

关于梯度方向的计算,在FPGA中通过Cordic模块或者ip核进行实现,即通过移位和加法的操作实现角度计算。

非极大值抑制

非极大值抑制(Non-Maximum Suppression,简称NMS)是边缘检测中的一个重要步骤,它的主要目的是将边缘细化,即减少边缘的宽度。

在进行边缘检测时,检测出的边缘通常不是一个像素的宽度,而是有一定宽度的。这是因为实际的图像边缘往往并不是理想的锐利边缘,而是在过渡区域内灰度值发生渐变,因此检测出的边缘会有一定的宽度。非极大值抑制的目的就是为了解决这个问题。它的基本思想是在边缘检测得到的梯度图像中,对每一个像素,检查其是否是其所在梯度方向上的局部最大值。如果是,则保留;如果不是,则将其值抑制(通常设置为0),从而实现边缘的细化。

来自chatgpt4的举例:

双阈值处理

在进行了梯度计算和非极大值抑制后,我们得到的边缘图像可能还包含一些噪声和不明显的边缘。为了只保留真正的边缘并去除噪声,我们需要进行双阈值处理。

双阈值处理的思想是设置两个阈值:高阈值和低阈值。对于梯度幅度图像中的每一个像素:

  • 如果像素的强度大于高阈值,那么我们认为它是一个强边缘像素,直接标记为边缘。
  • 如果像素的强度小于低阈值,那么我们认为它不是边缘,将其抑制(通常设置为0)。
  • 如果像素的强度在两个阈值之间,我们则将其标记为弱边缘像素。这些像素可能是边缘,也可能是噪声。为了确定它们是否真正是边缘,我们会检查它们的邻域。如果弱边缘像素的邻域内有强边缘像素,我们就认为这个弱边缘像素是真正的边缘,因为它可能是边缘的一部分。否则,我们将其抑制。

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

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

相关文章

分离式网络变压器与传统网络变压器在电路设计中如何选择?

Hqst盈盛(华强盛)电子导读:今天分享的是:分离式网络变压器与传统网络变压器在电路设计中如何选择? 首先,我们要了解传统网络变压器和分离式网络变压器在设计上主要有以下不同点: 1、传统网络变…

Mac用虚拟机玩游戏很卡 Mac电脑玩游戏怎么流畅运行 苹果电脑怎么畅玩Windows游戏

对于许多Mac电脑用户而言,他们经常面临一个令人头疼的问题:在虚拟机中玩游戏时卡顿严重,影响了游戏体验。下面我们将介绍Mac用虚拟机玩游戏很卡,Mac电脑玩游戏怎么流畅运行的相关内容。 一、Mac用虚拟机玩游戏很卡 下面我们来看…

MATLAB实现粒子群算法优化柔性车间调度(PSO-fjsp)

柔性车间调度是典型的N-P问题,数学模型如下: 数学模型 假设有n个工件需要在m台机器上进行加工。每个工件包含一道或多道工序,每道工序可以在多台机器上进行加工,但每道工序的加工时间随机器的不同而不同。 符号定义 n&#xf…

【机器学习】机器学习中的人工神经元模型有哪些?

线性神经元 线性神经元(Linear Neuron)是一种基本的人工神经元模型,特点是其输出是输入的线性组合。线性神经元是神经网络中最简单的一种形式,适用于处理线性关系的问题。数学模型如下, y w ⋅ x b ∑ i 1 n w i x…

墨香戏韵,重塑经典

创意名称 墨香戏韵,重塑经典|基于AIGC对戏剧创新 创意概述 京剧作为中国传统戏曲之一,源远流长,承载了丰富的文化内涵和艺术特色。水墨画则是中国传统绘画的瑰宝,以其独特的墨色表达和极简的形式赢得了广泛的赞誉。我们的项目将…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…

自然抽样和平顶抽样

自然抽样和平顶抽样是两种信号处理和采样技术,它们在音频信号处理、信号重建以及数字信号处理中有着不同的应用。 1. 自然抽样(也称为理想抽样或无失真抽样):样值脉冲的幅度随原始信号m(t)的幅度而变; 自然抽样过程的…

VMware Workstation 安装 ESXI5.5 教程

一、创建虚拟机 VMware Workstation 16 创建虚拟机 二、挂载操作系统镜像 点击【编辑虚拟机设置】,然后选择【CD/DVD(IDE)】,点击【使用ISO映像文件】,点击【浏览】,选择需安装的操作系统镜像文件,点击【确定】 三、操作系统…

electron模板【lectron-react-boilerplate】多窗口配置【HtmlWebpackPlugin】多页面配置

如果您正在使用electron-react-boilerplate进行快速的Electron应用程序开发,您可能会遇到想要在桌面应用程序中拥有多个原生窗口的情况。 MacOS窗口图像由OpenClipart-Vectors提供,来源Pixabay。 开始之前需要提及的事情! Electron有一个主进程和渲染进程的模式。可以有多个…

Java 桥接模式(Bridge Pattern)是设计模式中的一种结构型设计模式,桥接模式的核心思想是将抽象与实现解耦

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式的核心思想是将抽象与实现解耦,使得它们可以独立扩展。 在桥接模式中,通常包含以下四个…

1)Java项目笔记搭建系统梳理相关知识

目录 前言项目结构Java部分Spring整合部分SpringBoot整合部分 模块说明规划 小结javarabbitmqmybatisspring最后推荐几本工具书 前言 工作有年头了,学到了很多技术,收获了很多。但是对与工作相关的专业技能知识的掌握杂而乱,不够全面系统。因…

博客没人看啊?我分析是这些原因

1.封面 主题封面还是个性化封面?主题封面对系列化很友好,如下图左: 在目录中什么主题一目了然,个性化封面在目录中就略显杂乱。但是通过观察CSDN主页发现热榜文章清一色个性化封面。如果使文字封面就会显得很无聊。 所以从提高浏…

数据库开发——并发控制(第十一章)

文章目录 前言并发执行例题一、封锁二、封锁协议三、可串行调度四、总结 学习目标:重点为并发控制的基本概念及几个基本协议 前言 数据库管理系统必须提供并发控制机制,保证事务的隔离性和一致性 并发执行例题 一、封锁 排他锁称为写锁,共…

实现一个渐进优化的 Linux cp 命令

1&#xff0c;第1版 copy 先写个轮廓 selfcp.c &#xff1a; #include <stdio.h>int main() {FILE *source, *destination;char ch;source fopen("H222.txt", "r");if (source NULL) {printf("Error opening source file!\n");retur…

浅谈网络通信(3)

文章目录 一、TCP[!]1.1、TCP协议报文格式1.2、TCP十大机制1.2.1、确认应答机制1.2.2、超时重传机制1.2.3、连接管理机制1.2.3.1、三次握手[其流程至关重要&#xff0c;面试必考]1.2.3.2.1、那为啥要建立连接&#xff1f;&#xff1f;建立连接的意义是啥&#xff1f;&#xff1…

c++编程(17)——deque的模拟实现(1)迭代器篇

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 博主模拟STL中的容器时&#xff0c;参考的是SGI版本的STL&#xff0c;如果你对STL的源码感兴趣&#xff0c;请私聊博主。 文章目录 deque的底层原理deque的迭代器deque迭代器的操作迭代器的随机访问操作 deque的底层…

类别不平衡

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、介绍1、过采样2、欠采样 二、过采样1、SMOTE&#xff08;常用&#xff09;1、算法流程2、算法实现3、参数介绍 2、ADASYN&#xff08;不常用&#xff09;1、算法流程…

车票信息的请求与显示

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 发送与分析车票信息的查询请求 得到了获取车票信息的网络请求地址&#xff0c;然后又分析出请求地址的必要参数以及车站名称转换的文件&#xff…

程序猿大战Python——函数——嵌套调用与变量作用域

嵌套调用及执行流程 目标&#xff1a;了解函数的嵌套调用。 函数的嵌套调用指的是&#xff1a;在一个函数中&#xff0c;调用了另一个函数。 嵌套调用语法&#xff1a; def 函数1():代码... ​ def 函数2():代码# 调用函数1函数1()... 说明&#xff1a; 在函数2中&#xff0c…

8个宝藏APP,个个都牛逼哈拉!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 目前win7已经逐渐淡出人们的视野&#xff0c;大部分人都开始使用win10&#xff0c;在日常工作和使用中&#xff0c;创客们下载神奇的软件能大幅提…