【问题标题】:3D Reconstruction: Solving Equations for 3D Points from Uncalibrated Images3D 重建:从未校准的图像中求解 3D 点的方程
【发布时间】:2017-01-14 22:23:53
【问题描述】:

这是一个非常简单的问题(我希望如此)。以下来自3D reconstruction from Multiple Images,Moons 等人(图 2-13,第 348 页):

来自两个未校准图像的投影 3D 重建

给定:在两个未校准图像I<sub>1</sub>I<sub>2</sub> 之间I<sub>1</sub>m<sub>2</sub>I<sub>2</sub> 中的一组点对应关系静态场景。

目标:场景的投影 3D 重建^M

算法

  1. 计算基本矩阵的估计 ^F
  2. ^F 计算极点e<sub>2</sub>
  3. 计算 3x3 矩阵
    ^A = −(1/||e<sub>2</sub>||<sup>2</sup>) [e<sub>2</sub>]<sub>x</sub> ^F
  4. 对于每对对应的图像点m<sub>1</sub>m<sub>2</sub>,求解^M的以下线性方程组:
    ^p<sub>1</sub> m<sub>1</sub> = ^M^p<sub>2</sub> m<sub>2</sub> = ^A ^M + e<sub>2</sub>
    ^p<sub>1</sub>^p<sub>2</sub> 是非零标量)

[我为格式化道歉。我不知道怎么给角色戴帽子。]

在第 4 步之前我都还好。但距离我上一堂线性代数课已经 30 多年了,即便如此,我也不确定我是否知道如何解决这样的问题。任何帮助或参考将不胜感激。

顺便说一句,这是我另一个帖子的后续:

Detecting/correcting Photo Warping via Point Correspondences

这只是尝试解决问题的另一种方法。

【问题讨论】:

    标签: computer-vision linear-algebra 3d-reconstruction


    【解决方案1】:

    给定一对匹配的图像点 m1 和 m2,由于测量中的噪声,来自光学中心的两条对应光线不太可能完美相交。因此,应该在(线性)最小二乘意义上找到所提供系统的解决方案,即使用(例如)找到x = argmin_x | C x - d |^2

          /           0 \ /    \
          |  I  -m1   0 | |  M |
    C x = |           0 | |    |
          |       0     | | p1 |
          |  A    0 -m2 | \ p2 /
          \       0     /
    

        /  0  \
        |  0  |
    d = |  0  |
        |     |
        | -e2 |
        \     /
    

    这个问题有 6 个方程的 5 个未知数。

    一个可能的替代公式利用了 m1 和 m2 与 M 共线的事实,因此 m1 x M = 0m2 x (A M + e2) = 0 产生线性最小二乘问题 @987654327 @与:

        / [m1]x   \ /   \
    C = |         | | M |
        \ [m2]x A / \   /
    

        /     0    \
    d = |          |
        \ -m2 x e2 /
    

    其中[v]x 是与v 的叉积的 3 x 3 矩阵。该问题有 6 个方程的 3 个未知数,只有保持非线性相关的方程才能减少到 4 个。

    【讨论】:

    • 谢谢!我犯的错误与您的第一个解决方案非常相似。不幸的是,我用我的解决方案尝试的样本点没有成功。我将不得不将它与您的进行更密切的比较。您的第二个解决方案看起来也很有趣。
    • 对不起,如果我很密集,但我仍然不确定如何继续。我知道你是如何得到Cxd 的。如果C 是方形且可逆的,我知道如何解决Cx=d 之类的问题,但我迷失在argmin_x|Cx - d|^2 之类的东西上。一点点 Matlab 代码或指向良好参考的链接肯定会有所帮助。
    • 求解器通常依赖于矩阵 C 的 QR 或 SVD 分解(详见Wikipedia article on linear least squares)。 NumPy 提供了linalg.lstsq 函数。我不熟悉 MATLAB,但似乎 x = C\d 应该可以工作。
    • 谢谢。我正要回复说维基百科有一篇关于线性最小二乘的相当容易理解的文章。感谢 NumPy 的提示——这正是我真正需要的。
    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2016-07-17
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多