核面几何
转自这里
基础概念
当我们使用针孔摄像机拍摄图像时,我们会丢失重要信息,图像的深度。或者图像每个点离摄像机有多远,因为这是一个3D到2D的转换。所以我们是否能找到深度信息就变得很重要。回答是使用多个摄像机。我们的眼睛也是类似的方法,我们使用两个摄像机(双眼),这被叫做立体影像。所以我们看看OpenCV提供了什么。在更进一步之前,我们先明白一些多视几何的基础概念。在本节里,我们会用核面几何处理。看下面的图像显示了两个摄像机对同一个场景拍摄图像的基本设置。
如果我们只用左边的摄像机,我们没法找到点x的对应3D点。因为线OX上的每一个点在图像平面都投影到同一个点。但是如果加上右边的摄像机,现在OX线上的不同点在右边的平面投影到了不同的点(x’)。所以用两个图像,我们可以三角测量正确的3D点。这就是所有想法。
在右边平面上不同点投影出来的直线(l’)。我们叫做点x对应的极线。它表示,要找到右边图像里的点x,沿着这根直线找就行。它应该在这条线上的某出(这么想,要找到在另一张图上的对应点,你不需要搜索整张图片,只需要在这根直线上找就行。所以它提供了更好的性能和准确性)。这被叫做极限约束。类似的所有的点都会在另一张图上有对应的极线。平面XOO’背景叫做偏斜面。
O和O’是摄像机中心,从上面可以看到右边摄像机的O’的投影可以在左边图片看到,e点。这被叫做极点。极点是通过两个摄像机中心的直线与图片平面的焦点。类似的,e’是左边摄像机的极点。在某些情况下,你没法在图像内定位极点,他们可能在图像外(这表示摄像机没法看见彼此)。
所有的极线都通过极点。所以要找到极点的位置,我们可以找多条极线,然后找他们的交点。我们要找到极线和极点,需要两个东西,基础矩阵(F)和本质矩阵(E)。本质矩阵包含平移和旋转的信息,描述了第二个摄像机相对于第一个在全局坐标系里的位置。看下图:
基础矩阵包含了和本质矩阵一样的信息,另外还有两个摄像机内联信息,这样我们可以把两个摄像机在像素坐标系内关联起来。(如果我们使用修正过的图像并按焦距把点分开正规化了,F=E)。简单的说,基础矩阵F把一个图像里的点映射到另一个图里的线(极线)。这是通过两个图像里的匹配点计算的。最少需要8个点来得到基础矩阵(使用8点算法),最好能有多个点来使用RANSAC来得到更健壮得到结果。