我试图编写一些代码来计算基本矩阵来确定立体图像之间的关系。我从大多数人推荐的Hartley和Zisserman的书开始,但是它没有任何实用的例子,而且它的示例代码是在MATLAB中我没有的。然后,我转到三维计算机视觉技术及算法简介,这是更实用的,其中有实际的例子。我使用Python和numpy实现了推荐的8点算法,但我在验证它的有效性时遇到了困难。
我正在使用第48页列出的数据集(使用上面的链接查看Google图书摘录)。当我将这些观点规范化时,我得到的结果和那本书一样。然而,当我使用numpy的SVD函数计算基本矩阵时,我得到了F的以下值:
[[-0.01851684 -0.21631176 -0.67036356]
[ 0.2605251 -0.01023853 0.14234079]
[ 0.63748775 -0.09404508 -0.00220713]]这个矩阵满足方程p_R^ *F* p_L = 0,因此似乎是正确的。然而,它与书中计算的矩阵有很大的不同。我试着用OpenCV的cv.FindFundamentalMat()反复检查答案,我得到了第三个答案:
[[ 22.98129082 271.46453857 853.74273682]
[-334.1673584 -4.84123087 -175.99523926]
[-809.88891602 125.99833679 1. ]]我不知道其他两个矩阵是如何计算的,但我在网上找不到任何基本矩阵计算的例子来验证我的八点算法的实现。我的实现返回一个满足等式的值这一事实给了我信心,但我担心我做了一些愚蠢的事情,这就是为什么我无法与书中或OpenCV中的结果相匹配。
发布于 2011-04-07 13:29:03
请注意,基本矩阵被定义为一个常数因子(您可以很容易地通过检查极约束来验证这一点)。尝试将OpenCV矩阵与-8.0574e-04相乘,您将看到这两个矩阵在最后非常相似:-)
因此,您的结果可能很好。结果之间的细微差别可能是由于OpenCV采用了与8点算法不同(可能更健壮)的方法。
https://stackoverflow.com/questions/5533856
复制相似问题