Halcon3D表面平面度检测-平面差值法
//倾斜平面矫正
https://blog.csdn.net/m0_51559565/article/details/137146179
//平面度和平面缺陷检测,平面矫正法
https://blog.csdn.net/m0_51559565/article/details/137163729
前言
通常我们对表面平面度进行检测时,通常使用2种方式。1:通过大卷积核的高斯滤波进行拟合平面,然后求取拟合平面与3D模型间的点间的距离。2:通过平面矫正,将被测试平面矫正到水平面后,对平面以上和平面以下的点云进行筛选。(关于平面矫正,可以点击文章开头链接查看)。
本文主要讨论通过大卷积核的高斯滤波进行平面拟合,求取拟合平面与3D模型的距离。
1.halcon程序
dev_get_window (WindowHandle)
*读取3通道彩色融合图
read_image (Image, 'D:/1NewWork/Halcon3D/XYZ彩色融合图.tiff')
*拆分3个通道
decompose3 (Image, x, y, z)
*将3个通道图像转换为3D模型
xyz_to_object_model_3d (x,y, z, ObjectModel3D)
*显示动态3D模型
threshold (z, Regions, 107.77, 200)
*对二值化图像进行腐蚀,剔除产品边缘,通常使用5。
*当前模拟表面出现的凹陷情况
erosion_circle (Regions, RegionErosion, 50)
reduce_domain (z, RegionErosion, ImageReduced)
*设置等平面前,对平面进行大卷积核的高斯滤波,防止噪点的存在印象平面精度
gauss_filter (ImageReduced, ImageGauss, 7)
*测量基准平面
xyz_to_object_model_3d (x,y, ImageGauss, ObjectModel3D)
*创建测量拟合平面
fit_primitives_object_model_3d(ObjectModel3D, ['primitive_type', 'fitting_algorithm'], ['plane', 'least_squares_tukey'], ObjectModel3D9)
*获取到平面参数,可用于验算
get_object_model_3d_params(ObjectModel3D9, 'primitive_parameter', plane)*visualize_object_model_3d (WindowHandle, ObjectModel3D9, [], [], [], [], [], [], [], PoseOut)
*对被检测面进行高斯滤波,用于去除噪点。
*如果要求测量精度较大时,推荐高斯卷积核设置为1,或者进行滤波,防止缺陷被覆盖
gauss_filter (ImageReduced, ImageGauss1, 3)
*被测量面
xyz_to_object_model_3d (x,y, ImageGauss1, ObjectModel3D1)
*计算2个测量面的所有点云距离
distance_object_model_3d (ObjectModel3D1, ObjectModel3D9, [], 0, [],[])
*获取结果
get_object_model_3d_params (ObjectModel3D1, '&distance', Z)*visualize_object_model_3d (WindowHandle, ObjectModel3D1, [], [], [], [], [], [], [], PoseOut)tuple_max (Z, Max)
tuple_mean (Z, Mean)
tuple_min (Z, Min)tuple_abs (Max, AbsMax)
tuple_abs (Min, AbsMin)
tuple_max2 (AbsMax, AbsMin, Max2)*结果验证

2.halcon程序解析
2.1选取图像区域
dev_get_window (WindowHandle)
*读取3通道彩色融合图
read_image (Image, 'D:/1NewWork/Halcon3D/XYZ彩色融合图.tiff')
*拆分3个通道
decompose3 (Image, x, y, z)
*将3个通道图像转换为3D模型
xyz_to_object_model_3d (x,y, z, ObjectModel3D)
*显示动态3D模型
threshold (z, Regions, 107.77, 200)
*对二值化图像进行腐蚀,剔除产品边缘,通常使用5。
*当前模拟表面出现的凹陷情况
erosion_circle (Regions, RegionErosion, 50)
初始状态下,我们先进行预处理,提取到我们需要被检测的区域。在上述程序中,我为了模拟实际情况下表面存在缺陷的情况,将下层托盘也归为同一个检测区域。
2.2生成测量基准平面
*设置等平面前,对平面进行大卷积核的高斯滤波,防止噪点的存在印象平面精度
gauss_filter (ImageReduced, ImageGauss, 7)
*测量基准平面
xyz_to_object_model_3d (x,y, ImageGauss, ObjectModel3D)
*创建测量拟合平面
fit_primitives_object_model_3d(ObjectModel3D, ['primitive_type', 'fitting_algorithm'], ['plane', 'least_squares_tukey'], ObjectModel3D9)
*获取到平面参数,可用于验算
get_object_model_3d_params(ObjectModel3D9, 'primitive_parameter', plane)
实际3D相机采集的时候可能会因为各种原因造成有噪点的情况,所以在拟合测量平面时,可以先进行大卷积核的高斯滤波剔除噪点,可以有效提高测量平面精度。
当然在拟合平面时,缺陷可能会对略微对平面有些许影响,通常都是忽略不计的,halcon拟合平面选取最小二乘法即可有效减少缺陷对拟合平面结果的影响。
实际测试情况中,文中缺陷10cm,实际可以测得9.9cm。误差忽略不计。
2.3计算点云距离
*对被检测面进行高斯滤波,用于去除噪点。
*如果要求测量精度较大时,推荐高斯卷积核设置为1,或者进行滤波,防止缺陷被覆盖
gauss_filter (ImageReduced, ImageGauss1, 3)
*被测量面
xyz_to_object_model_3d (x,y, ImageGauss1, ObjectModel3D1)
*计算2个测量面的所有点云距离
distance_object_model_3d (ObjectModel3D1, ObjectModel3D9, [], 0, [],[])
*获取结果
get_object_model_3d_params (ObjectModel3D1, '&distance', Z)
在计算被检测的平面时,推荐使用1或者3卷积核的高斯滤波进行预处理。可以有效的在实际环境中减少误判率,主要仍然是来自相机采集的噪点的影响。
2.4统计和判断数据
tuple_max (Z, Max)
tuple_mean (Z, Mean)
tuple_min (Z, Min)tuple_abs (Max, AbsMax)
tuple_abs (Min, AbsMin)
tuple_max2 (AbsMax, AbsMin, Max2)
计算最大误差的点云。
总结
此方法,适用于对3D相机采集效果良好,并且无需标记,只输出NG情况的方案。由于在计算2平面点云距离时,他得到的是一个距离的数组,当我们在去对数组进行处理时,会及其的耗费时间。
所以一般推荐矫正平面的形式。
查看如何平面矫正可以访问,文章开头链接中的我的另一个博客
相关文章:
Halcon3D表面平面度检测-平面差值法
//倾斜平面矫正 https://blog.csdn.net/m0_51559565/article/details/137146179 //平面度和平面缺陷检测,平面矫正法 https://blog.csdn.net/m0_51559565/article/details/137163729前言 通常我们对表面平面度进行检测时,通常使用2种方式。1:…...
golang 在多线程中避免 CPU 指令重排
发布日期:2024-03-26 16:29:39 起因 golang 的发明初衷便是多线程,是一门专门用于多线程高并发的编程语言。其独创的 GMP 模型在多线程的开发上提供了很大的便利。 现代计算机基本上都是多核 CPU 的结构。CPU 在进行指令运行的时候,为了提高…...
自动化更新包文件--shell脚本
自动化更新包文件--shell脚本 背景手动更包自动化更包 背景 作为一名实施工程师,当然也协助做些测试的工作,当产品功能开发后,研发会将本次迭代涉及的前后端包文件提供过来。有时会因为一些原因研发没法现场开发,那就需要我们配合…...
Vue element-plus 导航栏 [el-menu]
导航栏 [el-menu] Menu 菜单 | Element Plus el-menu有很多属性和子标签,为网站提供导航功能的菜单。 常用标签: 它里面有两个子标签。el-menu-item,它其实就是el-menu每一个里面的item,item就是真实匹配到路由的每个栏目&#…...
数据结构——数组
数组定义: 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。 性…...
python asyncio websockets server
python websocket server在收到接受消息处理完后会默认关闭连接。需要在msg_handler里面加个while true就能一直保持连接了。 start_server websockets.serve(msg_handler, "0.0.0.0", 29967) asyncio.get_event_loop().run_until_complete(start_server) asyncio.…...
视频素材免费网站有哪些?8个视频素材库网站下载推荐
在视频创作领域,选择正确的高质量无水印素材网站能够极大地丰富您的作品,让每一帧都鲜活起来。下面,我们继续为您介绍更多优质的视频素材网站,每一个都是您创作旅程中的宝贵资源。 1. 蛙学府(中国) 集合了…...
ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异
引言 随着互联网的快速发展,信息的获取变得比以往任何时候都更加便捷。在数字化时代,人们对于获取准确、及时信息的需求愈发迫切。传统搜索引擎通过关键词匹配的方式为用户提供了大量的信息,然而,这种机械式的检索方式有时候并不…...
xargs后调用bash自定义函数(写该函数文本到脚本, 并引导PATH)
xargs后调用bash自定义函数 需要3步骤,如下 function to_markdown_href_func() { fp$1 #echo $fpecho -e "\n[${fp}](${PREFIX}/${fp})" }BIN/tmp/bin/ F$BIN/to_markdown_href_func.sh mkdir -p $BIN 获得函数to_markdown_href_func的文本 ,写文本到 /tmp/bin/to_ma…...
学术论文写作新利器:ChatGPT技巧详解
ChatGPT无限次数:点击直达 学术论文写作新利器:ChatGPT技巧详解 在如今信息爆炸的时代,学术论文写作变得愈发重要且具有挑战性。随着人工智能技术的不断发展,ChatGPT作为一种强大的写作辅助工具,为学术论文创作者提供了全新的可能…...
Spring整合JDBC
1、引入依赖 <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><depen…...
详解Qt中的布局管理器
Qt中的布局管理是用于组织用户界面中控件(如按钮、文本框、标签等)位置和尺寸调整的一种机制。说白了就是创建了一种规则,随着窗口变化其中的控件大小位置跟着变化。Qt提供了多种布局管理器,每种都有其特定用途和特点。以下是对Qt…...
MyBatis 参数重复打印的bug
现象 最近有个需求,需要在mybatis对数据库进行写入操作的时候,根据条件对对象中的某个值进行置空,然后再进行写入,这样数据库中的值就会为空了。 根据网上查看的资料,选择在 StatementHandler 类执行 update 的时候进…...
ES6学习之路:迭代器Iterator和生成器Generator
迭代器 一、知识背景 什么是迭代器 迭代器就是在一个数据集合中不断取出数据的过程迭代和遍历的区别 遍历是把所有数据都取出迭代器注重的是依次取出数据,它不会在意有多少数据,也不会保证能够取出多少或者能够把数据都取完。比如斐波那契额数列&#…...
如何使用 DynamiCrafter Interp Loop 无缝连接两张照片
DynamiCrafter Interp Loop 是一个基于 AI 的工具,可以用来无缝连接两张照片。它使用深度学习技术来生成中间帧,从而使两张照片之间的过渡更加自然流畅。 使用步骤 访问 DynamiCrafter Interp Loop 网站:https://huggingface.co/spaces/Dou…...
今天起,Windows可以一键召唤GPT-4了
ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 微软 AI 大计的最后一块拼图完成了? 把 Copilot 按钮放在 Window…...
使用Kaggle API快速下载Kaggle数据集
前言 在使用Kaggle网站下载数据集时,直接在网页上点击下载可能会很慢,甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包: pip install…...
java 通过 microsoft graph 调用outlook(二)
这次提供一些基础调用方式API PS: getMailFolders 接口返回的属性中,包含了未读邮件数量unreadItemCount 一 POM文件 <!-- office 365 --><dependency><groupId>com.google.guava</groupId><artifactId>guava<…...
【机器学习】代价函数
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
[leetcode] 100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true示例 2&a…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
