Halcon3D倾斜平面矫正至水平面-2.halcon程序解析

时间:2024-04-02 22:47:04

2.1初始图像夹角

在这里插入图片描述
在文章中,我选取一个在实际中非常常见的过度倾斜面,然后对倾斜面进行平面矫正。


*未矫正的图像
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计算矫正平面

*矫正的图像
*矫正区域的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模型

*裁剪原倾斜面位置,用于验证矫正情况
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作为验算