相信大家在DIY机器人的时候,都想让自己的机器人像人一样能够识别周围的环境进行自主运动,今天推出的系列blog将带大家一起学习和了解机器3D视觉,向大家介绍3D视觉相关原理,并以Dragoboard410c
开发板为平台进行简单的3D视觉实验,这里我们将涉及到3D视觉中的摄像机标定、姿势估计、对极集合和3D图像中的深度地图等内容。
这篇blog主要向大家介绍摄像机标定涉及到的一些基础概念和原理,这是我们进行3D视觉处理的基础,在Dragonboard 410c上我们可以方便的用USB摄像头进行图像采集,但是通常我们买的USB摄像头采集到的图像会带有一定的畸变,这些畸变将给后续我们进行3D视觉处理计算带来误差,为了消除这些误差,我们在进行3D视觉建模的过程中需要对我们使用的摄像机进行标定,获取相机内外参数,然后再根据内外参数对计算进行纠正。
摄像机采集到的图像发生的畸变通常分为径向畸变和切向畸变两种,如下图2所示,我们用摄像头对棋盘进行拍摄获取图像,用红色直线将棋盘的两个边标注出来的时候,可以发现棋盘的边界与红线并不重合,这就是畸变带来的成像影响,如果不进行处理,后续进行3D视觉计算,其将影响计算结果。
通常径向畸变我们可以通过下面的方程组来进行纠正:
同样,采用相似原理,我们通过下面的方程组来进行校正:
根据上述分析,如果我们在使用摄像头进行采集的时候,要对采集的图像进行畸形校正,就必须找到五个造成畸变的系数如下:
同时,校正的过程中我们并不是为了校正图像,更重要的是我们需要找到摄像机的内外参数,这些参数是我们后面进行3D计算的关键参数,觉得了3D计算的精度,包括摄像机的焦距(fx,fy),光学中心(cx,cy)等,在计算中我们用矩阵进行表示,通常称为相机矩阵,这些参数是相机的固有参数,一般情况下,如果不去调整硬件,是不会变化的,因此在进行3D视觉计算的过程中,我们这些参数在计算机标定的时候计算出来即可,其矩阵表示如下:
以上就是整个摄像机标定的基本原理和相关概念,在机器3D视觉计算中,先要通过标定确定这些参数,通常的做法是通过一些包含了非常明显的图案样本(棋盘),然后找到图像中的比较特殊的拐点,然后得到这些特殊点在图片中的位置和实际位置,通过真实位置和实际位置就可以采用上述数学方法来计算求解方程组中的相关参数,即我们在3D计算中所需要的畸变系数。
以上就是整个摄像机标定的基本原理和概念,这里只是简单的介绍了单个摄像头的标定,如果大家想要更精确的视觉3D建模或者想详细了解摄像机标定的原理,可以参考
http://blog.csdn.net/pinbodexiaozhu/article/details/43373247,下期blog将在此基础上介绍如何用CV库中的函数来实现摄像机图像的标定编程。