十 缺陷检测解决策略之三:频域+空域
十 缺陷检测解决策略之三:频域+空域
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目录ÿ…...
深入探讨编程的核心概念、学习路径、实际应用以及对未来的影响
在当今这个数字化时代,编程已成为连接现实与虚拟世界的桥梁,它不仅塑造了我们的生活方式,还推动了科技的飞速发展。从简单的网页制作到复杂的人工智能系统,编程无处不在,其重要性不言而喻。本文旨在深入探讨编程的核心…...
IDEA如何将一个分支的代码合并到另一个分支(当前分支)
前言 我们在使用IDEA开发Java应用时,经常是和git一起使用的。我们对于git常用的操作包括提交,推送,拉取代码等。还有一个重要的功能是合并代码。 那么,我们应该如何合并代码呢? 如何合并代码 首先,我们…...
Python实现基于WebSocket的stomp协议调试助手工具
stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多…...
基于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.子传父 最近在做项目的过程中发现,props父子通信忘的差不多了。下面写个笔记复习一下。 1.父传子 父组件(FatherComponent.vue): <script setup> import ChildComponent from "/components/ChildComp…...
leetcode-75-颜色分类
题解(方案二): 1、初始化变量n0,代表数组nums中0的个数; 2、初始化变量n1,代表数组nums中0和1的个数; 3、遍历数组nums,首先将每个元素赋值为2,然后对该元素进行判断统…...
【嵌入式原理设计】实验三:带报警功能的数字电压表设计
目录 一、实验目的 二、实验环境 三、实验内容 四、实验记录及处理 五、实验小结 六、成果文件提取链接 一、实验目的 熟悉和掌握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");} } 目录结构…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
