老板新安排的任务,需要在FPGA上实现双目算法,所以最近开始学习这块,双目算法主要分成3个部分:定标、校正、匹配。其实定标是最基础的部分,为后面的程序提供初始数据,这一块的数据主要参考了图像获取与单目定标和摄像机标定和立体标定,本文主要是我在双目定标的步骤以及我对此的理解。
一、固定摄像头
摄像头这块我使用的是两个罗技的普通USB摄像头,一般只要在opencv中使用cvCreateCameraCapture()函数能捕捉到图像就好。然后将两个摄像头平行固定好,我的摄像头最后如下所示:
二、使用摄像头捕捉不同方位下标定板图像
固定好摄像头之后,开始获取图像,这时候需要使用标定板(我的A4标定板),作用是为了接下来使用Matlab标定工具箱(点击打开链接)进行标定。获取图像的时候一定要注意需要两个摄像头同步获取,这样标定出来的结果才会是正确的。这个算法的思想可以参考:同时获取图像
三、使用matlab标定工具箱测数据
经过上一个步骤,我们会获得标定板在左右两个摄像头的很多不同位姿下的图像,把这些图像放到matlab工具箱文件夹下进行处理。处理方法可以参照:使用matlab工具箱进行标定。需要注意的是在提取第一幅图的时候命令行窗口可能会提示你输入方格大小,这个一定要根据你的标定纸上的大小来写,如果这个错误的话,标定出来的数据是有问题的,我使用的标定纸方格大小是15mm。其他按照步骤来做就好了,立体标定后,最好查看一下Show Extrinsics of stereo rig,看看是否两个摄像头是平行的,最后得到下列结果:
上面得到的就是摄像头的参数信息,然后将这些数据进行打包成xml格式,方便在校正的时候使用。校正会用到的数据包括如下:内参数据(焦距和原点坐标)、畸变、旋转矩阵om和平移向量T。
例如:摄像头内参信息格式如下(左):
<?xml version="1.0"?> <opencv_storage> <Cam_M2 type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data> 357.49543 0. 182.35795 0. 365.72798 193.12148 0. 0. 1.</data></Cam_M2> </opencv_storage>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yake827/article/details/46661729