机器视觉--索贝尔滤波
引言
在图像处理领域,边缘检测是一项至关重要的任务,它能够帮助我们识别图像中不同区域的边界,为后续的目标识别、图像分割等操作奠定基础。索贝尔滤波(Sobel Filter)作为一种经典的边缘检测算法,因其简单高效的特点被广泛应用。在功能强大的机器视觉软件 Halcon 中,也提供了对索贝尔滤波的支持。本文将详细介绍 Halcon 中索贝尔滤波的原理、应用场景,并通过具体的程序示例展示其在实际中的使用方法。
索贝尔滤波原理
基本概念
索贝尔滤波是一种基于卷积运算的边缘检测方法,它通过计算图像在水平和垂直方向上的一阶导数来检测边缘。在图像中,边缘通常对应着像素值的急剧变化,而导数可以很好地描述这种变化。索贝尔滤波器使用两个3x3的卷积核,分别用于计算水平向(Gx)和垂直方向(Gy)的梯度。
卷积核

梯度计算
对于图像中的每个像素点,将其周围3X3邻域内的像素值别与Sx和Sy进行卷积运算,得到该像素点在水平和垂直方向上的梯度分量Gx和Gy。然后,可以通过以下公式计算该像素点的梯度幅值G和梯度方向θ:

在实际应用中,为了简化计算,也可以使用近似公式G≈|Gx|+|Gy|算梯度幅值。
索贝尔滤波的应用场景
目标检测
在目标检测任务中,边缘信息可以帮助我们快速定位目标的轮廓,从而提高检测的准确性和效率。索贝尔滤波可以有效地提取图像中的边缘,为后续的目标识别算法提供重要的特征信息。
图像分割
图像分割是将图像划分为不同区域的过程,边缘信息在分割过程中起着关键作用。通过索贝尔滤波检测到的边缘可以作为分割的边界,帮助我们将图像分割成不同的对象或区域。
纹理分析
纹理是图像的重要特征之一,索贝尔滤波可以突出图像中的纹理细节,从而有助于纹理分析和分类。例如,在织物纹理检测、地质纹理分析等领域,索贝尔滤波都有广泛的应用。
Halcon 中索贝尔滤波的实现
主要函数
在 Halcon 中,使用sobel_amp函数可以实现索贝尔滤波,该函数的原型如下:
sobel_amp(Image : EdgeAmplitude : FilterType, Size : )
参数说明:
Image:输入的原始图像。EdgeAmplitude:输出的边缘幅值图像,即经过索贝尔滤波后得到的图像。FilterType:滤波器类型,常见的值有'sum_abs'(使用近似公式G≈|Gx|+|Gy|计算梯度幅值)和'sqrt'(使用精确公式
计算梯度幅值)。Size:滤波器的尺寸,通常设置为3,表示使用3x3的索贝尔卷积核。
程序示例
下面是一个完整的 Halcon 程序示例,展示了如何使用sobel_amp函数进行索贝尔滤波:
* 读取图像
read_image(Image, 'fabrik')* 进行索贝尔滤波
sobel_amp(Image, EdgeAmplitude, 'sum_abs', 3)* 显示原始图像和边缘幅值图像
dev_open_window(0, 0, 512, 512, 'black', WindowHandle1)
dev_display(Image)
dev_set_window_attr('title', 'Original Image')dev_open_window(522, 0, 512, 512, 'black', WindowHandle2)
dev_display(EdgeAmplitude)
dev_set_window_attr('title', 'Edge Amplitude Image after Sobel Filtering')
代码解释
- 读取图像:使用
read_image函数读取一张名为fabrik的图像。 - 进行索贝尔滤波:调用
sobel_amp函数对读取的图像进行索贝尔滤波,设置滤波器类型为'sum_abs',滤波器尺寸为3,并将滤波结果存储在EdgeAmplitude中。 - 显示图像:使用
dev_open_window函数打开两个窗口,分别显示原始图像和经过索贝尔滤波后的边缘幅值图像,并使用dev_set_window_attr函数设置窗口标题。
结果分析与优化
结果分析
运行上述程序后,我们可以看到原始图像和经过索贝尔滤波后的边缘幅值图像。在边缘幅值图像中,边缘区域的像素值较高,呈现出较亮的颜色,而非边缘区域的像素值较低,呈现出较暗的颜色。通过观察边缘幅值图像,我们可以清晰地看到图像中的边缘信息。
优化建议
- 阈值处理:在实际应用中,为了突出明显的边缘,可以对边缘幅值图像进行阈值处理,将低于某个阈值的像素值设置为0,高于阈值的像素值保持不变。
-
噪声抑制: 由于索贝尔滤波对噪声较为敏感,在进行滤波之前,通常需要对图像进行降噪处理。常见的降噪方法包括高斯滤波、中值滤波等。通过在索贝尔滤波之前应用降噪滤波器,可以有效地减少噪声对边缘检测结果的影响,提高边缘检测的准确性。
- 多尺度分析:可以使用不同尺寸的索贝尔滤波器对图像进行处理,然后将不同尺度下的边缘信息进行融合,以获得更丰富的边缘特征。
总结
索贝尔滤波作为一种经典的边缘检测算法,在图像处理领域有着广泛的应用。Halcon 中提供的sobel_amp函数使得索贝尔滤波的实现变得简单高效。通过本文的介绍,我们了解了索贝尔滤波的原理、应用场景,并通过具体的程序示例展示了如何在 Halcon 中使用索贝尔滤波。在实际应用中,我们可以根据具体需求对滤波结果进行优化,以获得更好的边缘检测效果。希望本文能够帮助读者更好地理解和应用 Halcon 中的索贝尔滤波技术。
相关文章:
机器视觉--索贝尔滤波
引言 在图像处理领域,边缘检测是一项至关重要的任务,它能够帮助我们识别图像中不同区域的边界,为后续的目标识别、图像分割等操作奠定基础。索贝尔滤波(Sobel Filter)作为一种经典的边缘检测算法,因其简单…...
网络分析仪E5071C的回波损耗测量
回波损耗(Return Loss)是评估射频/微波元件(如滤波器、天线、电缆等)信号反射特性的关键参数,反映端口阻抗匹配性能。E5071C矢量网络分析仪(VNA)通过以下步骤实现高精度回波损耗测量:…...
力扣-二叉树-98 验证二叉搜索树
思路 第一个特性,二叉搜索树的中序遍历是有序的,第二个特性,利用两个指针判断大小关系 代码 class Solution { public:TreeNode* pre NULL;bool isValidBST(TreeNode* root) {if(root NULL) return true;bool left isValidBST(root->…...
【动态规划】详解 0-1背包问题
文章目录 1. 问题引入2. 从 dfs 到动态规划3. 动态规划过程分析4. 二维 dp 的遍历顺序5. 从二维数组到一维数组6. 一维数组的遍历次序7. 背包的遍历顺序8. 代码总结9. 总结 1. 问题引入 0-1 背包是比较经典的动态规划问题,这里以代码随想录里面的例子来介绍下。总的…...
【Java线程池与线程状态】线程池分类与最佳实践
解析Java线程池与线程状态变化,结合运行机制与业务场景对照,帮助形成系统性知识。 一、线程池核心要素(五维模型) 采用「参数配置→处理流程→工作模式」三层递进结构 核心参数(线程池DNA) corePoolSiz…...
【小白学AI系列】NLP 核心知识点(八)多头自注意力机制
文章目录 **多头自注意力机制(Multi-Head Self-Attention)****核心概念** **1. 自注意力机制(Self-Attention)****2. 多头机制(Multi-Head Attention)****3. 为什么要用多头注意力机制?****4. 公…...
学习笔记——word中图目录、表目录 标题引用
目标1: 建立——图1-1 引用——图1-1 1在word文档中的引用——>插入题注 新建标签,然后命名为“图1-“。 点击确认,即可插入如图所示 图1- 1 春天 需要把图1-和后面那个1中间的空格删除,即 图1-1 春天 2怎么去引用这个“…...
3.3 Hugging Face Transformers核心功能模块深度解析
Hugging Face Transformers核心功能模块深度解析 一、模块化架构总览 #mermaid-svg-wxTV5vrEo7Y57IlW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wxTV5vrEo7Y57IlW .error-icon{fill:#552222;}#mermaid-svg-wxT…...
linux中设置脚本定时执行ntp命令同步时间
目录 一、背景二、过程1.到系统目录2.安装ntp3.创建文件夹4.创建脚本文件5.提升脚本文件权限6.设置执行时间:7.检查是否设置了执行器(执行后输出的内容为执行器中的定时执行内容)8.执行脚本文件9.查看日志文件,是否执行成功 三、总…...
map的使用(c++)
在了解map之前,我们先看看两个场景,通过这两个场景的对比,让我们知道为什么要存在存储双关键字的容器 场景一:判断一堆字符串中,某一个字符串是否出现过 在没学set容器之前,我们只能想到把这一堆字符串存到…...
毕业设计—基于Spring Boot的社区居民健康管理平台的设计与实现
🎓 毕业设计大揭秘!想要源码和文章?快来私信我吧! Hey小伙伴们~ 👋 毕业季又来啦!是不是都在为毕业设计忙得团团转呢?🤔 别担心,我这里有个小小的福利要分享给你们哦&…...
Python:蟒蛇绘制(一笔画)
一、题目要求 使用turtle库,绘制一个蟒蛇形状的图形。 二、代码展示 # 请在下方开始编写你的代码 import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turt…...
mysql查询判断函数,类似decode
mysql中没有decode函数,如果使用的话,会报如下错误:Error Code: 1305. FUNCTION stockdb.decode does not exist 如果要实现像 Oracle 数据库那样原生的 DECODE 函数,可以通过以下几种方式来实现类似 DECODE 函数的功能。 -- 创建…...
异常处理、事务管理
异常处理 程序开发过程中不可避免的会遇到异常现象 如何处理 方案一:在Controller的方法中进行try...catch处理(代码臃肿,不推荐) 方案二:全局异常处理器 全局异常处理器 RestControllerAdvice :定义全…...
UART(一)——UART基础
一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…...
MySQL 中各种日志简介
MySQL 日志 慢查询日志(Slow query log) 慢查询⽇志由执⾏时间超过系统变量 long_query_time 指定的秒数的SQL语句组成,并且检 查的⾏数⼤于系统变量 min_examined_row_limit 指定值。被记录的慢查询需要进⾏优化, 可以使⽤mysqldumpslow客⼾端程序对慢…...
【每日论文】Text-guided Sparse Voxel Pruning for Efficient 3D Visual Grounding
下载PDF或者阅读论文,请点击查看:LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 中文 在这篇论文中,我们提出了一种高效的多级卷积架构,用于3D视觉定位。传统的由于采用两阶段或基…...
Kylin server v10部署docker
这里不用写什么标题 1. docker环境1.1 docker-ce1.1.1 yum安装1.1.2 离线安装 1.2 docker-compose 2. 镜像载入3. 服务启停4. 其他 1. docker环境 1.1 docker-ce docker-ce是社区版docker服务,可以通过yum方式直接安装或者离线安装,在国产化环境中&…...
计算机之就业主流岗(Mainstream Computer Employment Positions)
计算机之就业主流岗 计算机行业一直以来都是就业市场中的热门领域,技术岗位种类繁多,但每个岗位都有自己的核心技能和职责方向。以下是计算机行业中主流的技术岗位及其特点介绍,帮助你更清晰地了解这些职业的内容和发展前景。 1. 后端开发 …...
DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
