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

csharp 复制代码
//倾斜平面矫正
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程序

csharp 复制代码
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选取图像区域

csharp 复制代码
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生成测量基准平面

csharp 复制代码
*设置等平面前,对平面进行大卷积核的高斯滤波,防止噪点的存在印象平面精度
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计算点云距离

csharp 复制代码
*对被检测面进行高斯滤波,用于去除噪点。
*如果要求测量精度较大时,推荐高斯卷积核设置为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统计和判断数据

csharp 复制代码
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平面点云距离时,他得到的是一个距离的数组,当我们在去对数组进行处理时,会及其的耗费时间。

所以一般推荐矫正平面的形式。

查看如何平面矫正可以访问,文章开头链接中的我的另一个博客

相关推荐
迁移科技1 天前
告别人工分拣!迁移科技 AI+3D 视觉让机器人 “看懂” 无序抓取
人工智能·科技·3d·机器人·自动化·视觉检测
BullSmall1 天前
Promtheus和Alertmanager 之间是通过管理平面还是业务层面IP交互
网络协议·tcp/ip·平面
玖釉-1 天前
Vulkan 3D Gaussian Splatting 本地部署与运行:从 PLY 模型到实时渲染
3d
kobesdu1 天前
当算法跑不通时:3D激光SLAM工程实践中的隐藏陷阱与全链路排查
算法·3d
AI视觉网奇1 天前
b3dkit 生成连接器
3d
吃好睡好便好1 天前
在Matlab中绘制饼状图
开发语言·学习·matlab·3d·信息可视化
koharu1231 天前
PointRCNN 精解:从原始点云到三维框的两阶段检测
人工智能·深度学习·目标检测·3d·三维点云
似水流年wxk1 天前
cocos3D物体线性溶解消失效果
3d
安妮的小熊呢1 天前
CRMEB标准版v6.0: 商城DIY装修新升级,PS级自由设计!
运维·javascript·平面·信息可视化·小程序·开源软件
2401_863801462 天前
OBJ、FBX 与 GLTF 选择用于设计导入的最佳 3D 模型格式:实用的比较可帮助设计人员选择正确的 3D 格式,同时保持几何形状、纹理和性能不变。
3d