3

好的,在进行了 4 天的无脑编程之后,我将我的生活难题发布到 stackoverflow,当时似乎没有任何事情可以让事情正确或至少接近正确。抱歉有点戏剧化,但我今天觉得自己像个糟糕的程序员。

无论如何,我的问题是:

使用 RANSAC (N>8) 获得基本矩阵。

我有两个具有宽基线但有足够重叠的图像,以便正确匹配足够数量的 SURF 关键点(~308)(我绘制它们)。

现在是问题所在。我将 2D 点传递给 cv::findFindamentalMat 但我得到完全没有根据的结果。函数返回:

     FundMat=[2.05148e-13    3.72341 -2.03671e+10
              1.6701e+26    -4.17712  4.59533e+29
              3.32414e+18    2.8843   1.91069e-26]

为了规避矩阵的大动态范围,Hartley 建议对数据点进行归一化(在欧几里得空间而不是投影空间归一化)......即使这样做,结果也几乎相同。(10^-9 到 10^9)

我知道 FundMat 仅在规模上是准确的,但 10^-9 到 10^+9 的差异太大了。

我在这里提到了其他问题,但我似乎没有得到任何线索:findfundamentalmatrix-doesnt-find-fundamental-matrix how-to-calculate-the-fundamental-matrix-for-stereo-vision

任何想法都会很棒。在为软件管道的其余部分考虑未校准的图像时,这是一个非常重要的步骤。

如果代码有帮助。(虽然它没有缩进和着色......这里的空间太少了。) https://sites.google.com/site/3drecon124/

4

1 回答 1

0

它解决了......愚蠢的人为错误。数据类型从 double 转换为 float,导致从内存中不正确的位置获取数据。现在它的平滑和对极约束得到了满足。

于 2012-01-17T15:36:19.617 回答