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…...
2025+数据集成新范式:webSpoon企业级部署实战指南
2025数据集成新范式:webSpoon企业级部署实战指南 【免费下载链接】pentaho-kettle webSpoon is a web-based graphical designer for Pentaho Data Integration with the same look & feel as Spoon 项目地址: https://gitcode.com/gh_mirrors/pen/pentaho-ke…...
ABC系统实战指南:革新数字电路设计的逻辑综合与形式验证技术突破
ABC系统实战指南:革新数字电路设计的逻辑综合与形式验证技术突破 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代集成电路设计流程中,工程师…...
【CPython内存管理白皮书级解析】:从PyObject到ob_refcnt,看懂泄漏发生的底层5层机制
第一章:CPython内存管理的底层基石与泄漏本质CPython 的内存管理并非依赖操作系统级 malloc/free 的直接映射,而是构建在三层抽象之上的精密系统:最底层为系统内存分配器(如 mmap 或 malloc),中间层为 CPyt…...
AR.js终极指南:在Web浏览器中实现高效增强现实的完整解决方案
AR.js终极指南:在Web浏览器中实现高效增强现实的完整解决方案 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js AR.js是一个轻量级JavaScript库࿰…...
Windows HEIC缩略图终极指南:3分钟让iPhone照片在Windows完美预览
Windows HEIC缩略图终极指南:3分钟让iPhone照片在Windows完美预览 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是不是…...
3分钟掌握图片比对:PicQuickCompare让你高效发现视觉差异
3分钟掌握图片比对:PicQuickCompare让你高效发现视觉差异 【免费下载链接】PicQuickCompare Compare two pictures quickly 项目地址: https://gitcode.com/gh_mirrors/pi/PicQuickCompare PicQuickCompare是一款专为快速图片比对而设计的轻量级工具…...
Spring Boot项目实战:5步搞定sa-token与OAuth2.0的无缝整合(附完整代码)
Spring Boot项目实战:5步搞定sa-token与OAuth2.0的无缝整合(附完整代码) 在当今微服务架构盛行的时代,认证授权已成为系统设计中不可或缺的一环。对于Java开发者而言,如何在保持代码简洁的同时实现强大的权限控制&…...
从Go协程到Java 21虚拟线程:一个Gopher的迁移避坑指南与性能对比
从Go协程到Java 21虚拟线程:一个Gopher的迁移避坑指南与性能对比 作为一名长期深耕Go语言生态的开发者,第一次接触Java 21的虚拟线程时,那种熟悉又陌生的感觉令人印象深刻。Go的goroutine以其轻量和高效著称,而Java平台线程的笨重…...
Windows右键菜单终极管理指南:ContextMenuManager完全掌控你的系统交互体验
Windows右键菜单终极管理指南:ContextMenuManager完全掌控你的系统交互体验 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单管理一直…...
实战指南:基于OpenSpec规范,使用快马平台生成可直接集成的微服务客户端代码
今天在微服务开发中遇到一个典型需求:我们的支付网关服务已经用OpenAPI 3.0规范定义好了接口,现在需要在另一个Java服务中调用这些接口。传统做法要手动写HTTP客户端代码,既耗时又容易出错。最近发现InsCode(快马)平台能基于OpenSpec文档自动…...
