当前位置: 首页 > news >正文

十 缺陷检测解决策略之三:频域+空域

十 缺陷检测解决策略之三:频域+空域

read_image (Image, '矩形')
* 中间低频,四周高频
fft_image (Image, ImageFFT)
* 中间低频,四周高频
fft_generic (Image, ImageFFT1, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 中间高频,四周低频
rft_generic (Image, ImageFFT2, 'to_freq', 'sqrt', 'complex', 512)read_image (Image, '圆')
* 中间低频,四周高频
fft_image (Image, ImageFFT)
* 中间低频,四周高频
fft_generic (Image, ImageFFT1, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 中间高频,四周低频
rft_generic (Image, ImageFFT2, 'to_freq', 'sqrt', 'complex', 512)*******
* 猜方向
*******
read_image (Image, '菱形3')
rgb1_to_gray (Image, GrayImage)
* 中间低频,四周高频
fft_image (GrayImage, ImageFFT)
* 中间低频,四周高频
fft_generic (GrayImage, ImageFFT1, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 中间高频,四周低频
rft_generic (GrayImage, ImageFFT2, 'to_freq', 'sqrt', 'complex', 512)
dev_get_window (WindowHandle)
* 读取图像
read_image (Image1, 'test1.png')
* 转灰度图(空间域转频域)
rgb1_to_gray (Image1, GrayImage)
* 傅里叶变换
fft_image (GrayImage, ImageFFT)
* 生成矩形
gen_rectangle1 (ROI_0, 27.4359, 25.9474, 190.912, 261.505)
* 生成矩形
gen_rectangle1 (TMP_Region, 210.916, 276.316, 368.874, 522.453)
* 区域合并
union2 (ROI_0, TMP_Region, ROI_0)
* 绘制区域
paint_region (ROI_0, ImageFFT, ImageResult, 0, 'fill')
* 反傅里叶变换(频域转空间域)
fft_image_inv (ImageResult, ImageFFTInv)
* 显示结果图像
dev_display (ImageFFTInv)* 傅里叶变换
fft_generic (GrayImage, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 生成矩形
gen_rectangle1 (ROI_0, 27.4359, 25.9474, 190.912, 261.505)
gen_rectangle1 (TMP_Region, 210.916, 276.316, 368.874, 522.453)
* 生成矩形
* 区域合并
union2 (ROI_0, TMP_Region, ROI_0)
* 绘制区域
paint_region (ROI_0, ImageFFT, ImageResult, 0, 'fill')
* 反傅里叶变换(频域转空间域)
fft_image_inv (ImageResult, ImageFFTInv)
fft_generic (ImageResult, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'complex')
* 显示结果图像
dev_display (ImageFFTInv)
*******************
*高通滤波(允许高频通过,显示强化细节)
*******************
* 读取图像
read_image (Image, 'printer_chip/printer_chip_01')
* 转灰度图
rgb1_to_gray (Image, GrayImage)
* 获取图像大小(为什么获取图像大小)
get_image_size (GrayImage, Width, Height)
* 傅里叶变换
fft_generic (GrayImage, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 生成高通滤波(允许高频通过,显示强化细节)
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', Width, Height)
* 反傅里叶变换
convol_fft (ImageFFT, ImageHighpass, ImageConvol)
* 反傅里叶变换
fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'complex')*******************
*低通滤波(允许低频通过,显示强化背景)
*******************
* 读取图像1.读取图像,并转灰度图像
read_image (Image, 'printer_chip/printer_chip_01')
* 转灰度图1.读取图像,并转灰度图像
rgb1_to_gray (Image, GrayImage)
* 获取图像大小
get_image_size (GrayImage, Width, Height)
* 傅里叶变换2.傅里叶变换,空间域转频域
fft_generic (GrayImage, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 生成低通滤波(允许低频通过,显示强化背景)
gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)
* 反傅里叶变换3.对频域进行滤波操作4.反傅里叶变换,频域转空间域
convol_fft (ImageFFT, ImageLowpass, ImageConvol)
* 反傅里叶变换
fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'complex')read_image (Image2Ok5, 'C:/Users/Jumy/Documents/WXWork/1688858086618338/Cache/File/2024-07/2_OK5.tif')
rgb1_to_gray (Image2Ok5, GrayImage1)
mult_image (GrayImage1, GrayImage1, ImageResult, 0.009, 0)
emphasize (ImageResult, ImageEmphasize, 7, 7, 1)
fft_generic (ImageEmphasize, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', 5472, 3648)
convol_fft (ImageFFT, ImageHighpass, ImageConvol)
fft_generic (ImageConvol, ImageFFT1, 'from_freq', -1, 'sqrt', 'dc_center', 'complex')
read_image (Image2Ok5, '2_OK5.tif')
rgb1_to_gray (Image2Ok5, GrayImage1)
mult_image (GrayImage1, GrayImage1, ImageResult, 0.009, 0)
emphasize (ImageResult, ImageEmphasize, 7, 7, 1)
fft_generic (ImageEmphasize, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', 5472, 3648)
convol_fft (ImageFFT, ImageHighpass, ImageConvol)
fft_generic (ImageConvol, ImageFFT1, 'from_freq', -1, 'sqrt', 'dc_center', 'complex')
dev_update_off ()
dev_close_window ()
* 1.读取图像,并转灰度图像
* 读取图像
read_image (Image, 'plastics/plastics_01')
* 获取图像大小get_image_size (Image, Width, Height)
* 窗口显示设置
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
* 优化傅里叶变换速度
optimize_rft_speed (Width, Height, 'standard')
* 参数设置
* 值越大,低频部分越多,区域越小
Sigma1 := 10.0
Sigma2 := 3.0
* 3.生成对应的滤波操作
* 高斯滤波(低频滤波)3.生成对应的滤波操作
gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'dc_center', Width, Height)
* 高斯滤波(低频滤波)
gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'dc_center', Width, Height)
* 滤波相减
sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)
* 遍历
NumImages := 11
for Index := 1 to NumImages by 1* 读取图像*  1.读取图像,并转灰度图像read_image (Image, 'plastics/plastics_' + Index$'02')*************************** 频域预处理*************************** rgb转灰度rgb1_to_gray (Image, Image)* 傅里叶变换2.傅里叶变换,空间域转频域*    2.傅里叶变换,空间域转频域fft_generic (Image, ImageFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')* 高斯滤波4.对频域进行滤波操作*   4.对频域进行滤波操作convol_fft (ImageFFT, Filter, ImageConvol)* 反傅里叶变换(获取实部)5.反傅里叶变换,频域转空间域*   5.反傅里叶变换,频域转空间域fft_generic (ImageConvol, ImageFiltered, 'from_freq', 1, 'n', 'dc_center', 'real')*************************** 空间域(Blob分析)6.缺陷检测***************************    6.缺陷检测* 决定方形区域内的灰度值,计算方形区域内的最大最小灰度的差,设置到每个图像点上* 增强对比度,图像增强的一种6.缺陷检测gray_range_rect (ImageFiltered, ImageResult, 10, 10)* 获取灰度的最大值、最小值、和范围(最大值-最小值)min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)* 阈值分割threshold (ImageResult, RegionDynThresh, max([5.55,Max * 0.8]), 255)* 连通connection (RegionDynThresh, ConnectedRegions)* 特征选取select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4, 99999)* 合并区域union1 (SelectedRegions, RegionUnion)* 开运算closing_circle (RegionUnion, RegionClosing, 10)* 连通connection (RegionClosing, ConnectedRegions1)* 特征选取select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999)* 获取面积和区域中心点area_center (SelectedRegions1, Area, Row, Column)* 显示图像dev_display (Image)* 遍历所有区域Number := |Area|if (Number)* 生产轮廓gen_circle_contour_xld (ContCircle, Row, Column, gen_tuple_const(Number,30), gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)), 'positive', 1)* 设置显示结果ResultMessage := ['Not OK',Number + ' defect(s) found']Color := ['red','black']dev_display (ContCircle)elseResultMessage := 'OK'Color := 'forest green'endif* 显示结果信息disp_message (WindowHandle, ResultMessage, 'window', 12, 12, Color, 'true')if (Index != NumImages)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif
endfor

相关文章:

十 缺陷检测解决策略之三:频域+空域

十 缺陷检测解决策略之三:频域空域 read_image (Image, 矩形) * 中间低频,四周高频 fft_image (Image, ImageFFT) * 中间低频,四周高频 fft_generic (Image, ImageFFT1, to_freq, -1, sqrt, dc_center, complex) * 中间高频,四周低频 rft_ge…...

有望第一次走出慢牛

A股已走完30多年历程。 大约每十年,会经历一轮牛熊周期。特点是每一轮周期,大约九成的时间都是熊市主导。就是我们常说的 快牛慢熊。 这一次,会不会重复历史? 历史不会简单重复。已经感受到了盘面的变化。 有人说,股市爆涨爆…...

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一,预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二,select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…...

电力行业 | 等保测评(网络安全等级保护)工作全解

电力行业为什么要做网络安全等级保护? 电力行业是关系到国家安全和社会稳定的基础性行业,电力行业信息化程度相对较高,是首批国家信息安全等级保护的重点行业。 01 国家法律法规的要求 1994《计算机信息系统安全保护条例》(国务…...

总裁主题CeoMax-Pro主题7.6开心版

激活方式: 1.授权接口源码ceotheme-auth-api.zip搭建一个站点,绑定www.ceotheme.com域名,并配置任意一个域名的 SSL 证书。 2.在 hosts 中添加:127.0.0.1 www.ceotheme.com 3.上传class-wp-http.php到wp-includes目录&#xff…...

深入探讨编程的核心概念、学习路径、实际应用以及对未来的影响

在当今这个数字化时代,编程已成为连接现实与虚拟世界的桥梁,它不仅塑造了我们的生活方式,还推动了科技的飞速发展。从简单的网页制作到复杂的人工智能系统,编程无处不在,其重要性不言而喻。本文旨在深入探讨编程的核心…...

IDEA如何将一个分支的代码合并到另一个分支(当前分支)

前言 我们在使用IDEA开发Java应用时,经常是和git一起使用的。我们对于git常用的操作包括提交,推送,拉取代码等。还有一个重要的功能是合并代码。 那么,我们应该如何合并代码呢? 如何合并代码 首先,我们…...

Python实现基于WebSocket的stomp协议调试助手工具

stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多&#xf…...

基于neo4j的旅游知识图谱维护与问答系统

你还在为毕业设计发愁吗?试试这个基于Neo4j的旅游知识图谱维护与问答系统吧!这套系统不仅功能强大,而且几乎涵盖了你需要的一切,完美助力你的毕业项目! 系统介绍 该系统是专门针对旅游景点信息的知识图谱工具&#x…...

竞赛学习路线推荐(编程基础)

关于学习路线的推荐,总体上,分两步学习,第一步学习编程语言(C、C、java),第二步是学习数据结构和算法 不少初学者会选择C语言或C作为首选,笔者这里也推荐C或C作为入门,需要注意的是&…...

webRTC搭建:STUN 和 TURN 服务器 链接google的有点慢,是不是可以自己搭建

如果使用 Google 提供的 STUN/TURN 服务器速度较慢,你完全可以自己搭建 STUN 和 TURN 服务器。这有助于提升网络连接速度和稳定性,特别是在需要穿透 NAT 或防火墙的网络环境下。 下面是如何自己搭建 STUN 和 TURN 服务器的具体步骤: 1. 选择…...

利用Pix4D和ArcGIS计算植被盖度

除了水文分析和沟道形态分析之外,在实际工作中还要计算植被盖度! 植被盖度,也称为植被覆盖率或植物覆盖度,是指某一地表面积上植物冠层垂直投影面积占该地表面积的比例。它通常以百分比的形式表示,是描述地表植被状况的…...

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了,所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…...

从视频中学习的SeeDo:VLM解释视频并生成规划、代码(含通过RGB视频模仿的人形机器人OKAMI、DexMV)

前言 在此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的1.1节开头有提到 机器人收集训练数据一般有多种方式,比如来自人类视频的视觉演示 有的工作致力于从视频数据——例如YouTube视频中进行策略学习 即最常见…...

项目集群部署定时任务重复执行......怎么解决???

项目集群部署在不同服务器,导致定时任务重复执行 1、可以在部署时只让一个服务器上有定时任务模块,不过这样如果这台服务器宕机,就会导致整个定时任务崩溃 2、使用分布式锁,使用redis setNX命令加lua脚本在定时任务执行的时候只…...

使用JUC包的AtomicXxxFieldUpdater实现更新的原子性

写在前面 本文一起来看下使用JUC包的AtomicXxxxFieldUpdater实现更新的原子性。代码位置如下: 当前有针对int,long,ref三种类型的支持。如果你需要其他类型的支持的话,也可以照葫芦画瓢。 1:例子 1.1:普…...

vue3组件通信--props

目录 1.父传子2.子传父 最近在做项目的过程中发现&#xff0c;props父子通信忘的差不多了。下面写个笔记复习一下。 1.父传子 父组件&#xff08;FatherComponent.vue&#xff09;&#xff1a; <script setup> import ChildComponent from "/components/ChildComp…...

leetcode-75-颜色分类

题解&#xff08;方案二&#xff09;&#xff1a; 1、初始化变量n0&#xff0c;代表数组nums中0的个数&#xff1b; 2、初始化变量n1&#xff0c;代表数组nums中0和1的个数&#xff1b; 3、遍历数组nums&#xff0c;首先将每个元素赋值为2&#xff0c;然后对该元素进行判断统…...

【嵌入式原理设计】实验三:带报警功能的数字电压表设计

目录 一、实验目的 二、实验环境 三、实验内容 四、实验记录及处理 五、实验小结 六、成果文件提取链接 一、实验目的 熟悉和掌握A/D转换及4位数码管、摇杆、蜂鸣器的联合工作方式 二、实验环境 Win10ESP32实验开发板 三、实验内容 1、用摇杆传感器改变接口电压&…...

C#中的接口的使用

定义接口 public interface IMyInterface {int MyProperty { get; set; }void MyMethod(); } 实现类 internal class MyClass : IMyInterface {public int MyProperty { get; set; }public void MyMethod(){Console.WriteLine("MyMethod is called");} } 目录结构…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...