Halcon3D表面平面度检测 您所在的位置:网站首页 halcon机器视觉去除噪点 Halcon3D表面平面度检测

Halcon3D表面平面度检测

2024-07-09 14:49| 来源: 网络整理| 查看: 265

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有