天津网站怎么做seo,wordpress中文版下载地址,重庆智能网站建设价格,腾讯 网站开发前言
在相当多的3d检测中#xff0c;由于各种因素的干扰#xff0c;我们所检测的平面通常并不是一个水平面#xff0c;或者被检测的面不是水平面的情况。尤其是在倾斜面的缺陷检测和平面度检测中#xff0c;使用被测面与拟合基准面进行计算很难做到准确的定位到缺陷的情况…前言
在相当多的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行所述获取到矫正参数后可以对任意区域进行矫正