在三维重建中,如果我们有2个以上视角,那么三条线很可能是不交于一点的。原因是我们选择的旋转矩阵有精度表达问题,位姿估计也存在误差。使用奇异值分解的方法是求得到三条线距离最小的点,还有一种合适的估计,是使得该点在三个相机上的重复投影误差最小。同时,R,T,P(X,Y,Z)进行估计,最终保证Reprojection err 最小的方法————the state of the art BUNDLE ADJUST.先回到最原始的问题,如何求解非线性最小二乘法。由线性最小二乘法,我们可以得到非线性最小二乘法矩阵表达形式。如果要求得其局部最小值,则对 x 求导后,导数应为 0。然而,这个东西并不好解,我们考虑使用梯度下降迭代的方式。这里使用的是单纯的梯度。这里有个非常不好理解的地方,其假设detaX非常小,故表示成上述形式,以保证 f(x + deta_X)<f(x) , 只要依次迭代 x 就能保证每次都向着f(x)减小的方向移动。实际上,这个解应该由HESSIAN矩阵给出。以信标定位为例。讲道理,两个信标为圆心画圆应该给出位置的两个解析解。但是如果有很多信标,那么信标就会画出一块区域........这是SLAM里的经典问题了,后面会有博客专门讲BUNDLE ADJUST. (四) 极几何是机器人视觉分支——双目视觉中,最为重要的概念。与结构光视觉不同,双目视觉是“主动测量”方法。
本征矩阵携带了相机相对位置信息。其推导如下:在相机2的坐标系中,场景点坐标:X2 = RX1+ t相机1光心坐标:t极线在空间中的映射 :X2 - t = RX1此时,三个向量在同一个平面上,则有:X2 T tx RX1 = 0其中,tx 代表 t 的叉乘矩阵。tx R 称为本征矩阵E. 两幅图片一旦拍摄完成R与T都是确定的。空间中任何一组对应点都必须满足本征矩阵!
1.2、基本矩阵
空间中的点满足E矩阵,则该点坐标Zoom后,仍然必须满足E矩阵。坐标的Zoom显然和相机内部矩阵有关。在相机坐标系下:x1 = KX1; x2 = KX2其中,x1 ,x2 是齐次像素坐标。那么,X1 = K-1x1 ;X2 = K-1x2带入本征矩阵可得:x2 T K-Ttx RK-1 x1 = 0 ======> K-TEK-1 = 0 =========> x2 T F x1 = 0 F = K-TEK-1 称为基本矩阵。基本矩阵所接受的是齐次像素坐标。基本矩阵的秩是2,因为它有0空间。同时,其自由度是8,因为它接受的是齐次坐标。每组图像点可以提供1个方程,所以由8组点就可以线性解出F矩阵。当然,解法是化成Ax = 0,然后使用奇异值分解取v的最后一列。然后2次奇异值分解去掉最小奇异值正则化。
1.3、极点与极线
从基本矩阵可知:x2 T F x1 = 0 显然这里有熟悉的身影,由点线对偶可知,x2 在直线 F x1 上。该直线是极线在图像2上的方程。x1 在直线 x2 T F 。该直线是极线在图像1上的方程。极点是多条极线的交点(最少两条)
之前已经在拟合一篇中,已经补完了非线性最小二乘拟合问题。Bundle Adjustment,中文是光束平差法,就是利用非线性最小二乘法来求取相机位姿,三维点坐标。在仅给定相机内部矩阵的条件下,对四周物体进行高精度重建。Bundle Adjustment的优化目标依旧是最小重复投影误差。 与利用non-linear mean square 解三角同,bundle adjustment 中所有的参数,RCX均为变量。N幅图则有N个位姿,X个点,我们会得到非常大的jacobbian Matrix.本质上,需要使用雅克比矩阵进行梯度下降搜索。详细见之前介绍过的“拟合”篇。
2、雅克比矩阵
雅克比矩阵的行代表信息,列代表约束。每一行是一个点在该位姿下的误差,每一列代表f对x分量的偏导数。q x c 均为变量,q是旋转四元素,x 是三维点空间坐标,c 是相机光心在世界坐标系下的坐标。J 可以分为三部分,前4列代表对旋转求导,中间三列代表对c求导,最后三列代表对x求导。其中,对旋转求导又可以分解为对旋转矩阵求导X旋转矩阵对四元素q求导。一旦获得J的表达式,我们就可以使用Newton-Gaussian 迭代对x寻优了。求导后的数学表达式如下:如果有两个相机,则总的雅克比矩阵如下:通过同时迭代所有的q C X ,最终可以同时得到世界点坐标,相机位姿 ——SLAM!