5

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

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

它只说: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

4 回答 4

8

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

重投影(顾名思义)是相机中重投影点与原点之间的误差。

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

然后计算原始点和“重新投影”点之间的欧几里得距离。

在此处输入图像描述

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

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

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

于 2015-03-17T09:34:58.920 回答
3

您可以在相机校准器教程中找到关于相机校准上下文中重投影误差的解释:

在此处输入图像描述

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

此示例显示了使用重投影错误丢弃错误匹配的方法:

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

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

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

于 2015-03-17T15:27:51.980 回答
3

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

重要的是要了解重投影误差不是最终答案。总体误差^2 = 重投影误差^2 + 估计误差^2。后者是重新投影的估计与模型上真实点之间的距离。有关这方面的更多信息,请参阅 Hatrtley andd Zisserman 的《Multiple View Geometry》一书的第 5 章。他们证明了重投影误差的理论极限为 0.6*sigma(用于 Homography 估计),其中 sigma 是噪声标准偏差。

于 2018-06-22T20:16:19.723 回答
0

他们通过删除具有较大重新投影错误的相关索引来过滤掉错误匹配。

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

于 2018-11-26T19:10:56.997 回答