2013-03-19 117 views
4

我正在寻找一种方法或算法,可以让我从两幅不同图像中识别并配对点,以达到立体视觉的目的。 picture来自两个不同图像的点匹配算法

附图描述了我现在的情况:2台摄像机在Y轴上对齐,并在X轴上稍微偏移,查看一组点。我能够跟踪并获取这两个相机图像(IMG0和IMG1)上每个点的2D位置。

因此,我有2D的两个列表坐标:

L0 = { a0, a1, a2, a3, a4, a5, a6 } 
L1 = { b0, b1, b2, b3, b4, b5, b6 } 

现在,为了进行三角测量来获取每个点的三维位置,我需要知道哪些点上的图像IMG1对应IMG0上的哪一点。两个相机看到完全相同的一组点,具有相同的整体形状,但很明显,由于轻微的失真并且相机在水平方向上偏移,2D坐标不匹配从一个图像到另一个。

理想情况下,点匹配算法我正在寻找将导致列表,例如:

List = {a0-b0, a1-b1, a2-b2,...} 

列表的顺序不一样长的事情,因为我确信每个点与配对正确的第二张图片。

我一直在看几篇介绍立体映射算法的论文,但是我没有发现任何与我的问题有关的问题,因为大多数算法都是基于沉重的图像特征识别,这在我的情况下并不适合我想快速实时处理所有内容。我似乎找到的最接近的解决方案是点匹配算法presented here,但再一次,这似乎对我的问题来说太重了。

任何帮助将不胜感激。

+0

当我在网上搜索时,我能够获得许多相关链接(主要在matlab中实现)。例如:http://www.mathworks.com/matlabcentral/fileexchange/28522-stereo-matching。 – ElKamina 2013-03-19 18:49:50

+0

点可以靠近相机吗?如果这些点非常靠近相机,或者相机距离很远,点云的形状可能会有很大的不同,并且可能需要不同的匹配算法。 – mbeckish 2013-03-19 19:51:11

回答

4

首先您应该确保您了解epipolar geometry的基本概念,尤其是极线的概念。

简而言之:假设您有一个3D点P,投影到相机A图像中的2D点q。现在您有第二台相机,将其称为B,并且您想在B中找到P的图像。对极几何告诉您,PB的图像的可能位置q限于一条线,称为极线。它还告诉你(以及如何)可以使用所谓的基本矩阵从q和摄像机的校准中计算出这条线。

您的问题这具有以下含义:

q从列表L0点。

  • 如果单点在列表L1这是对的q第二图像中的极线,那么这是q正确的对应关系。
  • 如果极线上有几个点,那么你的问题不能用给定的信息来解决。在这种情况下,您需要对3D中点的分布进行启发式假设,因为每个配对q的一个可能的3D点与极线上的一个点有关。

如果您的相机只沿X轴偏移,并且它们的方向相同(即图像平面平行),那么这是您的幸运日:在此特殊相机配置中,极线是水平的,即对于点(x,y),极线是具有任意X坐标和Y坐标y的所有点的线。

请注意,实际上,由于测量误差和数值问题,您还会面临点不太可能完全位于核线上的问题。

+0

非常感谢。 是的,我的相机只沿X轴偏移。 因此,假设对于L0中的给定点,我想我可以检查L1是否有类似的Y位置的所有点(我说相似,因为它可能不会完全相同,正如您所说,由于潜在的测量错误)。 如果我在线上有更多的点匹配,我可以使用X位置对它们进行排序。 我会放弃它,但我认为这会奏效。 – user2187623 2013-03-20 09:14:35

+0

这应该起作用,但正如我所说的:在极线上有多于一个候选点,考虑到您正在重建的特定场景,您需要考虑哪一点更合理。我会对所有候选人进行三角测量,然后查看要选择的3D点。 – DCS 2013-03-20 09:48:31

+0

如果L1中有多个点位于由L0中的一个点生成的相同极线上,我建议创建一个图表,其中L0中的每个点都有一个顶点,L1中的每个点都有一个顶点,和一个位于两个顶点之间的边缘,只要一个位于另一个顶点线上。然后,您可以通过在此图上运行双边最大匹配算法来找到最佳匹配点。 – 2013-03-20 11:38:24