从单应矩阵计算基本矩阵

时间:2019-06-24 08:20:37

标签: python opencv homography

在我的Python / OpenCV代码中,我使用随机单应性来模拟视点变化(我正在评估兴趣点检测器,并希望避免搜索图像对)。

是否可以计算一张图像及其变形版本之间的对极线和基本矩阵?我拥有的唯一信息是我应用的单应性。

还有一些与我的问题有关的帖子:How to calculate Rotation and Translation matrices from homography?How to calculate Rotation and Translation matrices from homography?Find Homography atrix from Fundamental matrix,但我不知道如何做单应矩阵->基本矩阵。

如果我要执行的操作没有意义,请告诉我原因。

谢谢

2 个答案:

答案 0 :(得分:1)

我认为您不需要基本矩阵:“基本矩阵除了包含有关两个摄像头的内在信息之外,还包含与基本矩阵相同的信息,以便我们可以将两个摄像头的像素坐标关联起来。”

This tutorial可以帮助您了解如何根据单应性计算对极线。首先,您需要找到一些要点来填充cv.findFundamentalMat。可以从单应性矩阵计算这些点-只需取八个或更多随机点(pts1)并将单应性矩阵应用于它们(pts2)。

F, mask = cv.findFundamentalMat(pts1, pts2, cv.FM_LMEDS)

最后,您可以从相应图像中找到Epilines参数:

epilines1 = cv.computeCorrespondEpilines(pts2.reshape(-1,1,2), 2, F)
epilines2 = cv.computeCorrespondEpilines(pts1.reshape(-1,1,2), 1, F)

答案 1 :(得分:0)

您以这种方式只能为立体声生成图像对的假设是有缺陷的。

您需要两张具有不同投影中心的图像(即相机必须移动)。

应用于现有图像的2D单应性不会改变投影中心。您可以模拟围绕相机中心的3D旋转,而不是平移。

直觉上,要定义对极几何,您需要一个基线。基线穿过两个相机中心。如果您有两张具有相同相机中心的图像,则未定义基线。您不会从此类图像中获得视差或深度信息。在您的设置中没有定义基本矩阵或基本矩阵。

要在数学上进行观察,请考虑图像投影矩阵P的一维零空间使摄像机中心C处于均匀坐标

C=null(P)

使用

P*C = 0

现在,对于变形的图像,您仍然可以

H*P*C = H*0 = 0

同一相机中心。