具有已知内在和外在矩阵的立体视觉3d点计算

SSS

我已经使用两个摄像机的固有摄像机矩阵成功计算了“旋转”,“平移”。我还从左右摄像机获得了校正后的图像。现在,我想知道如何计算一个点的3D坐标,即图像中的一个点。在这里,请参阅绿点。我看了方程式,但是它需要基线,我不知道该如何计算。您能否告诉我使用给定信息(R,T和本征矩阵)计算绿点的3d坐标的过程?

仅供参考1.我也有一个基本矩阵和基本矩阵,以防万一我们需要它们。2.原始图像尺寸为960 x720。校正后的尺寸为925 x 669 3.左侧图像的绿点:(562,185),右侧图像的绿点:(542,185)

在此处输入图片说明

术语“基准”通常仅表示翻译。由于您已经有了旋转,平移和内在矩阵(请不要使用R, TK)。您可以进行三角剖分,并且不需要基本矩阵或基本矩阵(它们可以用于提取R, T等,但是您已经有了它们)。您实际上也不需要校正图像,因为它不会对三角测量过程造成太大的改变。有许多种三角测量方法,每种都有其优缺点,并且有许多实现它们的库。因此,我在这里所能做的就是为您提供有关问题和潜在解决方案的概述,以及指向资源的指针,这些资源既可以直接使用,也可以用作编写自己的代码的灵感之源。

  • 形式化和解决方案概述。让我们在这里形式化我们要做什么。你有一个三维点X,有两个意见x_1 ,并x_2分别在左,右图像。如果对它们进行背投,则会获得两条光线:

    ray_1=K^{1}x_1
    rat_2=R*K^{-1}x_2+T  //I'm assuming that [R|T] is the pose of the second camera expressed in the referential of the first camera 
    

    理想情况下,您希望这两条光线在point相遇X由于在实践中我们总是会遇到一些噪声(离散噪声,舍入误差等)X,因此两条光线不会在处相遇,因此最佳答案是这样的点Q

    Q=argmin_X {d(X,ray_1)^2+d(X,ray_2)^2}
    

    其中d(.)表示线与点之间的欧几里得距离。您可以将其作为常规的最小二乘问题来解决,也可以采用考虑垂直于 和的线段的几何方法(称为中点,并将其中间作为解决方案。另一种快速而肮脏的方法是使用DLT。基本上,您将约束(即,应尽可能靠近两条光线)重写为线性系统,并使用SVD求解。lray_1ray_2 XAX=0

    通常,几何(中点)方法不太精确。基于DLT的数字虽然不是最稳定的数字,但通常会产生可接受的结果。

  • 深入形式化的资源

    当然是哈特利·齐瑟曼的书!第312章介绍了一种简单的基于DLT的方法,该方法在opencv中使用(在校准和sfm模块中都使用)。该方法非常容易实现,在任何情况下都不应花费超过10分钟语言。

    塞利斯基的书。它在SFM一章中对三角剖分进行了有趣的讨论,但没有Hartley-Zisserman的那么直截了当或深入。

  • 码。您可以从calib3d模块或contribs / sfm模块中使用来自opencv的三角剖分方法。两者都使用DLT,但是SFM模块中的代码更容易理解(calib3d代码具有很多老式的C代码,阅读起来并不愉快)。还有另一个库,称为openGV,它具有一些有趣的三角剖分方法。

    cv :: triangulatePoints

    cv :: sfm :: triangulatePoints

    OpenGV

    openGV git repo似乎不是很活跃,我也不是库设计的忠实拥护者,但是如果我没记错的话(可以告诉我),它提供了除DLT之外的三角剖分方法。

    当然,这些都是用C ++编写的,但是,如果您使用其他语言,查找包装器或类似的库将不会很困难(使用python时,您仍然具有opencv包装器,而MATLAB具有bundle模块等)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章