我正在尝试计算Homography矩阵H
给定一组对应关系和基本矩阵F
。
根据Epipolar几何原理,我知道这可以通过epiline的交叉积和来自Epipole Geometry的F
[e_ij] x F_ij = H_ij
我正在使用OpenCV
使用F
从两个视图之间的匹配集中查找基本矩阵cv::findFundamentalMat()
。
我的问题是如何找到e_ij
以及如何使用它来计算H
。在OpenCV
中,有一个函数cv::computeCorrespondEpilines()
可以找到与每个给定点相对应的epilines。
值得一提的是,我对直接从匹配集计算H
感兴趣,但仅对计算的基本矩阵感兴趣。
由于
答案 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
返回的单应性来近似注册两个图像,但一般情况下,使用上述方法获得的单应性不会是这种情况。