在我的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,但我不知道如何做单应矩阵->基本矩阵。
如果我要执行的操作没有意义,请告诉我原因。
谢谢
答案 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
同一相机中心。