前阵子做项目需要,需求:测量二维平面物体的尺寸,比如矩形纸张的长、宽、孔位的测量等,于是做一些记录,同时也是复习一下opencv和halcon
首先说原理和思路,如下:
①获取相机内参 ②确定世界坐标系,一般就是平面物体测量时候所在的平面,原点最好在中间 ③标定②中确定的世界坐标系的外参 ④确定需要测量的像素坐标,如点、线等 ⑤将像素坐标转到世界坐标系 ⑥计算尺寸
其中需要注意的一些点:1、标定板的厚度需要考虑在内,因此计算内参时候需要给初始值(随便指定,最好接近实际值),而且规定世界坐标系的时候z值需要增加一个厚度 2、由于被测物体多多少少都有一些厚度,比如0.2mm、0.5mm等,因此在利用标定板进行标定时,标定板最好直接放在待测物体上进行标定 3、标定板最好够大,可以覆盖相机的全视场,这样最好的精度会高一些,而且均匀一些。如果最后的测量结果不均匀,很可能的原因时你的相机视场内平面不均匀。
所以,硬件很重要,一个是标定板,一个是待测台。标定板一定要精度高一些,待测台一定要够平,比如这种的
关于平面尺寸测量,halcon的例程中提供了两个:
1)camera_calibration_multi_image.hdev多幅图像标定,然后计算尺寸
如下图,7张标定图片,采用的是圆形标定图案,中间有些圆的圆心处有黑点,用来定位;整个标定板充满相机视场;用第一张标定外参。
计算结果如下图,精度还是蛮高的。不过我不建议用绝对误差来衡量,个人倾向于用百分比或者千分比来衡量
2)camera_calibration_single_image.hdev单幅图像标定,然后计算尺寸
如下图,就一张标定图片(其实就是上面7张中的第一张,放在待测物体上)
标定之前,halcon做了两个事情:1、对相机内参做了最大程度的接近初始化 2、对由标定板厚度引起的误差做了最大的提前预估。剩下的就一样了。
精度也不孬