标定部分代码:
- binocular_calibration (X, Y, Z, RowsL, ColsL, RowsR, ColsR, StartCamParL, StartCamParR, StartPosesL, StartPosesR, 'all', CamParamL, CamParamR, NFinalPoseL, NFinalPoseR, cLPcR, Errors)
复制代码
双目矫正的代码:
- gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, cLPcR, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)
复制代码
读取矫正后的标定图,提取圆心坐标,并求得三维坐标:
- read_image (ImageMapped1, ImgPath + 'L_rec1')
- read_image (ImageMapped2, ImgPath + 'R_rec1')
- dev_set_window (WindowHandle1)
- dev_display (ImageMapped1)
- dev_set_window (WindowHandle2)
- dev_display (ImageMapped2)
- find_caltab (ImageMapped1, CaltabL_rec, 'caltab_0.6.descr', 3, 112, 5)
- find_marks_and_pose (ImageMapped1, CaltabL_rec, 'caltab_0.6.descr', RectCamParL, 128, 10, 18, 0.9, 15, 100, RCoordL_rec, CCoordL_rec, StartPose1)
- disp_caltab (WindowHandle1, CaltabFile, RectCamParL, StartPose1, 1)
- find_caltab (ImageMapped2, CaltabR_rec, 'caltab_0.6.descr', 3, 112, 5)
- find_marks_and_pose (ImageMapped2, CaltabR_rec, 'caltab_0.6.descr', RectCamParR, 128, 10, 18, 0.9, 15, 100, RCoordR_rec, CCoordR_rec, StartPose2)
- disp_caltab (WindowHandle2, CaltabFile, RectCamParR,StartPose2 , 1)
- *stop()
- Disparity := CCoordR_rec - CCoordL_rec
- disparity_to_distance (RectCamParL, RectCamParR, RectLPosRectR, Disparity, Distance)
- disparity_to_point_3d (RectCamParL, RectCamParR, RectLPosRectR, RCoordL_rec, CCoordL_rec, Disparity, X, Y, Z)
- pose_to_hom_mat3d (CamPoseRectL, c1Trect1)
- affine_trans_point_3d (c1Trect1, X, Y, Z, c1X, c1Y, c1Z)
复制代码
标定误差为0.1pixl,矫正误差也是0.1,得到的c1Z数值与真实距离查了十几厘米.
这里的X, Y, Z, c1X, c1Y, c1Z 单位是m吗? |