这段时间在做双目相机的标定,从MATLAB帮助文档中找到了有关双目相机的标定方法,花了一点时间翻译了一下,希望需要的人能借鉴一下!
像很多博文一样,首先要列出原文:
http://www.vision.caltech.edu/bouguetj/calib_doc/index.html#examples
文档中举了几个例子,有关双目的是第5个,看仔细哦!
一下就是正文了!
这个例子展示了如何使用工具箱用于校准一个立体系统(内在和外在)和使用立体标定的结果为立体图像校正和3 d立体三角测量。
下载stereo_example.zip立体数据集,包含14对对应的左右图像。图片命名left01.jpg,…,left14.jpg和right01.jpg…,right14.jpg。这个包包含分别的两个校准结果文件Calib_Results_left和Calib_Results_right(使用第一个例子描述的标准程序校准后产生两个摄像头的校准结果)
在命令行窗口输入stereo_gui运行立体标定工具箱。如下图:
(把Calib_Results_left.mat和Calib_Results_right.mat两个文件放到你现在运行的文件夹下)
点击第一个按钮
命令行窗口提示如下:
输入你的两个校正结果的名字。
(最好之前先把你的两个文件改为这个默认的名字,这样此处可以直接按回车,两个文件都加载进来后,会显示两个文件的参数,如下图)
初始的内参数的值除了显示外参数的估计om和T,还描述左右相机的相对位置。内参数fc_left, cc_left, alpha_c_left, kc_left, fc_right, cc_right, alpha_c_right 和kc_right和传统的fc, cc, alpha_c and kc是等价的。在三维空间中一个点P的两个姿态参数om和T定义:它的两个在左、右参考坐标系的坐标向量XL和XR分别和彼此有关,尽管严格的运动转换: XR = R * XL + T R是3 x3的对应的旋转矢量om旋转矩阵。
单击按钮 Run stereo calibration运行全局立体优化程序
此处如果警告消息"Disabling view kk - Reason: the left and right images are found inconsistent" is encountered时,这可能意味着第kk对图像,左边和右边图像在空间中不同的位置被捕获。这意味着这两个视图是不一致的,因此不能用于立体校准。
捕获你的图像时,确保你没有在捕获左右图像时移动校正模式。空间中的模式可以(也应该)只在两组(左、右)图像间移动。
不一致的另一个原因是,你选择一组在模式上不同的点运行独立的校准(导致两个文件Calib_Results_lef)。确保在两个独立的校准中选择了相同的点。换句话说,点需要一致。
点击Save stereo calib results,保存立体标定的结果,如下:
<align="left"> 点击Show Extrinsics of the stereo rig,以一种3D图的形式显示两个摄像头的空间配置和校准平面
最后,点击Rectify the calibration images通过校正来校准立体图像。所有图像left_rectified01.bmp, right_rectified01.bmp,...,left_rectified14.bmp,right_rectified14.bmp都被校准(外极线与水平扫描线匹配)。除生成这些校正图片之外,脚本还保存新设置的校准参数到Calib_Results_stereo_rectified.mat。
因为提供了原始的图像,这两个初始的独立的校准可以得到Calib_Results_left.mat和Calib_Results_right.mat。通过角点提取的过程,需要牢记的是,对于每对图像,必须选择相同的一组左、右图像的点,即相同的网格点和相同的原点(为了保证相同的模式参考系)。因此,确保相同的起源点(第一次点击)一直被选中是至关重要的。一个简单的方法是总选择网格的左上角为原点(这样做是为了生成两个提供的校准文件)。在您自己的立体标定中,可以使用不同的策略,如标志的起源点在网格模式本身。
有点草草结尾了,实在是没有时间和心情了,请各位自行处理吧!再见!