在一些汽车企业经常会有纠偏引导项目,常规的2D方法只能得到图像中的x,y坐标,而采用三维相机成本高,且在x,y的精度上还不如RGB相机,所以再此分享一种2D相机获取物体三维姿态的方法。
1.该方法需要获取相机的内参和畸变参数生成内参文件,放置一块标定板至车门上,采集一张图开始进行相机标定;
CalTabDescrName := 'caltab_200mm.descr'
*镜头焦距, 畸变系数, x靶面大小,y靶面大小, 图像中主点的列坐标,图像中主要点的行坐标,图像宽,图像高
gen_cam_par_area_scan_division (0.0160522, -402.331, 9.30632e-006, 9.3e-006, 640/2, 512/2, 640, 512, CamParam)
caltab_points (CalTabDescrName, X, Y, Z)
find_caltab (Image, Caltab, CalTabDescrName, 3, 112, 5)
find_marks_and_pose (Image, Caltab, CalTabDescrName, CamParam, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, Pose)
gen_cross_contour_xld (Cross, RCoord, CCoord, 6, 0.785398)
2.绘制车门的ROI轮廓区域,制作轮廓模板,用于轮廓模板的匹配;
reduce_domain (Image, ROI, ImageReduced)
dev_clear_window ()
dev_display (ImageReduced)
* 设置标定板的高度,一般为3mm
set_origin_pose (Pose, 0, 0, 0.03, PoseNewOrigin)
*
create_planar_calib_deformable_model (ImageReduced, CamParam, PoseNewOrigin, 'auto', -0.1, 0.2, 'auto', 0.6, 1, 'auto', 0.6, 1, 'auto', 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
*设置可变形模型参数
set_deformable_model_param (ModelID, 'get_deformable_model_contours_coord_system', 'world')
*返回可变形模型轮廓
get_deformable_model_contours (ModelContours, ModelID, 1)
count_obj (ModelContours, NumberContour)
3.进行模板匹配;
输入目标图像和模板进去,得到目标图的匹配姿态和得分等信息;
*Pose是匹配得到的匹配姿态,Score是匹配得分
find_planar_calib_deformable_model (ImageReducedSearch, ModelID, -0.1, 0.2, 0.6, 1.0, 0.6, 1.0, 0.7, 1, 1, 0, 0.7, [], [], Pose, CovPose, Score)
4.上几张匹配效果图;
下一讲将介绍车门定位引导的手眼标定方法;