Sobel边缘检测

2024-06-15 18:28
文章标签 检测 边缘 sobel

本文主要是介绍Sobel边缘检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

基本原理

  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)。
  • 如果像素的强度在两个阈值之间,我们则将其标记为弱边缘像素。这些像素可能是边缘,也可能是噪声。为了确定它们是否真正是边缘,我们会检查它们的邻域。如果弱边缘像素的邻域内有强边缘像素,我们就认为这个弱边缘像素是真正的边缘,因为它可能是边缘的一部分。否则,我们将其抑制。

这篇关于Sobel边缘检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064234

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

Android模拟器的检测

Android模拟器的检测 需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册。 1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等。 这个方案局限性太大,貌似现在大部分模拟器默认就是修改了的,还不需要人为的去修改。 经过测试,发现如下图所示。 如果是模拟器的话,这些特殊值应该返回true,比如DeviceIDS,Build。可是居然返回了false,说明特殊值