图像快速傅里叶变换的工业应用案例简介:图像自相关,背景纹理去除,旋转矫正,划痕检测

快速傅里叶变换是非常重要的数学分析工具,同时也是一种非常重要的信号处理方法。

下面借助Halcon商业图像处理库,介绍些工业应用案例,我们可以通过案例理解图像快速傅里叶变换的一些应用场景。

案例1:图像自相关性确定芯片间距

下图示意的晶圆图像中有芯片周期性的排列,而自相关函数计算纹理周期具有很好的效果。

图片

wafer

为提升计算效率,我们可以应用快速傅里叶变换将晶圆图像转换到频域中去计算自相关图像。

图片

频域方法计算晶圆图像的自相关图像

* 代码片段选自Halcon例程文件: determine_die_pitch_fft_correlation.hdev
  rft_generic (Wafer, ImageFFT, 'to_freq', 'n', 'complex', Width)
  correlation_fft (ImageFFT, ImageFFT, ImageCorrelation)
  rft_generic (ImageCorrelation, ImageFFTInv, 'from_freq', 'n', 'real', Width)

图片

wafer image auto-correlation

自相关图像上  点的灰度值是将图像水平移动  、垂直移动  后与原始图像做相关运算得到的相关值。

上图示意的是自相关图像计算结果中,自相关图像原点的灰度值很高,因为这点代表没有移动的图像与其自身的相关性。如果原图像上有周期性宽度  和高度  的矩形结构,在自相关图像的  位置上也会得到高的相关值。通过在相关图像上找到与原点最近的局部极大值,直接得到周期结构的尺寸。

应用 local_max_sub_pix 图像局部极大值的亚像素精确检测函数,提取自相关图像中的局部极值点。亚像素精度局部极大值可以通过如下代码得到:

  local_max_sub_pix (ImageFFTInv, 'gauss', 3, 0.0001, Row, Column)

确定芯片周期间距后,可以进一步应用基于形状的模板匹配准确的定位芯片位置,并从晶圆图片中分割出每个芯片。

案例2:去除背景纹理

如何通过频域过滤将前景信息从干扰的背景纹理中分离出来?

首先,对图像进行傅里叶变换,以获得其频谱。然后,我们检测频谱中与干扰性背景纹理相对应的频率峰值。之后,建立一个消除这些频率的滤波器,并将其应用于频谱。通过对过滤后的频谱进行反傅立叶变换,我们得到一个过滤后的图像,其中的干扰性背景纹理将被去除。

图片

remove_texture_fft

背景纹理在频谱图中对应的是高频信号,频谱图像中间区域为低频信号。

图片

频谱图

我们通过阈值分割提取信号显著的低频区域。

图片

低频区域

以低频区域的以两倍的频率构建高频波段ROI区域,在高频波段ROI区域中,阈值分割提取显著的高频分量,如下图中红色圈注为高频分量区域。

图片

高频分量区域

将频谱图中的高频分量区域置为0,以此过滤高频分量。

图片

将过滤后的频谱图反傅里叶变换即可得到去除背景纹理的图像。

案例3:对栅格图像进行旋转校正

快速傅里叶变换将图像从时域转换到频域,定义0度栅格图像,并以0度栅格为基础创建基准信息。下图为0度栅格图像

图片

0°栅格图像

统计基准图像的边缘梯度方向

使用边缘检测的算子(如Roberts,Sobel,Scharr等)来计算图像中的水平、垂直和对角方向的梯度。得到水平和垂直方向的一阶导数值,由此便可以确定像素点的梯度的大小和方向。Halcon中提供了edges_image算子计算边缘梯度方向图,该算子输出的梯度方向图的灰度值范围为[0,179],即0°~179°.

图片

边缘梯度方向图

以0°~179°范围统计梯度方向直方图。即每个角度在图像中的像素总数。灰度边缘方向统计直方图如下图所示

图片

边缘梯度方向统计直方图

对于栅格图像,当图像旋转时,其梯度方向直方图也会同步水平平移,因此计算与标准梯度直方图最佳相关性可以得到相对的旋转角度,频谱图上计算相关性图基本原理是待检图直方图和标准图直方图的FFT 频域乘积再转换回时域,其相当于时域卷积结果。

确定要处理的图像的旋转角度

  • 计算待处理图像的边缘方向统计直方图(该直方图用图像表示,其行列为1*180)。待处理图像的边缘方向直方图与基准图像的边缘方向直方图如下图所示

    图片

  • 计算旋转物体边缘方向统计直方图的FFT图像与基准边缘方向统计直方图FFT图像

  • 找到目标和参考FFT之间的最佳相关性,该最佳相关性对应于两个图像之间的相对角度。最佳相关性需要在相关性图的局部极值中筛选。

案例4:检测划痕缺陷

通过频域滤波检测非均匀照明表面中的缺陷(划痕)。待处理图像如下图所示:

图片

划痕图像

  • 首先,反转图像

图片

划痕图像反转

  • 创建合适的带通滤波器。然后,在频域对输入图像进行傅里叶变换和滤波,从而增强高频信息。

* Enhance the scratches by filtering in the frequency domain
gen_sin_bandpass (ImageBandpass, 0.4, 'none', 'rft', Width, Height)
rft_generic (ImageInverted, ImageFFT, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT, ImageBandpass, ImageConvol)
rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width)

gen_sin_bandpass 产生旋转不变带通滤波器,其响应为频域中的正弦函数,频域带通滤波器图像如下图

图片

convol_fft 在频域中用正弦带通滤波器对待检测图的FFT图像进行卷积。从而滤除低频,增强高频信息。最后,将其转换回空间域,并对增强后的缺陷进行形态学后处理。*rft_generic (ImageInverted, ImageFFT, 'to_freq', 'none', 'complex', Width)*计算待检测图的FFT图像rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width) 将频域卷积图像变换回时域。滤波后且增强高频信息的图像如下所示:

图片

  • 阈值分割、形态学处理及缺陷筛选

图片

图片

图片

形态学分析与划痕筛选

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springCache-缓存

SpringCache 简介:是一个框架,实现了基于注解的缓存功能,底层可以切换不同的cache的实现,具体是通过CacheManager接口实现 使用springcache,根据实现的缓存技术,如使用的redis,需要导入redis的依赖包 基于map缓存 …

AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载 简介 现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑…

【100天精通python】Day27:文件与IO操作_CSV文件处理

目录 专栏导读 1. CSV文件格式简介 2 csv模块的使用方法 3 读写CSV文件的示例 3.1 读取CSV文件示例 3.2 写入CSV文件示例 4 CSV文件的常用数据处理 4.1 读取CSV文件的特定列 4.2 读取CSV文件的特定行 5 csv 文件的特殊处理 5.1 处理包含逗号、换行符、引号的字段 5.…

MySql之日志

Buffer Pool Buffer Pool (缓冲池)是 InnoDB 存储引擎中非常重要的内存结构,顾名思义,缓冲池其实就是类似 Redis 一样的作用,起到一个缓存的作用,因为我们都知道 MySQL 的数据最终是存储在磁盘中的&#xf…

如何通过 WordPress 数据库启用插件?【进不去后台可用】

如果您无法访问 WordPress 后台并需要激活插件以恢复访问权限,则可以通过 WordPress 数据库来实现。本文将向您展示如何使用数据库轻松激活 WordPress 插件。 何时使用数据库激活 WordPress 插件? 许多常见的 WordPress 错误会阻止网站所有者访问 WordP…

性能测试工具在提升软件质量和用户体验方面的关键作用

在当今的数字时代,软件应用的性能和响应速度对于用户体验和企业的成功至关重要。为了满足用户对高性能和卓越体验的期望,开发团队需要使用专业的性能测试工具来检测和改进应用程序的性能。本文将讨论性能测试工具在提升软件质量和用户体验方面的关键作用…

Python 模块 locust 性能测试

简介 locust 是 Python 的一个开源的负载测试工具,用于测试网络应用程序的性能和可伸缩性。它使用Python编写,并提供了一个简单易用的语法来定义和执行负载测试。locust模块允许用户模拟大量并发用户并观察系统在高负载下的响应情况。 目录 1. 基本用法…

Spring5.2.x 源码使用Gradle成功构建

一 前置准备 1 Spring5.2.x下载 1.1 Spring5.2.x Git下载地址 https://gitcode.net/mirrors/spring-projects/spring-framework.git 1.2 Spring5.2.x zip源码包下载,解压后倒入idea https://gitcode.net/mirrors/spring-projects/spring-framework/-/…

Layui实现OA会议系统之会议管理模块总合

目录 一、项目背景 二、项目概述 1. 概述 2. 环境搭建 3. 工具类引用 4. 功能设计 4.1 会议发布 4.2 我的会议 4.3 会议审批 4.4 会议通知 4.5 待开会议 4.6 历史会议 4.7 所有会议 5. 性能优点 5.1 兼容性好 5.2 可维护性和可扩展性 5.3 轻量灵活 5.4 模块化设计…

[BabysqliV3.0]phar反序列化

文章目录 [BabysqliV3.0]phar反序列化 [BabysqliV3.0]phar反序列化 开始以为是sql注入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ST1jvadM-1691302941344)(https://raw.githubusercontent.com/leekosss/photoBed/master/202308032140269.png)…

SQL-每日一题【1179. 重新格式化部门表】

题目 部门表 Department: 编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。 查询结果格式如下面的示例所示: 解题思路 1.题目要求我们重新格式化表,…

【Linux】五、进程

一、冯诺依曼体系结构 存储器:指的是内存; 输入设备:键盘、摄像头、话筒,磁盘,网卡; 输出设备:显示器、音响、磁盘、网卡; 中央处理器(CPU):运算器…

一、8.分页

当物理内存不够时就把不常用的内存暂时存入磁盘,并且描述符的P位置0,把要使用的段放入内存,描述符P位置1 但是这种方式会产生大量内存碎片,影响内存分配效率 设想一个虚拟内存,每隔任务都有他独立的虚拟内存&#xf…

【编译原理】五、简单四则运算的代码实现

1. 前言 前面说了那么多BNF的相关理论知识,实际上就是为了一个目的: 描述语法规则 描述语法规则是一切的开始。最终,还是要用代码来实现。 如果对于BNF仍然是一头雾水,也没关系,因为我们的最终目的是编写解析器&…

用Abp实现找回密码和密码强制过期策略

用户找回密码,确切地说是重置密码,为了保证用户账号安全,原始密码将不再以明文的方式找回,而是通过短信或者邮件的方式发送一个随机的重置校验码(带校验码的页面连接),用户点击该链接&#xff0…

.dex文件转换成.class文件,.class文件转成java文件

.dex文件转换成.class文件 什么是.dex文件 dex文件是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。 由于dalvik是一种针对嵌入式设备而特殊设计的java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别。 当java程序编译成class后,还需…

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志 发现有如下情况: 主要有两…

《JeecgBoot系列》JeecgBoot(ant-design-vue) 识别字段中指定内容并修改该行文字颜色

JeecgBoot(ant-design-vue) 识别字段中指定内容并修改该行文字颜色 需求&#xff1a;将生产工厂是配件工厂的行改变颜色标注 一、修改table组件内容 在<a-table></a-table>内添加:rowClassName"tableRowClass" <a-table>...:rowClassName"t…

动态路由协议 ospf

动态路由协议的分类 rip : 距离矢量路由协议&#xff08;容易产生环路&#xff09;ospf&#xff1a; 链路状态路由协议&#xff08;比较耗费资源&#xff0c;但是链路准确性好&#xff09;bgp&#xff1a; 外部网关协议 RIP OSPF LSA泛洪 LSDB维护 SPF计算&#xff08;最短路…

前端笔记html-layer使用

layer.open方法 layer.open({type:2, //可传入的值有&#xff1a;0&#xff08;信息框&#xff0c;默认&#xff09;1&#xff08;页面层&#xff09;2&#xff08;iframe层&#xff09;3&#xff08;加载层&#xff09;4&#xff08;tips层&#xff09;title: title,content:[…