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)//将相机平面映射到实际坐标位置

 

位姿:描述是世界坐标转换到相机坐标的旋转平移参数,也就是该点在相机坐标系下的位姿

 

 

 

posted @ 2021-12-31 11:42  zyl2  阅读(1624)  评论(0编辑  收藏  举报