使用基本矩阵来计算使用OpenCV的坐标转换

时间:2012-04-30 15:38:28

标签: c++ opencv computer-vision linear-algebra

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

问题是,现在我想使用第一个图像(y)上的点的坐标和基本矩阵(F)来查找点的坐标在第二张图片上(y')。我首先想到的只是使用上面的等式,但只给出了z点的y',可以an infinity of solutions

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

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

考虑到我们在此等式中知道abF :( a',b“,1) T * F *(a ,b,1)=(0)

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

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

我希望这能使我的问题更加明确:)

3 个答案:

答案 0 :(得分:3)

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

  

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

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

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

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

答案 1 :(得分:2)

对于第一张图像中每个有趣的点a,您可以使用F计算第二张图像中的极线l(l = Fa),然后您可以找到l上具有最高相关点的最佳对应点b一个。

答案 2 :(得分:0)

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

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

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