Halcon標定板標定流程
1、製作標定板
- 調用函數:gen_caltab (7, 7, 0.00250, 0.4, 'caltab_25mm.descr', 'caltab_25mm.ps')
- 生成標定板圖紙:caltab_25mm.ps
- 生成標定板描敘文件:caltab_25mm.descr
其中7,7爲生成7*7的陣列,0.00250爲陣列間間距爲2.5mm,0.4爲直徑與標記距離的比值。
2、查詢相機初始參數
StartCamPar:= [0.008,0,5.3e-006,5.3e-006,640,512,1280,1024]
0.008:默認焦距,0:徑向扭曲係數(K爲負則是桶形畸變,爲正是枕形畸變),5.3e-006:相機像素尺寸(Pixel Size),640:Weight/2,512:Height/2,1280:相機分辨率的寬,1024相機分辨率的高(此處是隻用相機拍圖能看到寬高)
3、拍照10~20張
架好相機,然後用標定板在相機下拍攝不同位姿圖片10~20張,拍攝圖片時標定板儘量覆蓋整個視場(標定板要根據工作距離、視場大小定製);拍攝圖片上的圓直徑不得小於10個像素 。
4、相機標定
- 創建標定數據類型:
create_calib_data('calibration_object', 1, 1, CalibDataID)
其中 'calibration_object':相機矯正,1:一個相機,1:一個矯正對象,CalibHandle:句柄
- 設置標定相機參數類型:
set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamPar)
其中,0:相機索引爲1,'area_scan_division':面掃division模式,StartCamPar:相機初始參數
- 指定所用標定板的具體描述文件:
set_calib_data_calib_object (CalibDataID, 0, CaltabName)
其中,0:校正對象索引,CaltabName:描述文件路徑
- 依次讀取圖片:
- 尋找圖片中的標定區域
find_caltab (Image, CalPlate,CaltabName, 3, 112, 5)
其中,3:高斯濾波核,112:標記提取的閾值,5:標定板上圓的最小直徑。
- 尋找標定板標誌點座標和預估外參
find_marks_and_pose (Image, CalPlate, CaltabName, StartCamPar, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose)
- 其中,128:輪廓檢測的初始閾值,10:輪廓檢測的初始閾值循環減少值,18:輪廓檢測的最小閾值。0.9:輪廓檢測的濾波係數,15:標記的輪廓的最小長度,100:標記的最大直徑
- 儲存標定信息到標定模型
set_calib_data_observ_points(CalibDataID, 0, 0, i, RCoord, CCoord, 'all', StartPose)
其中,儲存標定信息到標定模型,0:相機索引,0:標定對象的索引,‘all’:提取點與觀測標定對象的標定標誌的所有對應關係。
- 獲取相機的內外參數
- 標定相機參數
calibrate_cameras (CalibDataID, Error)
- 獲取相機內部參數
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
其中‘camera’:校準數據的類型,0:相機索引,'params':被檢查數據的名稱。CamParam:獲得的相機內部參數
- 獲取相機外參數
get_calib_data (CalibDataID, 'calib_obj_pose',[0,1],'pose',PoseCalib)
- 其中,獲取相機外參數‘calib_obj_pose’:校準數據的類型,[0,1]:受影響項目的索引,'pose':姿態。PoseCalib:獲得外部參數
5、實驗
圖1 標定板檢測圖
圖2 標定板中尺寸檢測
圖3 標定板圖校正與旋轉轉換效果圖
圖4 世界座標中5mm直線轉圖像座標圖
圖5 圖中直線長度檢測效果圖
6、代碼
7、附件