两台校准相机的3D重建-这条管道中的错误在哪里



有很多关于从已知内部校准的立体视图进行3D重建的帖子,其中一些非常棒。我已经读了很多,根据我所读的内容,我正试图用下面的管道/算法计算我自己的3D场景重建。我将列出方法,然后在底部提出具体问题。

0。校准您的相机:

  • 这意味着检索相机1和相机2的相机校准矩阵K1和K2。这些是3x3矩阵,封装了每个相机的内部参数:焦距、主点偏移/图像中心。这些不会改变,你只需要为每台相机做一次,只要你不缩放或改变你录制的分辨率
  • 脱机执行此操作。不要争论
  • 我使用的是OpenCV的CalibrateCamera()和棋盘例程,但此功能也包含在Matlab相机校准工具箱中。OpenCV例程似乎工作得很好

1.基本矩阵F:

  • 现在将您的相机设置为立体装备。使用两个图像/视图之间的点对应关系来确定该配置的基本矩阵(3x3)
  • 你如何获得对应关系取决于你自己,在很大程度上取决于场景本身
  • 我使用OpenCV的findFundamentalMat()来获得F,它在方法上提供了许多选项(8点算法、RANSAC、LMEDS)
  • 您可以通过将所得矩阵插入基本矩阵的定义方程来测试:x'Fx = 0,其中x'和x是齐次坐标(x, y, 1)中的原始图像点对应关系(x, y),并且三个向量中的一个被转置,因此乘法是有意义的。每个对应关系越接近零,F就越能服从它的关系。这相当于检查导出的F从一个图像平面映射到另一个图像面的实际效果。使用8点算法,我得到了约2px的平均偏转

2.基本矩阵E:

  • 直接从F和校准矩阵计算本质矩阵
  • E=K2TFK1

3.E的内部约束:

  • E应该遵守某些约束。特别地,如果SVD分解为USV.t,则其奇异值应为=a, a, 0。S的前两个对角线元素应该相等,第三个元素为零
  • 我很惊讶地在这里读到,如果在测试时这不是真的,你可能会选择从先前的分解中制造一个新的Essential矩阵,比如E_new = U * diag(1,1,0) * V.t,它当然保证遵守约束。您实际上已经人为地设置了S=(100010000)

4.全相机投影矩阵:

  • 有两个相机投影矩阵P1和P2。它们是3x4,服从x = PX关系。此外,P = K[R|t],因此K_inv.P = [R|t](其中相机校准已被移除)
  • 第一个矩阵P1(不包括校准矩阵K)可以设置为[I|0],然后P2R|t
  • 根据E的分解计算两个相机R,t之间的旋转和平移。有两种可能的方法来计算R(U*W*V.tU*W.t*V.t),也有两种方法来计算t(U的±第三列),这意味着Rt有四种组合,其中只有一种是有效的
  • 计算所有四个组合,并选择一个几何上对应于重建点在两个相机前面的情况的组合。实际上,我是通过执行和计算得到的P2=[R|t]来实现这一点的,并在归一化坐标中对几个对应关系的三维位置进行三角测量,以确保它们具有正深度(z-coord)

5.在3D中进行三角测量

  • 最后,将恢复的3x4投影矩阵与其各自的校准矩阵组合:P'1=K1P1和P'2=K2P2
  • 并相应地对每个2d点对应关系的3空间坐标进行三角测量,我从这里开始使用LinearLS方法

问题:

  • 此方法中是否存在严重遗漏和/或错误
  • 我的F矩阵显然是准确的(与典型坐标值相比,映射中的偏差为0.22%),但当使用归一化图像对应关系对x'Ex = 0测试E时,该映射中的典型误差大于归一化坐标本身的100%。针对xEx = 0测试E有效吗?如果有效,那么错误的跳跃来自哪里
  • 当使用RANSAC时,我的基本矩阵估计中的误差明显比8pt算法差,在x和x'之间的映射中为±50px。这让我深感担忧
  • "强制执行内部约束"仍然让我感到非常奇怪——仅仅从原始矩阵的部分分解中制造一个新的Essential矩阵怎么可能有效
  • 有没有比计算P和对一些归一化坐标进行三角测量更有效的方法来确定R和t的组合
  • 我最后的重新投影错误是720p图像中的数百个像素。我可能会在校准、确定P-矩阵或三角测量中遇到问题吗

我的基本matr1ix估计中的误差明显更糟当使用RANSAC比8pt算法时,±50px之间的映射x和x'。这让我深感担忧。

使用8pt算法并不排除使用RANSAC原理。当直接使用8pt算法时,您使用哪些点?你必须自己选择8分(好)。

在理论上,你可以从任何点的对应关系计算基本矩阵,并且你经常得到退化的基本矩阵,因为线性方程不是独立的。另一点是,8pt算法使用了一个超定线性方程组,因此一个孤立点会破坏基本矩阵。

你试过使用RANSAC结果吗?我打赌它代表了F.的正确解决方案之一

My F矩阵显然是准确的(映射中偏移0.22%与典型坐标值相比),但当针对使用归一化图像对应的x'Ex=0该映射是归一化坐标本身的>100%。是针对xEx=0测试E有效,如果有效,那么错误的跳跃在哪里来自?

同样,如果F退化,则x'Fx=0可以用于每个点对应。

错误E的另一个原因可能是摄像头的开关(K1T*E*K2而不是K2T*E*K1)。记得检查:x'Ex=0

"强制内部约束"仍然让我感到非常奇怪-从原来分解的部分?

在Hartley和Zisserman的"计算机视觉中的多视图几何"中对此进行了解释。据我所知,这与F.的Frobenius范数的最小化有关

你可以在谷歌上搜索,那里有pdf资源。

有没有更有效的方法来确定R和t的组合使用比计算P和三角化一些归一化坐标?

据我所知,没有。

我最后的重新投影错误是720p图像中的数百个像素。是我可能会在校准、确定P-矩阵还是三角测量?

刚体变换P2不正确,因为E不正确。

相关内容

  • 没有找到相关文章

最新更新