2014-04-01 67 views
2

我试图计算给定一组对应关系和基本矩阵F的Homography矩阵H从基础矩阵中找到Homography矩阵

从极几何原理我知道这可以通过epiline的交叉产品和FEpipole Geometry

[e_ij] x F_ij = H_ij

Epipolar image

做我使用OpenCV从寻找基本矩阵F使用cv::findFundamentalMat()设置两个视图之间的匹配。

我的问题是,我如何找到e_ij以及如何使用它来计算H。在OpenCV中有一个函数cv::computeCorrespondEpilines(),它可以找到对每个给定点的核心反应。

值得一提的是,我并不是对计算H直接从匹配集计算,而是仅从计算基本矩阵计算。

感谢

+0

其实这是一个数学问题; –

+0

理论上,基本矩阵应该是2级,它的内核(左右两边)就是对极。所以如果你的公式为'H'是正确的,那么问题归结为找到'F'的内核。 当然,由于矩阵可能是根据一些真实世界的测量值计算出来的,因此秩将始终为3,所以您应该使用类似于** SVD **分解的方法来查找与最小特征值对应的特征向量(最接近零),你很好走。 –

+0

你的epiline符号令人困惑,因为'e'通常表示epipole。你应该使用'l'作为epiline。 – AldurDisciple

回答

0

首先,请您从链接中提到的公式(C29)采用的是直线l具有相同的坐标为e IJ,这是在图像J核点。因此,L = E IJ不是epiline,因为点(E IJ,电子 IJ)==规范(E IJ)2 == 1!= 0

如果我坚持到链接中给出的符号,可以计算作为F ij的左空向量的对极e ij。您可以通过F_ij的转置调用cv::SVD::solveZ来获得它。然后,在您的链接,所述单对应性ħ IJ(其从图像映射点i到影像j)可以被计算以H IJ = [E IJ] X˚F IJ,其中如所提到符号[e ij] x涉及3x3斜对称运算符。该符号的定义可以在Wikipedia article on cross-product中找到。

然而,要知道,这样的单应性ħ IJ通过使用具有相同坐标的线为e IJ从图像J背投影平面限定从图像i到影像j的映射。一般来说,这会给出与cv::findHomography返回的结果非常不同的结果,其中得到的单应性是通过观察场景中的主平面从图像i到图像j的映射。因此,您将能够使用cv::findHomography返回的单应性态近似登记这两个图像,但通常情况下,使用上述方法获得的单应性情况并非如此。

+0

感谢您的回复。这个符号现在对我来说很清楚。问题是这种方法对于发现'H'是否合理?使用'F'而不是直接计算'H'的原因是我想在一定程度上放松非平面性。我知道可以从'F'中检索'H',但到目前为止我找不到实现。 –

+0

@HamidBazargani不幸的是,当从一幅图像映射到另一幅图像时(除非它们是从同一个光学中心获取的),您不能放松对单应性的非平面性。你可以为任何你喜欢的飞机推导单应性,但总是有一个,即使不容易看到哪一个。如果你想更准确地注册两幅图像,你应该看看光流和/或密集的立体匹配技术。 – AldurDisciple