代码之家  ›  专栏  ›  技术社区  ›  Yasin Yousif

如何在OpenCV中从多幅已知姿势的图像中稳健地进行三维重建

  •  0
  • Yasin Yousif  · 技术社区  · 6 年前

    高分辨率图像的传统解决方案示例:

    1. 为所有图像提取特征(密集)
    2. 匹配特征以通过图像查找轨迹
    3. 将要素三角化为三维点。

    对于我的案例,我可以给出两个问题(许多640*480的图像彼此之间有小的移动), 第一 :匹配非常慢,尤其是当图像数量很大时,因此更好的解决方案是光流跟踪。。,但随着大动作的进行,它变得越来越稀少(一个组合可以解决这个问题!!)

    第二 :三角形轨迹,虽然这是一个过度确定的问题,但我发现很难编写解决方案。。(这里我要求简化我在参考文献中读到的内容)

    我在这个方向上搜索了很多图书馆,但没有找到有用的结果。

    同样,我有地面真值摄像机矩阵,只需要3d位置作为第一次估计(没有BA), 一个编码的软件解决方案可能会有很大帮助,因为我不需要重新发明轮子,尽管详细的说明可能会有所帮助

    0 回复  |  直到 6 年前
        1
  •  5
  •   rain cheng    5 年前

    epipolar search

    这基本上显示了用于估计深度的基本几何图形。

    正如你所说,我们有相机姿态Q,我们从世界上选取一个点X,X_L是它在左边图像上的投影,现在,有了Q_L,Q_R和X_L,我们可以组成这个绿色的极平面,剩下的工作很简单,我们在线(Q_L,X)上搜索点,这条线精确地描述了X_L的深度,有不同的假设:X1,X2,..., 我们可以在正确的图像上得到不同的投影

    现在我们比较X_L和右图上重投影点的像素强度差,只需选择最小的一个,相应的深度正是我们想要的。

    很简单嘿?事实上更难的是,图像从来都不是严格凸的: non-convex-img

    这使得我们的匹配非常困难,因为非凸函数会导致任何距离函数都有多个临界点(候选匹配),如何确定哪一个是正确的?

    然而,人们提出了基于路径的匹配来处理这个问题,方法如下: SAD , SSD , NCC ,它们被引入来创建尽可能凸的距离函数,但它们无法处理大规模重复纹理问题和低纹理问题。

    为了解决这个问题,人们开始在极线上进行长距离搜索,突然发现我们可以将匹配度量的整个分布描述为沿深度的距离。

    epipolar_depth_distribution

    这幅图的深度是垂直坐标轴,这幅图的深度是垂直坐标轴 depth filter 我们通常用高斯深度滤波器来描述这种分布,并用这种滤波器来描述深度的不确定性,结合面片匹配方法,我们可以大致得到一个建议。

    现在,让我们使用一些优化工具,比如GN或梯度下降,最终优化深度估计。

    综上所述,深度估算的整个过程如下:

    1. 假设所有像素的所有深度都遵循初始高斯分布
    2. 通过极线开始搜索,并将点重新投影到目标帧中
    3. 三角测量深度,并根据深度过滤器计算深度的不确定性
    4. 再次运行2和3以获得新的深度分布,并与前一个深度分布合并,如果它们会合,则中断,或者从2开始重新开始。