DIA——边缘检测
1.边缘
边缘是像素的突变位置。

2.常见边缘检测算法
通过找到一阶导数的极值点或者二阶导数的过零点来确定边缘像素的位置。边缘检测通常使用算子,即特定的卷积核。通过差分对离散的像素点求导,然后转化成卷积核进行卷积。使用卷积统一涵盖求导,高斯平滑等操作。
2.1Sobel 算子
原理
- 核心思想:通过计算图像中像素点的水平(X方向)和垂直(Y方向)梯度来检测边缘。
- 数学基础:使用两个3×3的卷积核分别对图像进行卷积运算,计算梯度。
- 水平核(检测垂直边缘):
[-1, 0, 1] [-2, 0, 2] [-1, 0, 1] - 垂直核(检测水平边缘):
[-1, -2, -1] [ 0, 0, 0] [ 1, 2, 1]
- 水平核(检测垂直边缘):
- 梯度计算:
- 水平梯度 ( G_x ) 和垂直梯度 ( G_y ) 通过卷积得到。
- 总梯度幅值:( G = \sqrt{G_x^2 + G_y^2} ),或近似为 ( |G_x| + |G_y| )。
步骤
- 用水平核和垂直核分别对图像卷积。
- 计算每个像素的梯度幅值。
- 设定阈值,幅值高于阈值的像素标记为边缘。
优缺点
- 优点:计算简单,速度快,适合实时处理。
- 缺点:对噪声敏感,边缘较粗,定位精度较低。
应用场景
- 快速检测图像中的明显边缘,如工业零件轮廓检测。
2.2. Prewitt 算子
原理
- 与Sobel类似,但卷积核权重不同,更注重边缘方向的均匀性。
- 水平核:
[-1, 0, 1] [-1, 0, 1] [-1, 0, 1] - 垂直核:
[-1, -1, -1] [ 0, 0, 0] [ 1, 1, 1] - 梯度计算与Sobel相同。
优缺点
- 优点:对垂直和水平方向边缘响应更均衡。
- 缺点:抗噪能力弱,边缘较模糊。
应用场景
- 需要平衡各方向边缘响应的场景,如简单图像分割。
2.3. Laplacian 算子
原理
- 核心思想:基于二阶导数检测边缘,直接寻找像素值的突变点(梯度变化率为零的点)。
- 卷积核(常用的两种):
- 四邻域核:
[ 0, -1, 0] [-1, 4, -1] [ 0, -1, 0] - 八邻域核(增强对角边缘响应):
[-1, -1, -1] [-1, 8, -1] [-1, -1, -1]
- 四邻域核:
- 响应特点:
- 正梯度区域(亮变暗)和负梯度区域(暗变亮)均会产生高响应。
- 边缘出现在过零点(Zero Crossing)附近。
步骤
- 对图像应用Laplacian核进行卷积。
- 检测过零点(需配合阈值判断)。
优缺点
- 优点:能同时检测边缘方向和强度,对孤立点敏感。
- 缺点:对噪声极度敏感,通常需先进行高斯滤波(如LOG算法,即Laplacian of Gaussian)。
应用场景
- 结合高斯滤波后用于高精度边缘检测,如医学图像分析。
2.4. Canny 算法
原理
Canny算法是一种多步骤优化的边缘检测方法,综合了抗噪能力与边缘定位精度,是实际应用中的黄金标准。
步骤
-
高斯滤波:
- 用高斯核平滑图像,抑制噪声。
- 高斯核示例(σ=1.4):
[2, 4, 5, 4, 2] [4, 9,12, 9, 4] [5,12,15,12, 5] [4, 9,12, 9, 4] [2, 4, 5, 4, 2]
-
梯度计算:
- 使用Sobel算子计算水平梯度 G x G_x Gx 和垂直梯度 G y G_y Gy。
- 梯度幅值 G = G x 2 + G y 2 G = \sqrt{G_x^2 + G_y^2} G=Gx2+Gy2,方向 θ = arctan ( G y / G x ) \theta = \arctan(G_y / G_x) θ=arctan(Gy/Gx)。
-
非极大值抑制(NMS):
- 在梯度方向上,仅保留幅值最大的像素点,抑制非极大值,使边缘变细。
-
双阈值处理:
- 高阈值( T high T_{\text{high}} Thigh):高于此值的像素为强边缘,直接保留。
- 低阈值( T low T_{\text{low}} Tlow):介于高低阈值之间的像素为弱边缘,仅当与强边缘连通时才保留。
- 典型阈值比例: T low = 0.4 × T high T_{\text{low}} = 0.4 \times T_{\text{high}} Tlow=0.4×Thigh,例如 T high = 100 T_{\text{high}}=100 Thigh=100, T low = 40 T_{\text{low}}=40 Tlow=40。
-
边缘连接:
- 通过形态学操作或连通性分析连接断裂的边缘。
优缺点
- 优点:抗噪能力强,边缘连续且细。
- 缺点:计算复杂度高,参数(高低阈值)需手动调整。
应用场景
- 高精度边缘检测,如自动驾驶中的车道线识别、人脸轮廓提取。
2.5. Roberts 算子
原理
- 核心思想:基于对角方向的一阶差分检测边缘。
- 卷积核:
- 对角线核1:
[1, 0] [0, -1] - 对角线核2:
[0, 1] [-1, 0]
- 对角线核1:
- 梯度计算:
- G = ( G 1 2 + G 2 2 ) G = \sqrt{(G_1^2 + G_2^2)} G=(G12+G22),或近似为 ∣ G 1 ∣ + ∣ G 2 ∣ |G_1| + |G_2| ∣G1∣+∣G2∣。
优缺点
- 优点:计算极快,适合资源受限场景。
- 缺点:对噪声敏感,仅检测对角边缘。
应用场景
- 简单实时系统,如嵌入式设备中的快速边缘检测。
算法对比总结
| 算法 | 抗噪能力 | 边缘粗细 | 计算速度 | 适用场景 |
|---|---|---|---|---|
| Sobel | 弱 | 较粗 | 快 | 实时处理、工业检测 |
| Prewitt | 弱 | 较粗 | 快 | 平衡各方向边缘 |
| Laplacian | 极弱 | 细 | 中等 | 高精度边缘(需滤波后) |
| Canny | 强 | 细 | 慢 | 高精度复杂场景 |
| Roberts | 极弱 | 细 | 极快 | 简单实时系统 |
实际应用建议
- 实时性要求高:选择Sobel或Roberts。
- 抗噪与精度平衡:优先使用Canny。
- 简单场景:尝试Laplacian结合高斯滤波(LOG算法)。
相关文章:
DIA——边缘检测
1.边缘 边缘是像素的突变位置。 2.常见边缘检测算法 通过找到一阶导数的极值点或者二阶导数的过零点来确定边缘像素的位置。边缘检测通常使用算子,即特定的卷积核。通过差分对离散的像素点求导,然后转化成卷积核进行卷积。使用卷积统一涵盖求导&…...
【万象论坛】论坛系统测试报告
一、项目背景 1.1项目起因 在当今数字化浪潮下,互联网技术呈爆发式发展,新技术、新框架、新应用场景不断涌现。从大型企业的数字化转型到初创公司的技术创新,各个层面都离不开互联网技术的支撑。然而,技术人员在学习与工作过程中…...
【AI工具】FastGPT:开启高效智能问答新征程
前言 在人工智能飞速发展的当下,各类 AI 工具如雨后春笋般涌现。FastGPT 作为一款基于大语言模型(LLM)的知识图谱问答系统,凭借其强大的数据处理和模型调校能力,为用户带来了便捷的使用体验。今天,就让我们…...
华为数字芯片机考2025合集1已校正
单选 1.以下低功耗措施中,哪种不是降低电路翻转率的方法? A.在不进行算术运算的时候,使这些模块的输入保持不变,不让新的操作数进来 B.采用Gray 码或One‐hot 码作为状态机编码 C.减少电路中的glitch D.重新安排“if‐else”表达…...
【TS学习】(23)理解类的双重角色
在 TypeScript 中,类(class)不仅是一个运行时的值(即可以实例化对象的构造函数),同时也是一个类型声明。具体来说,类在 TypeScript 中既声明了值,也声明了类型,并且它的类…...
多模态大模型在目标检测领域的最新进展
1. 技术融合创新 多模态数据融合: 传感器融合:整合图像、激光雷达(LiDAR)、毫米波雷达等数据,提升检测精度和鲁棒性。例如,在自动驾驶中,通过融合视觉与LiDAR数据,实现三维目标检测…...
HackMyVM - todd记录
HackMyVM - toddhttps://mp.weixin.qq.com/s/E_-hepdfY-0veilL1fl2QA...
bash脚本手动清空mysql表数据
文章目录 1、bash脚本手动清空mysql表数据 1、bash脚本手动清空mysql表数据 #!/bin/bash# 配置区域(修改此处) MYSQL_USER"root" MYSQL_PASSWORD"123456" MYSQL_HOST"localhost" DATABASES("hps-base:base_test_ite…...
【完整可用】使用openhtmltopdf生成PDF(带SVG)
文章目录 前言OpenHTMLToPDF 简介maven配置依赖字体文件demo代码其他资源放置截图防止maven编译字体文件 前言 AI和网上都是跑不起来或者版本过低的,还有各种BUG的。本文都是查阅官方文档得出的。如果你能跑起来请给个大大的赞! OpenHTMLToPDF 简介 Ope…...
CTF web入门之爆破
爆破 web21: 打开burp进行抓包 通过对密码进行解析。得知密码是由拼接而来 admin:1 选择要攻击的参数 攻击方式。 选择payload方式 。。添加参数 1,2,3。账号 分隔符 密码 选择加密方式。添加buse64.去掉url字符。不然buse64后,会在u…...
Java学习——day26(线程同步与共享资源保护)
文章目录 1. 线程同步与共享资源保护概述1.1 多线程安全问题1.2 解决方案:线程同步 2. 线程同步的常用方式2.1 使用 synchronized 关键字2.2 使用 ReentrantLock 3. 实践:多线程计数器示例4. 实践说明与运行步骤5. 总结与思考6.今日生词 1. 线程同步与共…...
用PHPExcel 封装的导出方法,支持导出无限列
用PHPExcel 封装的导出方法,支持导出无限列 避免PHPExcel_Exception Invalid cell coordinate [1 异常错误 /*** EXCEL导出* param [string] $file_name 保存的文件名及表格工作区名,不加excel后缀名* param [array] $fields 二维数组* param [array] $…...
7-openwrt-one通过web页面配置访客网络、无线中继等功能
前几个章节一直在介绍编译、分区之类的,都还没正常开始使用这个路由器的wifi。默认wifi是没有启动的,前面还是通过手动修改uci配置启动的,这个章节介绍下官方web页面的使用。特别是访客网络、无线中继 1、开启wifi,配置wifi基本信息 我们使用有线连接路由器,通过192.168.…...
Android使用声网SDK实现音视频互动(RTC)功能
一、前期准备 1、注册声网账号 声网官网 2、创建项目 拿到AppID,主要证书 二、代码部分 先上一下官方提供的demo地址: Agora-RTC-QuickStart: 此仓库包含 Agora RTC Native SDK 的QuickStart示例项目。 - Gitee.comhttps://gitee.com/agoraio-comm…...
FPGA_modelsim错误总结
1, 使用modelsim仿真DDR3报错Module ‘SIP_PHY_CONTROL‘ is not defined 在配置ddr3的时候vivado 速度太慢了,所以选用modelsim。我的是2018.3vivado,modelsim用了10.4 但是不行报错 然后看了帖子说 questasim可以下载了还是报错。 然后又…...
CExercise_09_2动态拼接字符串_1字符串拼接
题目: 标准库函数strcat会将一个字符串追加到另一个字符串的末尾。 现在我们编写一个函数把两个字符串拼接起来,返回拼接的结果,但要求不改变其中任何一个字符串。其函数声明如下: char* my_strcat(const char* prefix, const cha…...
【愚公系列】《高效使用DeepSeek》063-海关数据获取和管理
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
了解 DeFi:去中心化金融的入门指南与未来展望
去中心化金融,或 DeFi,代表着全球金融体系运作方式的革命性转变。它是一个总称,指的是一个不断增长的去中心化应用程序(dapp)、协议和平台生态系统,这些生态系统构建在公共区块链网络上,无需传统…...
Python爬虫第10节-lxml解析库用 XPath 解析网页
目录 引言 一、XPath简介 二、XPath常用规则 三、实例讲解 四、节点的选取 4.1 所有节点的选取 4.2 子节点的选取 4.3 父节点选取 五、属性匹配获取及文本获取 5.1 属性匹配 5.2 文本获取 5.3 属性获取 5.4 属性多值匹配 5.5 多属性匹配 六、按序选择 七、节点…...
Python基础知识点(类和对象)
""" 编程思维---解决问题的方式方法 面向过程---C语言 面向对象---C java python python中封装类的语法 class 类名(父类) 类体 注意: 1.类名--约定 大驼峰法 首字母要大写 2.父类如果有的话就写,没有的话…...
【LeetCode 热题100】139:单词拆分(动态规划全解析+细节陷阱)(Go语言版)
🚀 LeetCode 热题 139:单词拆分(Word Break)| 动态规划全解析细节陷阱 📌 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请判断 s 是否可以由字典中出现的单词拼接成。 说明:不要求字典…...
【C语言】预处理(预编译)(C语言完结篇)
一、预定义符号 前面我们学习了C语言的编译和链接。 在C语言中设置了一些预定义符号,其可以直接使用,预定义符号也是在预处理期间处理的。 如下: 可以看到上面的预定义符号,其都有两个短下划线,要注意的是ÿ…...
关于聊天室数据库建表
首先了解一下外键 一、外键的本质 定义:外键是某个表中的字段(或字段组合),其值必须与另一张表的主键值相匹配。 核心作用:强制数据一致性,维护表间关系。 二、外键的核心用途…...
Java 面试总结
1. Java 并发volatile 问题代码 class NumberDemo { //private AtomicInteger count = new AtomicInteger(0);private volatile int count = 0;public void add() {this.count++;}public int getCount() {return this.count;} }public class ThreadDemo {public static void m…...
基于 OpenHarmony 5.0 的星闪轻量型设备应用开发-Ch1 开发环境搭建
写在前面: 文本所写的工程创建均是基于 HH-SPARK-WS63 星闪无线模组。 此篇是系列文章《基于 OpenHarmony5.0 的星闪轻量型设备应用开发》的第 1 章。 1.1 介绍 HH-SPARK-WS63 星闪无线模组(以下简称 WS63)是由润和软件推出的基于海思 WS63V…...
离线安装 nvidia-docker2(nvidia-container-toolkit)
很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式 安装 nvidia-docker2 1 离线安装 (推荐) unzip解压后进入目录 dpkg -i *.d…...
H.264 NVMPI解码性能优化策略
H.264 NVMPI解码性能优化策略 1. 硬件与驱动配置 JetPack版本匹配:确保NVIDIA Jetson设备的JetPack SDK版本与CUDA驱动兼容,避免因驱动不匹配导致硬件解码性能下降8。显存分配优化:调整FFmpeg的-hwaccel_device参数指定GPU…...
2025年道路运输安全员证考试主要内容
道路运输安全员考试主要针对从事道路运输企业安全生产管理的人员,考核其对道路运输安全法律法规、安全管理知识及应急处置能力的掌握。 考试内容 1. 理论知识部分 安全生产法律法规 国家安全生产方针政策(如“安全第一、预防为主、综合治理”&#x…...
10、nRF52xx蓝牙学习(GPIOTE事件模式中断组件)
由于驱动组件库是可以直接调用的,那么编程者的任务就只有编写主函数 main。 #include <stdbool.h> #include "nrf.h" #include "nrf_drv_gpiote.h" #include "app_error.h" #include "boards.h" /* #ifdef BSP_BUTTO…...
第7篇:Linux程序访问控制FPGA端LEDR<五>
Q:如何设计.c程序代码实现FPGA端外设LEDR流水灯? A:在DE1-SoC开发板上实现的流水灯效果:一次只点亮一个红色LED,初始状态为向左移动直至点亮LEDR9,然后改变移动的方向为向右直至点亮LEDR0,以此…...
