使用基本矩阵通过 OpenCV 计算坐标平移

Use fundamental matrix to compute coordinates translation using OpenCV

本文关键字:计算 OpenCV 坐标      更新时间:2023-10-16

我正在尝试计算两个图像之间几个点的坐标对应关系。我有一组点的对应关系是已知的,我将它们与OpenCV的findFundamentalMatrix()一起使用,以找到基本矩阵。我验证了每个点的x^T * F * x' = (0),结果总是正确的或非常接近的。

问题是,现在我想使用第一个图像(y(和基本矩阵(F(上的点坐标,以便在第二个图像(y'(上找到点的坐标。我首先想到简单地使用上面的方程,但只给定y'点的z,可以有无限的解。

我还能如何使用基本矩阵来计算翻译?

更清楚的是:知道基本矩阵"链接"两个投影,我如何使用它将任何已知点(a, b, 1)的坐标从第一个投影转换为第二个投影?

考虑到我们知道这个等式中的abF:(a', b", 1(T * F * (a, b, 1( = (0(

我做了一个简单的图作为例子:https://i.stack.imgur.com/l5yg4.jpg。这个想法是找到投影 2 中红点(xq, yq)的坐标,考虑到我们知道它在投影 1 中的坐标以及两个投影中所有其他点的坐标(以及其他一些,因为找到基本矩阵的算法实际上至少需要 8 个点(

另一个精度:在我的示例中,已知点是共面的,但研究的点不一定是共面的。

我希望这使我的问题更清晰:)

基本矩阵将点从一个图像转换为另一个图像中的线。你能详细说明一下吗

我还能如何使用基本矩阵来计算翻译?

请。通过一个例子告诉我们您想要实现的目标也会有所帮助。

编辑:如果您已经校准了相机,则可以从基本矩阵F计算基本矩阵,E。E 将一个图像中的一个点转换为另一个图像中的一个点。但是,当然,要求是具有内部矩阵。如果K是内部矩阵E=transpose(K)FK。另一种方法是在另一个图像中查找某个点的相应线,然后沿着这条线搜索与第一个图像中该点周围的图块在外观上最相似的图块。还有其他一些方法,但确实需要有关问题的更多信息来判断哪种方法适合您的情况。

编辑2:在图纸中,您得到的点是共面的。因此,单应性映射两个图像之间的点位置,并且不需要找到基本矩阵。OpenCV具有估计同形异义的功能,只需要四个点。

给定:

图 1 中的点对应 a

目标:

在图2中所谓的极线L上找到相应的点b

如何?

    | x0 |       | x1 |
a = | y0 | , b = | y1 |
    | 1  |       | 1  |

L = F * a

    |F00 F01 F02|
F = |F10 F11 F12|
    |F20 F21 F22|

必须满足以下等式才能获得图 2 中的 b

a' * F * b = 0 .

注:a' = transpose(a) .

由于某种原因,由于缺乏声誉,我无法添加评论。我已经研究这个领域大约一个月了,希望我能回答许多未回答的问题,这些问题在我研究这个主题时也让我感到困惑。

@M2X基本矩阵是从图像平面 1 中的点到图像平面 2 中的线的映射。这些线是一种称为极地线的特殊类型的线,由图像平面和从 2 个相机的原点和 3D 点构建的平面的交点形成。因此,除非您有一些额外的信息或约束,否则无法使用基本矩阵确定点-点映射。

@Jukurrpa单应性是一种点对点映射,使得平行线映射到平行线。可以证明这种映射是线性的,那么由于线性映射等价于矩阵,因此单应性可以由矩阵定义。投影到图像平面上的一组 3D 点将平行线映射到平行线,因此单应性法将适用于您的情况。书中概述了从给定点估计同形异义词的方法(计算机视觉中的多视图几何(。给定两个图像中的相应点,您可以使用迭代方法(梯度下降(或封闭形式解决方案(奇异值分解(找到单应性。