如何在Matlab的三角函数中计算重投影误差?遗憾的是,文档没有给出数学公式

时间:2015-03-17 09:21:36

标签: matlab computer-vision triangulation matlab-cvst projective-geometry

如何在Matlab的三角函数中计算重投影误差?

可悲的是,documentation没有给出数学公式。

它只说:The vector contains the average reprojection error for each M world point.

Matlab在计算此错误时使用的程序是什么?

我搜索了SOF但在这个恕我直言的重要问题上一无所获。

更新: 他们如何使用此错误在此处过滤掉不匹配的匹配项:http://se.mathworks.com/help/vision/examples/sparse-3-d-reconstruction-from-two-views.html

4 个答案:

答案 0 :(得分:5)

AFAIK重投影错误总是以相同的方式计算(在计算机视觉领域)。

重投影(如名称所示)相机中重投影点与原点之间的误差。

因此,从相机的2个(或更多)点开始,您可以在世界系统中进行三角测量并获得3D点数。由于相机校准错误,该点不会100%准确。您所做的是将结果3D点(P)和相机校准参数再次投影到相机中,获得原点附近的新点(\hat{p})(p) 。

然后计算原始点和"重新投影的"之间的欧氏距离。之一。

enter image description here

如果您想更多地了解Matlab使用的方法,我会增强他们使用的参考书目,同时为您提供页码:

  

计算机视觉中的多视图几何,作者:Richard Hartley和   Andrew Zisserman(第312页)。剑桥大学出版社,2003年。

但基本上它是最小二乘最小化,没有几何解释。

答案 1 :(得分:1)

您可以在Camera Calibrator tutorial中找到相机校准环境中重投影错误的说明:

enter image description here

triangulate函数返回的重投影错误基本上是相同的概念。

使用重投影错误丢弃不良匹配的方法显示在example中:

[points3D, reprojErrors] = triangulate(matchedPoints1, matchedPoints2, ...
    cameraMatrix1, cameraMatrix2);

% Eliminate noisy points
validIdx = reprojErrors < 1;
points3D = points3D(validIdx, :);

此代码排除了重投影误差超过像素的所有3D点。您还可以使用validIdx来消除相应的2D匹配。

答案 2 :(得分:0)

以上提到的答案以一种简单的方式将重投影错误解释为相机中的实际重投影。从更一般的意义上讲,该误差反映了噪声图像点与从模型估算的点之间的距离。可以想象到在n维空间中某个投影到噪声点的表面(模型)的切平面(因此,它降落在平面上,而不是在模型上!)。 n不是必须的= 2,因为“点”的概念可以被概括为例如用于同形照相的两个对应点的坐标的级联。

重要的是要了解重投影错误不是最终答案。总体错误^ 2 =重新投影错误^ 2 +估计错误^ 2。后者是估计重新投影到模型上真实点之间的距离。有关更多信息,请参见Hatrtley andd Zisserman的《多视图几何》一书的第5章。他们证明,投影误差具有理论极限0.6 * sigma(用于单应性估计),其中sigma是噪声标准偏差。

答案 3 :(得分:0)

它们通过删除重投影误差较大的相关索引来过滤出不匹配项。

这意味着具有较大的重新投影误差的点是异常值。