3D重建使用OpenCV的C++实现..基本矩阵太大

3
好的,经过四天的无意义编程后,当什么都不对或至少接近正确时,我会将我的人生难题发布到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 任何想法都很好。这是考虑到未校准图像在软件流程的其余部分中非常重要的一步。
如果代码有帮助,可以查看此链接
1个回答

0

问题解决了...是个愚蠢的人为错误。在数据类型转换时,从double转化成float导致从内存中获取了错误的数据位置。现在一切都很顺利,且使用极线约束满足比例尺度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接