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、附件