Halcon3D倾斜平面矫正至水平面

前言

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

1.halcon程序

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初始图像夹角

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

    
    *未矫正的图像
    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作为验算

      总结

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

      *获取灰阶平面,计算灰阶平面位姿
      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行所述,获取到矫正参数后,可以对任意区域进行矫正

      转载自:https://blog.csdn.net/m0_51559565/article/details/137146179

      • 0
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值