在计算机视觉中,经常会用到重投影误差(Reprojection error)。比如在计算平面单应矩阵和投影矩阵的时候,往往会使用重投影误差来构造代价函数,然后最小化这个代价函数,以优化单应矩阵或者投影矩阵。之所以使用重投影误差,是因为它不光考虑了单应矩阵的计算误差,也考虑了图像点的测量误差,所以其精度会更高。
最小化重投影误差问题(Bundle Adjustment问题)---可以将位姿和三维特征点P同时优化
在SLAM中优化求解相机运动位姿时(3D-2D),会用到重投影误差:是像素坐标(观测到的投影位置)与3D点按照当前估计的位姿进行投影得到的位置相比较得到的误差。
如下图所示,我们通过特征匹配知道,观测值和 是同一个空间点的投影,的投影与观测值之间有一定的距离,也就是重投影误差。于是我们调整相机的位姿,使这个距离变小,由于这个调整需要考虑很多个点,所以最后每个点的误差通常不会精确到0。
补充:
以平面单应矩阵的计算为例,假设两幅图像中的对应点满足:
其中,H是平面单应矩阵,x和x’是图像中的对应点,则重投影误差的形式如下:
subject to:
其中,x^是x的估计值,H^是H的估计。最小化重投影误差就是优化H^和x^。从重投影误差公式可以看出,模型认为测量点并非绝对精确,而是存在一定的测量误差,因此需要重新估计图像点的坐标,而估计得到的新的图像点之间完美的满足单应关系。下图就是重投影误差的几何表述,d和d’的和即为重投影误差:
上面都是在假设图像点有测量误差的情况下讨论的,如果x和x’都是图像上的点,那么确实是满足上面的模型的。但是有一种特殊情形,那就是摄像机定位时通常都会遇见的,x不是图像点,而是平面标志点在世界坐标系下的坐标,只有x’是图像点。在这种情况下,由于标志点(例如:棋盘图上的角点)通常都是很标准的,都是严格按尺寸制定的,所以我们可以认为x是绝对准确的,那么此时只有x’存在测量误差。如下图:
此时,x的估计x^就是它本身,即x=x^,所以有:
那么重投影误差在强约束条件x=x^下就退化为:
上式即为单边变换误差(Transfer error)。
也就是说,如果给重投影误差加上约束条件x=x^,重投影误差就退化为单边变换误差,并且极大地简化了优化算法。同时,从上面的推导也可以得出结论:在使用已知标志点给摄像机定位时,重投影误差并非最好的选择,因为重投影误差模型会认为标志点存在误差,从而重新估计标志点的坐标,引入多余的误差;而此时,事实上,重投影误差已经退化为单边几何变换误差,所以在这种情况下,单边几何变换误差才是最好的代价函数。