Halcon3D倾斜平面矫正至水平面

前言

在相当多的3d检测中,由于各种因素的干扰,我们所检测的平面通常并不是一个水平面,或者被检测的面不是水平面的情况。尤其是在倾斜面的缺陷检测和平面度检测中,使用被测面与拟合基准面进行计算很难做到准确的定位到缺陷的情况,由于被测量的平面属于倾斜状态,所以,也不能直接使用点云z轴筛选的形式去完成。

所以我们需要将被检测的平面进行平面矫正,矫正为近似水平面状态,得以实现对测量的精准度。

1.halcon程序

csharp 复制代码
dev_get_window (WindowHandle)
*读取单通道深度图
read_image (Image, 'D:/1NewWork/Halcon3D/1.tif')
*获取图像的高宽
get_image_size (Image, Width, Height)
*生成对应图像的X与Y灰度面
gen_image_surface_first_order (X, 'real', 0,1, 0, 0, 0, Width, Height)
gen_image_surface_first_order (Y, 'real', 1, 0, 0, 0, 0, Width, Height)

*未矫正的图像
gen_rectangle2 (ROI_0, 36.108, 31.8289, rad(-75.4188), 37.7147, 8.15956)
reduce_domain (Image, ROI_0, ImageReduced2)
xyz_to_object_model_3d (X,Y, ImageReduced2, 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模型
*visualize_object_model_3d (WindowHandle,ObjectModel3D , [], [], [],[], [], [], [], PoseOut)

*矫正的图像
*矫正区域的ROI
gen_rectangle1 (ROI_0, 25.0932, 22.1184, 33.7322, 33.7711)
reduce_domain (Image, ROI_0, ImageReduced)
*获取灰阶平面
moments_gray_plane (ROI_0, ImageReduced, MRow, MCol, Alpha, Beta, Mean)
*创建平行于灰阶平面的面
gen_image_surface_first_order (ImageSurface1, 'real', Alpha, Beta, Mean, MRow, MCol, Width, Height)
*将2个面相减得到矫正后的面
sub_image (Image, ImageSurface1, ImageSub, 1, 0)
dev_display (Image)
dev_display (ImageSub)

gen_rectangle2 (ROI_0, 35.892, 30.1026, rad(-75.805), 35.199, 6.05358)
reduce_domain (ImageSub, ROI_0, ImageReduced1)
xyz_to_object_model_3d (X,Y, ImageReduced1, ObjectModel3D1)
fit_primitives_object_model_3d(ObjectModel3D1, ['primitive_type', 'fitting_algorithm'], ['plane', 'least_squares_tukey'], ObjectModel3D9)
*获取到平面参数,显示平面方程
get_object_model_3d_params(ObjectModel3D9, 'primitive_parameter', plane1)

根据平面夹角求解公式,求解得初始平面夹角141度,矫正后平面夹角0.33度

2.halcon程序解析

2.1初始图像夹角

在文章中,我选取一个在实际中非常常见的过度倾斜面,然后对倾斜面进行平面矫正。

csharp 复制代码
*未矫正的图像
gen_rectangle2 (ROI_0, 36.108, 31.8289, rad(-75.4188), 37.7147, 8.15956)
reduce_domain (Image, ROI_0, ImageReduced2)
xyz_to_object_model_3d (X,Y, ImageReduced2, 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)

我们先对倾斜平面进行裁切提取,并拟合出倾斜平面,用于比较矫正后的平面方程,求解初始平面夹角

2.2计算矫正平面

csharp 复制代码
*矫正的图像
*矫正区域的ROI,选择倾斜平面所在的位置
gen_rectangle1 (ROI_0, 25.0932, 22.1184, 33.7322, 33.7711)
reduce_domain (Image, ROI_0, ImageReduced)
*获取灰阶平面,计算灰阶平面位姿
moments_gray_plane (ROI_0, ImageReduced, MRow, MCol, Alpha, Beta, Mean)
*创建平行于灰阶平面的面
gen_image_surface_first_order (ImageSurface1, 'real', Alpha, Beta, Mean, MRow, MCol, Width, Height)
*将2个面相减得到矫正后的面,即可将倾斜平面矫正到水平面
sub_image (Image, ImageSurface1, ImageSub, 1, 0)

2.3生成矫正后的3d模型

csharp 复制代码
*裁剪原倾斜面位置,用于验证矫正情况
gen_rectangle2 (ROI_0, 35.892, 30.1026, rad(-75.805), 35.199, 6.05358)
reduce_domain (ImageSub, ROI_0, ImageReduced1)
xyz_to_object_model_3d (X,Y, ImageReduced1, ObjectModel3D1)
fit_primitives_object_model_3d(ObjectModel3D1, ['primitive_type', 'fitting_algorithm'], ['plane', 'least_squares_tukey'], ObjectModel3D9)
*获取到平面参数,显示平面方程
get_object_model_3d_params(ObjectModel3D9, 'primitive_parameter', plane1)

最终输出平面方程参数plane1作为验算

总结

当平面进行矫正后,即可对新的3d模型进行处理和检测。由于矫正平面受到倾斜平面上的噪点影响,可以预先进行高斯滤波,可以有效的提高矫正精度。

csharp 复制代码
*获取灰阶平面,计算灰阶平面位姿
moments_gray_plane (ROI_0, ImageReduced, MRow, MCol, Alpha, Beta, Mean)
*创建平行于灰阶平面的面
gen_image_surface_first_order (ImageSurface1, 'real', Alpha, Beta, Mean, MRow, MCol, Width, Height)

如上2行所述,获取到矫正参数后,可以对任意区域进行矫正

相关推荐
无言听风雨丶3 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
FlightYe4 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
云飞云共享云桌面8 小时前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造
释厄62313 小时前
三角基底律——矩阵3x6 是所有三角形的基底·3D中高就是边
线性代数·3d·矩阵
Solange__15 小时前
图片转3D导出GLB、FBX还是OBJ?按5类任务比较材质、动画与可编辑性
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
Jmyd012316 小时前
博物馆AR导览数字孪生架构设计:从空间数据到AR应用全链路
3d·系统安全·ar·数字孪生·博物馆·三维数字化
chaoyuanl17 小时前
超元力玻璃剧场:裸眼3D、8K高清与悬空栈桥的成熟文旅解决方案
大数据·人工智能·3d·xr·vr
苏州福兰克18 小时前
运行裸眼3D显示器对电脑显卡配置有什么要求?
3d·计算机外设·电脑
Martina_03211 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节
Solange__2 天前
在线3D预览器、Blender和游戏引擎怎么选?按5类任务比较格式、隐私与编辑性
人工智能·游戏·3d·游戏引擎·blender·1024程序员节·关卡设计