我正在寻找一种方法或算法,它可以让我识别并配对来自两个不同图像的点集,以达到立体视觉的目的。
附图展示了我目前的情况:2个摄像机在Y轴上对齐,在X轴上稍微偏移,看着一组点。我能够在两个摄像机图像(IMG0和IMG1)上跟踪并获取每个点的2D位置。
因此,我有两个2D坐标列表:
L0 = { a0, a1, a2, a3, a4, a5, a6 }
L1 = { b0, b1, b2, b3, b4, b5, b6 }
现在,为了进行三角测量以获得每个点的3D位置,我需要知道图像IMG1上的哪个点对应于IMG0上的哪个点。两个相机都看到完全相同的一组点,具有相同的整体形状,但很明显,由于轻微失真并且相机在水平方向上偏移,因此2D坐标与图像不匹配。
理想情况下,我正在寻找的点匹配算法会产生如下列表:
List = {a0-b0, a1-b1, a2-b2,...}
只要我确定每个点与第二张图像中的右点配对,列表的顺序无关紧要。
我一直在看几篇提出立体映射算法的论文,但我没有发现任何与我的问题相关的内容,因为大多数算法都基于重图像特征识别,这在我想要快速处理的情况下是不合适的一切都是实时的。我似乎找到的最接近的解决方案是点匹配算法presented here,但对我的问题来说,这似乎太重了。
非常感谢任何帮助。
答案 0 :(得分:4)
首先,您应该确保理解epipolar geometry的基本概念,尤其是极线的概念。
简而言之:假设您有一个3D点P
投射到相机q
图像中的2D点A
。现在您有第二个摄像头,称之为B
,并且您希望在P
中找到B
的图像。对极几何会告诉您P
B
中给定q
的图像的可能位置仅限于一条线,称为极线。它还告诉您(以及如何)您可以使用所谓的基本矩阵从q
计算此线以及校准相机。
对于您的问题,这有以下含义:
让q
成为列表L0
中的一个点。
L1
中的单点位于第二张图片的q
的极线上,那么这是{{q
的正确对应关系1}}。 q
的每个配对和极线上的点,您可以得到一个可能的3D点。 如果您的相机仅沿X轴偏移,并且它们是相同的方向(即图像平面是平行的),那么这是您的幸运日:在这种特殊的相机配置中,极线是水平的,即一个点(x,y)
,极线是具有任意X坐标和Y坐标y
的所有点的线。
请注意,在实践中,由于测量误差和数值问题,您还面临着点不太可能完全位于极线上的问题。