我使用两个投影矩阵 P1 和 P2(例如,我使用恐龙数据集),我需要计算基本矩阵 F。所以我使用两个 Matlab 函数:
- 彼得·科维西的功能:www.csse.uwa.edu.au/~pk/Research/MatlabFns/Projective/fundfromcameras.m
- 齐瑟曼:www.robots.ox.ac.uk/~vgg/hzbook/code/vgg_multiview/vgg_F_from_P.m
这些函数应该做同样的事情,但我有不同的 F 值!怎么可能?哪些功能是正确的?
如果两个点 X1 和 X2 在两个不同的图像中"相同",则 X2^TFX1 = 0 ...所以我使用 SURF 从两个旋转图像(5 度)中找到了两个对应的点,但 X2^TFX1 在这两个函数中永远不会等于零。有什么想法吗?
相反,如果我使用这个从匹配点计算 F 的函数:
- ransac fit Basic Matrix by Peter Kovesi: ransacfitfundmatrix.m
我有那个 X2^TFX1 = 0 ....显然,F 与我使用其他两个函数的两个 F 不同......
首先,这些点很可能不是彼此的完美旋转版本。 SURF使用了很多近似,双线性插值和一大堆打破真正旋转不变性的东西。 所以可能不存在这样的基本矩阵(如果两组点之间没有线性关系)。 是的,即使在您进行点匹配之后也是如此。
也就是说,如果匹配真的很好,你的X2^T*F*X1
可能应该很小,但如果它对于任何真实图像来说正好为零,我会感到惊讶。
基本矩阵仅在一定范围内是唯一的。
因此,即使您有不同的基本矩阵,它们对于您的图像也是正确的。