从基本矩阵中找出Homography矩阵

时间:2014-04-01 08:07:56

标签: opencv geometry computer-vision homography

我正在尝试计算Homography矩阵H给定一组对应关系和基本矩阵F

根据Epipolar几何原理,我知道这可以通过epiline的交叉积和来自Epipole GeometryF

来完成

[e_ij] x F_ij = H_ij

Epipolar image

我正在使用OpenCV使用F从两个视图之间的匹配集中查找基本矩阵cv::findFundamentalMat()

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

值得一提的是,我对直接从匹配集计算H感兴趣,但仅对计算的基本矩阵感兴趣。

由于

1 个答案:

答案 0 :(得分:0)

首先,请注意您从链接中提到的等式(C29)使用与e ij 具有相同坐标的线l,这是图像j中的epipole。因此,l = e ij 不是epiline,因为dot(e ij ,e ij )== norm(e ij )²== 1!= 0。

如果我坚持你的链接中给出的符号,你可以计算epipole e ij 作为F ij 的左空矢量。您可以通过cv::SVD::solveZ的转置调用F_ij来获取它。然后,如你的链接中所提到的,单应性H ij (将点从图像i映射到图像j)可以被计算为H ij = [e ij ] x F ij ,其中符号[e ij ] x 指的是3x3偏斜对称算子。可以在Wikipedia article on cross-product

中找到此表示法的定义

然而,请注意,这样的单应性H ij 使用与e ij具有相同坐标的线,通过从图像j反投影的平面定义从图像i到图像j的映射。通常,这将给出与cv::findHomography返回的结果非常不同的结果,其中得到的单应性是通过观察场景中的主导平面从图像i到图像j的映射。因此,您将能够使用cv::findHomography返回的单应性来近似注册两个图像,但一般情况下,使用上述方法获得的单应性不会是这种情况。