Halcon3D表面平面度检测-平面差值法

//倾斜平面矫正
https://blog.csdn.net/m0_51559565/article/details/137146179

前言

通常我们对表面平面度进行检测时,通常使用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平面点云距离时,他得到的是一个距离的数组,当我们在去对数组进行处理时,会及其的耗费时间。
所以一般推荐矫正平面的形式。
查看如何平面矫正可以访问,文章开头链接中的我的另一个博客

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

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

相关文章

Android裁剪图片为波浪形或者曲线形的ImageView

如果需要做一个自定义的波浪效果的进度条,裁剪图片,对ImageView的图片进行裁剪,比如下面2张图,如何实现? 先看下面的效果,看到其实只需要对第一张高亮的图片进行处理即可,灰色状态的作为背景图。…

centos7配置阿里云的镜像站点作为软件包下载源

目录 1、备份 2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ 3、测试 阿里镜像提供的配置方法:centos镜像_centos下载地址_centos安装教程-阿里巴巴开源镜像站 1、备份 [rootlocalhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentO…

第十二章:预处理命令

文章目录 第十二章:预处理命令宏定义无参宏定义带参数的宏定义 文件包含处理 第十二章:预处理命令 作用:由编译预处理程序对程序中的特殊命令作出解释,以产生新的源程序对其进行正式编译 C语言与其他语言的重要区别就是可以使用预…

PTA L2-038 病毒溯源

病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。 现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。 在此假设给出的变异都是由突变引起的&a…

用 AI 编程-释放ChatGPT的力量

最近读了本书,是 Sean A Williams 写的,感觉上还是相当不错的。一本薄薄的英文书,还真是写的相当好。如果你想看,还找不到,可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…

Vue2版本封装公共echarts的监听方法

#注意 : 因为一个页面有多个图表,所以封装一个公共的js文件,方便后续使用。 适用于Vue2版本,粘贴即用即可。 1、echartsMixin.js文件如下 // echartsMixin.js import echarts from echartsexport default {data() {return {myC…

标题:基于uQRCode的Vue前端二维码生成组件技术探究

摘要:随着移动互联网的普及,二维码作为信息传递的媒介在各类应用中得到了广泛使用。前端开发中,二维码生成功能已成为一个常见的需求。本文将深入探讨如何使用uQRCode库在Vue前端框架中封装一个二维码生成组件,该组件可适用于所有…

小迪学习笔记(内网安全)(常见概念和信息收集)

小迪学习笔记(内网安全)(一) 内网分布图内网基本概念工作组和域环境的优缺点内网常用命令域的分类单域父域和子域域数和域森林 Linux域渗透问题内网安全流程小迪演示环境信息收集mimikatzLazagne(all)凭据信息政集操作演示探针主机…

夏季水域安全管理,AI智能识别算法防溺水视频监控方案

随着夏季的到来,不少人为了一时的痛快凉爽就私自下水游泳,特别是在野外池塘,由于长期无人监管,极易发生人员溺亡事件,如何对池塘水域进行全天候无人值守智能监管,并实现发生人员闯入就立即告警?…

C# 学习第五弹——语句

一、if语句 —简单if语句 —if else 语句 —if else if else 语句 1、简单if语句 if(表达式){语句} (1)表达式必须使用圆括号括起来; (2)表达式:关系表达式或逻辑表达…

数据结构:单调栈和单调队列

文章目录 一、单调栈1.1、栈的思想1.2、单调栈1.2.1、单调栈的基本应用:找出数组中每个元素右侧第一个更大的元素1.2.2、单调栈的基本应用:找出数组中每个元素左侧第一个更大的元素1.2.3、单调栈拓展1.2.4、单调栈LeetCode题单 二、单调队列2.1、队列的思…

java数据结构与算法刷题-----LeetCode34. 在排序数组中查找元素的第一个和最后一个位置

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 二分查找 二分查找 解题思路:时间复杂度O( l o g 2 …

算法沉淀——拓扑排序

前言: 首先我们需要知道什么是拓扑排序? 在正式讲解拓扑排序这个算法之前,我们需要了解一些前置知识(和离散数学相关) 1、有向无环图: 指的是一个无回路的有向图。 入度:有向图中某点作为图…

HarmonyOS 应用开发之启动/停止本地PageAbility

启动本地PageAbility PageAbility相关的能力通过featureAbility提供,启动本地Ability通过featureAbility中的startAbility接口实现。 表1 featureAbility接口说明 接口名接口描述startAbility(parameter: StartAbilityParameter)启动Ability。startAbilityForRes…

人工智能|推荐系统——搜索引擎广告

原文题目 Dark sides of artificial intelligence: The dangers of automated decision-making in search engine advertising(JASIST,2023) 人工智能的阴暗面:搜索引擎广告自动决策的危险 摘要 随着人工智能应用的日益广泛,搜索引擎供应商越来越多地要求广告商使用基于机…

k8s局域网通过operator部署rabbitmq

参考:Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像,这里的版本是根…

什么是搜索引擎(SEO)爬虫它们是如何工作的?

什么是搜索引擎(SEO)爬虫&它们是如何工作的? 你的网站上有蜘蛛🕷️。别抓狂!我说的不是真正的八条腿的蜘蛛🕷️。 我指的是搜索引擎优化爬虫。他们是实现SEO的机器人。每个主要的搜索引擎都使用爬虫来…

linux centos7.9 weblogic14c java1.8.401 安装部署流程

一、获取安装包: Java1.8.401:Java Downloads | Oracle weblogic 14c:https://download.oracle.com/otn/nt/middleware/14c/14110/fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip 选generic版本 二、将安装包传到Linux服务器上 方法不限&#xf…

物理寻址和功能寻址,服务器不同的应答策略和NRC回复策略

1:功能寻址,服务器应答与NRC回复策略 详细策略上,又分为服务有子功能,和不存在子功能。 1.1功能寻址,存在子功能 存在子功能的情况下,又分为supress postive response (即子功能字节的bit7&a…

Servlet基础 管理员注册页面

管理员注册页面 index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":&quo…