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

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

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

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

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

图片

wafer

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

图片

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

* 代码片段选自Halcon例程文件: determine_die_pitch_fft_correlation.hdevrft_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) 将频域卷积图像变换回时域。滤波后且增强高频信息的图像如下所示:

图片

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

图片

图片

图片

形态学分析与划痕筛选

图片

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化:Matplotlib详解及实战

1 Matplotlib介绍 Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。 Matplotlib提供了一个套面向绘图对象编程的API接口,能够很轻松地实现各种图像的绘制,并且它可以配合Python GUI工具(…

2023年08月IDE流行度最新排名

点击查看最新IDE流行度最新排名(每月更新) 2023年08月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

小白电脑装机(自用)

几个月前买了配件想自己装电脑,结果最后无法成功点亮,出现的问题是主板上的DebugLED黄灯常亮,即DRAM灯亮。对于微星主板的Debug灯,其含义这篇博文中有说明。 根据另一篇博文,有两种可能。 我这边曾将内存条和主板一块…

全球出货量突破1.3亿:华为智能穿戴产品国内第一份额诞生

根据华为运动健康技术暨HDC运动健康分论坛的消息,华为运动健康军团首席执行官兼华为终端BG智能穿戴与运动健康产品线总裁张炜透露,华为智能穿戴产品的全球出货量已突破1.3亿,用户数量也超过4.5亿,并多年来一直在中国智能手表市场占…

每日一题——复杂链表的复制

复杂链表的复制 题目链接 思路 如果不考虑random指针的复制,仅仅复制单链表的结构还是简单的。只需要通过一个指针cur遍历原链表,再不断创建新节点尾插到newHead后即可。 但如果要考虑random指针的复制,那过程就复杂了。 有小伙伴会这样想…

基于Azure OpenAI Service 的知识库搭建实验⼿册

1.概要 介绍如何使⽤Azure OpenAI Service 的嵌⼊技术,创建知识库;以及创建必要的资源组和资源,包括 Form Recognizer 资源和 Azure 翻译器资源。在创建问答机器⼈服务时,需要使⽤已部署模型的 Azure OpenAI 资源、已存在的…

Kafka-Broker工作流程

kafka集群在启动时,会将每个broker节点注册到zookeeper中,每个broker节点都有一个controller,哪个controller先在zookeeper中注册,哪个controller就负责监听brokers节点变化,当有分区的leader挂掉时,contro…

初识MySQL数据库之用户管理

目录 一、用户管理 二、用户 1. 用户信息 2. 创建用户 3. 用户登录测试 4. 删除用户 5. 设置用户远端登录 6. 修改密码 6.1 修改当前用户的密码 6.2 root用户修改指定用户的密码 三、权限 1. 数据库中的各个权限含义 2. 给用户授权 3. 查看用户拥有权限 4. 授权…

iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年经典游戏啦…

【使用bat脚本实现批量创建文件夹、批量复制文件至对应文件夹中】

使用bat脚本实现批量创建文件夹、批量复制文件至对应文件夹中 常用cmd命令 场景一:在指定位置批量创建文件夹 在桌面创建一个txt文件编写创建目录代码 //在桌面"五保户结算单"的文件夹下创建名称为"1张三"的文件夹 md E:\桌面\五保户结算单\…

【类和对象】日期类总结

日期类是我们学习类和对象这部分知识的常客&#xff0c;本篇博客我们就对日期类成员函数进行全面总结 目录 一、一览Date.h函数声明 二、Date.cpp逐部分实现 一、流插入与流提取运算符重载 二、日期之间比较大小相等运算符重载 1. > 2. 3. > 4. ! 5. <…

element+vue 之动态form

1.页面部分 <div v-for"(item,index) in formList" :key"index"><el-col :span"6" v-if"item.inputType0"><el-form-item :label"item.conditionName" :prop"item.conditionCode":rules"{req…

Abaqus 中最常用的子程序有哪些 硕迪科技

在ABAQUS中&#xff0c;用户定义的子程序是一种重要的构件&#xff0c;可以将其插入到Abaqus分析中以增强该软件的功能和灵活性。这些子程序允许用户在分析过程中添加自定义材料模型、边界条件、初始化、加载等特定操作&#xff0c;以便更精准地模拟分析中的现象和现象。ABAQUS…

二叉树迭代遍历

PS:以下代码均为C实现 1.二叉树前序遍历 力扣 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 class Solution { public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> str;TreeNode* curroot;whil…

简单认识ELK日志分析系统

一. ELK日志分析系统概述 1.ELK 简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 好处&#xff1a; &#xff08;1&#xff09;提高安全…

【leetcode】394. 字符串解码

题目链接&#xff1a;力扣 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没…

MySQL 主从复制

MySQL主从复制是一种数据复制技术&#xff0c;用于将一个MySQL数据库的数据实时复制到其他MySQL数据库&#xff0c;通常一个作为主数据库&#xff08;master&#xff09;&#xff0c;其他作为从数据库&#xff08;slave&#xff09; 基本工作原理&#xff1a; 主数据库记录所有…

RabbitMQ 教程 | 第10章 网络分区

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

【云原生】K8S二进制搭建三:高可用配置

目录 一、部署CoreDNS二、配置高可用三、配置负载均衡四、部署 Dashboard 一、部署CoreDNS 在所有 node 节点上操作 #上传 coredns.tar 到 /opt 目录中 cd /opt docker load -i coredns.tar在 master01 节点上操作 #上传 coredns.yaml 文件到 /opt/k8s 目录中&#xff0c;部…

三、JVM-如何判断对象已死问题

内存模型以及如何判定对象已死问题 体验与验证 2.4.5.1 使用visualvm visualgc插件下载链接 &#xff1a;https://visualvm.github.io/pluginscenters.html 选择对应JDK版本链接—>Tools—>Visual GC 若上述链接找不到合适的&#xff0c;大家也可以自己在网上下载对应…