首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于已知内、外矩阵的立体视觉三维点计算

基于已知内、外矩阵的立体视觉三维点计算
EN

Stack Overflow用户
提问于 2018-09-15 02:05:01
回答 1查看 1.2K关注 0票数 3

我已经成功地计算了旋转,平移与本征相机矩阵的两个相机。我还得到了纠正图像从左和右相机。现在,我想知道如何计算一个点的三维坐标,一个图像中的一个点。在这里,请看绿点。我看了一下方程,但它需要基线,我不知道如何计算。你能告诉我用给定的信息(R,T和内禀矩阵)计算绿点的三维坐标的过程吗?

我也有一个基本矩阵和基本矩阵,以防我们需要它们。2.原始图像大小为960 x 720。校正图为925 x 669 3,左边的绿点为(562,185),右边的为(542,185)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 09:14:09

“基线”一词通常只是指翻译。因为您已经有了旋转、平移和本质矩阵(让我们不要使用它们-- R, TK)。您可以进行三角剖分,并且不需要基本矩阵或基本矩阵(它们可以用于提取R, T等,但您已经拥有它们)。你也不需要你的图像被纠正,因为它并没有改变三角测量的过程那么多。有许多方法可以进行三角测量,每种方法都有各自的优缺点,还有许多实现它们的库。因此,我在这里所能做的就是给出问题和潜在解决方案的概述,以及指向资源的指针,这些资源既可以作为资源,也可以作为编写自己代码的灵感来源。

  • 格式化和解决方案大纲。,让我们正式说明我们在这里要做的事情。你有一个三维点X,在左图像和右图像中分别有两个观察到的x_1x_2。如果你反投影它们,你会得到两条射线: ray_1=K^{1}x_1 rat_2=R*K^{-1}x_2+T //I假设R=T是第二个摄像机的姿态,表示为第一个摄像机的参考值 理想情况下,你会希望这两条射线在X点相遇。因为在实践中,我们总是有一些噪声(离散化噪声,舍入误差等等),两条射线在X上不会相遇,所以最好的答案是点Q,这样就可以了。 Q=argmin_X {d(X,ray_1)^2+d(X,ray_2)^2} 其中d(.)表示直线与点之间的欧几里德距离。你可以把这个问题作为一个常规的最小二乘问题来解决,或者你可以采用几何方法(称为中点)来考虑与ray_1ray_2垂直的线段ray_1,并把它的中间作为你的解。另一种快速和肮脏的方法是使用DLT。基本上,您重写约束(即X应该尽可能接近两种射线)为线性系统AX=0,并用SVD求解它。 通常,几何(中点)方法的精度较低。基于DLT的方法虽然在数值上不是最稳定的,但通常会产生可接受的结果。
  • 深入形式化资源 当然是哈特利-齐瑟曼书!第12章,在第312页中解释了一种简单的基于DLT的方法,它是opencv (包括校准模块和sfm模块)中使用的方法。它很容易实现,任何语言都不应该超过10分钟。 斯耶利斯基第一本书。在关于SFM的章节中对三角剖分进行了深入的讨论,但并不像Hartley-Zisserman的那样直接或深入。
  • Code.sfm您可以使用opencv中的三角剖分方法,无论是来自calib3d模块,还是来自cont肋骨/sfm模块。两者都使用DLT,但是来自SFM模块的代码更容易理解( calib3d代码有很多老派的C代码,不太容易阅读)。还有一个名为openGV的库,它有一些有趣的三角剖分方法。 简历:三角点 简历::sfm::三角点 OpenGV openGV git似乎不太活跃,我也不太喜欢库的设计,但是如果我没记错的话(请告诉我其他方法),它提供了DLT用于三角剖分的其他方法。 当然,这些都是用C++编写的,但是如果您使用其他语言,查找包装器或类似的库并不困难(对于python,您仍然拥有opencv包装器,而MATLAB有一个包模块,等等)。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52341007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档