好的,在进行了 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/