虽然最近注意力已经不可遏制地被神经科学、大脑记忆机制和各种毕业活动吸引过去了,但是还是觉得有必要把这段时间双目视觉方面的进展总结一下
毕竟从上一篇博文发表之后,很多同仁发 E-m ail 来与我讨论,很多原来的疑团,也在讨论和一步步的试验中逐渐解决了
开篇之前,首先要感谢 maxwellsdemon和 wobject,没有和你们的讨论,也就没有此篇的成文
说到双摄像头测距,首先要复习一下测距原理,把 Learning OpenCV翻到 416和 418页,可以看到下面两幅图 图 1
双摄像头模型俯视图 图2 , 双摄像头模型立体视图 图1 解释了双摄像头测距的原理,书中Z的公式如下: 在OpenCV中,f的量纲是像素点,Tx的量纲由定标棋盘格的实际尺寸和用户输入值确定,一般总是设成毫米,当然为了精度提高也可以设置为0
1毫米量级,d=xl-xr的量纲也是像素点
因此分子分母约去,z的量纲与 Tx相同 图2 解释了双摄像头获取空间中某点三维坐标的原理
可以看到,实际的坐标计算利用的都是相似三角形的原理,其表达式就如同 Q矩阵所示
空间中某点的三维坐标就是(X/W, Y/W, Z/W)
因此,为了精确地求得某个点在三维空间里的距离,我们需要获得的参数有焦距f、视差 d、摄像头中心距Tx
如果还需要获得X坐标和 Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移 cx和 cy
其中f, Tx, cx和 cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx, cy和 f相同(也就是实现图 2中左右视图完全平行对准的理想形式)
而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)
从而最终完成求一个点三维坐标所需要的准备工作
在清楚了上述原理之后