好的我在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
任何想法都会很棒。在为软件管道的其余部分考虑未校准的图像时,这是非常重要的一步。
n代码有用。 (虽然它没有缩进和彩色,但这里的空间太少了。) https://sites.google.com/site/3drecon124/
答案 0 :(得分:0)
它解决了...愚蠢的人为错误。有一个从double到float的数据类型转换,它导致数据从内存中的不正确位置获取。现在它的平滑和极限约束达到了规模。