转自:http://blog.sina.com.cn/s/blog_723702bc0102xfjs.html
功能 : 相机内参标定
ImgPath := '3d_machine_vision/calib/'
dev_close_window ()
dev_open_window (0, 0, 652, 494, 'black', WindowHandle)
dev_update_off ()
dev_set_draw ('margin')
dev_set_line_width (3)
OpSystem := environment('OS')
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*
* Calibrate the camera.
*
StartCamPar := [0.016,0,0.0000074,0.0000074,326,247,652,494]
//创建标定数据模型,单相机标定选“calibration_obiect” 得到标定数据模型的句柄
create_calib_data ('calibration_object', 1, 1, CalibDataID)
//在标定模型中设定相机初始内参, area_scan_division为面扫相机
set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamPar)
//在标定模型中设定标定板描述文件
set_calib_data_calib_object (CalibDataID, 0, 'caltab_30mm.descr')
NumImages := 10
* Note, we do not use the image from which the pose of the measurement plane can be derived
for I := 1 to NumImages by 1
read_image (Image, ImgPath + 'calib_' + I$'02d')
dev_display (Image)
//提取标定板的centers and the contours 估计标定板相对相机的pose 所有收集的数据都存储在校准对象姿态CalibObjPoseIdx的校准数据模型中
find_calib_object (Image, CalibDataID, 0, 0, I, [], [])
//上面那一句把centers and contours 写到句柄里,下面这句在句柄里把contours数据取出来
get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
dev_set_color ('green')
dev_display (Caltab)
endfor
//标定相机 相机标定完成
calibrate_cameras (CalibDataID, Error)
//在句柄里把'camera'参数取出来
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
* Write the internal camera parameters to a file
//把'camera'参数写到'camera_parameters.dat'里
write_cam_par (CamParam, 'camera_parameters.dat')
Message := 'Interior camera parameters have'
Message[1] := 'been written to file'
disp_message (WindowHandle, Message, 'window', 12, 12, 'red', 'false')
clear_calib_data (CalibDataID)