5

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

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

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

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

考虑到我们知道ab并且F在这个等式中: (a', b", 1) T * F * (a, b, 1) = (0)

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

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

我希望这让我的问题更清楚:)

4

3 回答 3

3

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

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

请。用一个例子告诉我们你想要实现的目标也许也会有所帮助。

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

编辑2:在图中你得到的点是共面的。因此,单应性映射了两幅图像之间的点位置,不需要找到基本矩阵。OpenCV有一个估计单应性的功能,只需要四个点。

于 2012-04-30T16:57:25.347 回答
2

鉴于:

图 1 中的点对应a

目标:

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

如何?

    | 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)

于 2016-03-20T02:09:54.723 回答
1

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

@M2X 基本矩阵是从图像平面 1 中的一个点到图像平面 2 中的一条线的映射。这些线是一种特殊类型的线,称为核线,由图像平面和由2 个摄像机的原点和 3D 点。因此,除非您有一些额外的信息或约束,否则不可能使用基本矩阵来确定点对点映射。

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

于 2019-10-28T03:01:11.463 回答