Halcon 单相机标定板标定
首先得到相机的内参
gen_cam_par_area_scan_division (0.012, 0, 0.00000375, 0.00000375, 640, 480, 1280, 960, StartCamPar)
普通的畸变:’area_scan_division’ [’area_scan_division’, Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight
高精度畸变(多项式子):’area_scan_polynomial’ [’area_scan_polynomial’, Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight
然后建立标定对象:
create_calib_data ('calibration_object', 1, 1, CalibDataID)//建立标定对象
set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar)//设置相机的参数
set_calib_data_calib_object (CalibDataID, 0, 'calplate_80mm.cpd')//设置标定板的文件
//查找标定板
NumImages := 7
for I := 1 to NumImages by 1
read_image (Image, ImgPath + 'calib_image_' + I$'02d')
dev_display (Image)
find_calib_object (Image, CalibDataID, 0, 0, I, [], [])
get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPose)//获取标定板的位姿
dev_set_color ('green')
dev_display (Caltab)
dev_set_color ('red')
disp_circle (WindowHandle, Row, Column, gen_tuple_const(|Row|,1.5))
endfor
//纠正实际世界坐标位姿
set_origin_pose (Pose, 0, 0, 0.002, Pose)//由于标定板的厚度是0.02,所以Z平移到相机坐标需要加上0.02
//标定相机
calibrate_cameras (CalibDataID, Errors)//标定相机
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)//得到相机标定后的相机内参,这个内参包含了畸变参数
get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', Pose)//以第一张图作为参考平面,得到参考平面的坐标位姿
//坐标转换
image_points_to_world_plane (CamParam, Pose, Row, Col, 'mm', X1, Y1)//将相机平面映射到实际坐标位置
位姿:描述是世界坐标转换到相机坐标的旋转平移参数,也就是该点在相机坐标系下的位姿