利用Halcon进行双目标定

项目中需要为双目摄像机建立算法,生成目标物体的三维点云模型,用到了Halcon算法包。不过在使用过程中,不能直接套用Halcon自带的例程,需要注意某些参数的设置。

在相机的使用测量之前,需要对相机进行标定,具体标定原理网上有许多人讲了,这里不再重复赘述,可参考:https://blog.csdn.net/honyniu/article/details/51004397,双目相机标定原理可参考https://zhuanlan.zhihu.com/p/63618986

相机标定的目的就是通过拍摄标准标定板,来分别确定两个相机的内参矩阵K,和双目相机之间的位置关系矩阵R,T。

Halcon自带的双目相机标定程序在binocular_calibration.hdev

1.首先需要拍摄标定板,调整好双目相机的焦距,光圈等参数不变,同时拍摄过程中不能改变双目相机两个摄像头之间的相对位置关系和角度。

2.将双目相机固定到一个稳定的架子上,建议是将相机以一定高度固定并向下拍摄,以此来拍摄Halcon标定板(圆形对称式标定板,如下图这种,对背景要求不高,程序可识别标定板外围的黑色轮廓和角上的定位符),这样容易改变标定板姿态。

3.改变标定板姿态,同时记录左右相机拍摄的照片,至少15组。

4.利用binocular_calibration.hdev读取拍摄的图像,左右相机图像要对应起来

首先选取CaltabFile,根据你的表定板尺寸大小选择相应的文件,普遍有10mm,30mm,100mm,200mm,650mm等,可在安装目录的MVTec\HALCON-17.12-Progress\calib文件夹里找到合适的文件。比如:

 

其次在函数gen_cam_par_area_scan_division( Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight ,CameraParam)中需要输入相机的参数,如焦距Focus,径向畸变系数Kappa,像元尺寸Sx和Sy,像主点坐标Cx,Cy以及图想尺寸Width和Height。如:

随后需要注意的是find_caltab函数中MarkThresh的设定,这个是识别阈值的设定,如果你照片效果不好,或者背景光干扰比较大,有时会识别不出来,这时需要调整这个阈值来尽量准确识别标定板上的圆形标记,此外还可以调整MinDiamMarks的值,用于去除干扰(最好拍摄的时候背景纯粹一些)。剩下的其他参数用例程中预设的就可以了。如果参数调整好之后就能准确地识别出标定板了,具体效果如下

 

当计算完成之后,变量窗口会得到标定之后的相机内参矩阵和双目姿态关系矩阵

左右相机内参变量为CamParamL和CamParamR,双目姿态关系矩阵变量为cLPcR。

利用这三个参数就能通过视察计算出空间中每一个点的三维坐标了。

计算坐标可参考函数intersect_lines_of_sight或者Halcon例程disparity_image_to_xyz

posted @ 2020-07-08 14:01  PC土豆君  阅读(5218)  评论(1编辑  收藏  举报