参考《solution_guide_iii_c_3d_vision.pdf》
3.2.2.2 Which Distortion Model to Use 选用何种畸变模型
对于面阵相机,halcon中两种畸变模型:The division model and the polynomial model(差分模型和多项式模型),前者用1个参数去描述径向畸变,后者5个参数去描述径向和切向畸变。
- division model 优势:畸变矫正时更快,例如将世界坐标投影到图像平面中。如果标定图片较少,或者事业覆盖不全,该模型标定结果更稳定。
- polynomial model 优势:更精确的建模两种畸变,因为对径向畸变有更高的阶。缺点:不能反向分析,矫正图片必须迭代计算,比division model更慢。
- 通常使用division模型,但如果觉得精度不够,推荐用polynomial模型。
3.2.3.1 How to Obtain a Suitable Calibration Plate 如何获取一个合适的标定板
必须高精度,对高精度应用,必须降到1um以下!推荐通过购买halcon的分销商处购买标定板。
新的六边形标定板从halcon12开始支持,推荐给大部分的应用使用。比矩形标定板有如下优点:
- 矩形标定板必须在视野内,六边形标定板可伸出图像边缘之外。校准图像又快又方便,同时不失鲁棒性。
- 由于拥有较多的特征标记点,可以伸出图像边界之外,因此用较少的图像数量即可完成校准。
注意事项: - 六边形标定板必须至少有一个finder图案完全可见,矩形标定板必须看到完整的校准板才能找到校准板并进行估计它的姿势。
- 六边形排列标记的校准板的坐标系位于第一个图案中心标记的中心,而带有矩形排列标记的板位于所有标记的重心。
- 六边形标定板的描述文件是".cpd"结尾的,矩形标定板是".descr"结尾的。
- 两个接口create_caltab(六边形)和gen_caltab (矩形)仅仅用于测试,无法精确的打印16cm以内的六边形标定板、3cm以内的矩形标定板。
3.2.3.2 Using Your Own Calibration Object 用自定义的标定物
使用HALCON,您不局限于使用平面校准对象,如HALCON校准板。你可以使用3D校准对象,甚至可以使用任意特征点(自然地标)。唯一的要求是模型点的3D世界位置具有高精度。然后,只需将校准对象所有点(标记)的三维坐标作为参数中的元组传递set_calib_data_calib_object对象的CalibObjDescr。所有点的所有x、y和z坐标都必须以[X,Y,Z]的形式打包在元组中按顺序排列。但是,请注意,如果使用自己的校准对象,则不能使用运算符find_calib_object接口。必须自己确定模型点的二维位置以及与三维点的对应关系!如果用自己的标定物,必须通过 set_calib_data_observ_points接口,将提取的mark信息以及对应关系存储到校准模型中。
注意,halcon11以前版本用find_caltab and find_marks_and_pose这两个接口查找mark点,它们仅适用于矩形标定板,然后通过set_calib_data_observ_points设置到模型中。现在推荐用find_calib_object,更精确。
3.2.4.1 Recommendations for Acquiring Calibration Images 相机标定选择图像的建议
参考帮助文档中《Calibration》章节。
- 标定板表面必须清洁
- 六边形标定板至少需覆盖视野1/3,矩形标定板至少需覆盖视野1/4,当前实际占了最短边的1/2左右。
- 六边形标定板需要至少一个特征标记在视野内,如果至少有2个特征标记可见,则可检查标定板是否镜像。矩形标定板必须全部位与视野内。
- 标定板mark点直径,至少为20个像素。
- 标定板亮暗像素灰度差值至少100。
- 标定板亮部分像素灰度值要大于100.
- 标定板不能过曝,所有像素值应该小于255。
- 对于矩形标定板,背景比标定板还黑的话,需要进行照明。
- 标定板图像必须有较少的噪声,必须清晰对焦。
- 标定板必须放到视野的每一处;标定板必须绕x轴和y轴进行旋转,来保证perspective distortions清晰可见;
- 必须tilted倾斜标定板,才能计算正确的焦距(推荐倾斜30-45°朝不同方向倾斜,如果景深有限,请尽可能陡峭的倾斜)。
- 六边形标定板至少需要6张图,矩形标定板至少需要10-15张图。
3.2.5 Restricting the Calibration to Specific Parameters 标定参数设置
如果已知标定板内参数据,可以通过接口set_calib_data设置进去。
3.2.6 Performing the Calibration 执行相机标定
执行标定过程,使用接口calibrate_cameras (CalibDataID, Errors)。误差高达0.1像素表示校准成功(?)。
3.2.7.1 Determining the External Camera Parameters 计算相机外参
有下面三种方式来获取外参数据:
a. 从标定相机时某一张图片中获取,通过接口get_calib_data来获得;
b. 将内部摄像头参数的确定与外部摄像头的确定分开通过使用附加图像(其中校准板直接放置在测量装置上)获得的参数,应用find_calib_object提取校准标记和姿势。
c. 自行确认3D世界点与图像点之间的关系,然后调用vector_to_pose接口。