繁体   English   中英

从单应矩阵计算基本矩阵

[英]Compute Essential matrix from Homography matrix

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

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

还有其他帖子与我的问题有些相关: 如何从单应性计算旋转和平移矩阵? , 如何从单应性计算旋转和平移矩阵? , Find Homography atrix from Fundamental matrix ,但我不知道如何做 Homography matrix -> Essential matrix。

如果我尝试做的事情没有意义,请告诉我原因。

谢谢

我认为您不需要 Essential 矩阵:“除了有关两个相机的内在特性的信息之外,Fundamental Matrix 还包含与 Essential Matrix 相同的信息,以便我们可以在像素坐标中关联两个相机。”

本教程可以帮助您了解如何从单应性计算对极线。 首先,您需要找到几个点来馈送 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)

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

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

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

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

要在数学上看到这一点,请考虑图像的投影矩阵 P 的一维零空间在齐次坐标中给出相机中心 C

C=null(P)

P*C = 0

现在对于扭曲的图像,你仍然有

H*P*C = H*0 = 0

同一个相机中心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM