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)//將相機平面映射到實際坐標位置

 

位姿:描述是世界坐標轉換到相機坐標的旋轉平移參數,也就是該點在相機坐標系下的位姿

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM