【发布时间】:2016-12-29 17:04:54
【问题描述】:
我意识到有很多与我所问的相关的蠕虫罐头,但我必须从某个地方开始。基本上,我要问的是:
给定两张使用未知相机拍摄的场景照片,我可以在多大程度上确定照片之间的(相对)翘曲?
以下是 1904 年世界博览会的两张图片。它们是在无线电报塔上的不同高度拍摄的,因此摄像机或多或少是垂直排列的。我的目标是根据这些照片和其他照片创建该区域的模型(在 Blender 中,如果重要的话)。我不是在寻找一个完全自动化的解决方案,例如,我对手动选择点和特征没有任何问题。
在过去的一个月里,我自学了关于射影变换和极线几何的知识。对于一些照片对,我可以通过从点对应中找到基本矩阵 F 来做得很好。但是下面的两个给我带来了问题。我怀疑存在某种扭曲——也许只是纵横比的变化,也许不止于此。
我的流程如下:
- 我发现两张照片之间的对应关系(见下方的红色锯齿线)。
- 我通过 Matlab(实际上是 Octave)运行点对以找到极点。目前,我正在使用 Peter Kovesi 的 Peter's Functions for Computer Vision。
- 在 Blender 中,我设置了两个覆盖图像的相机。我根据消失点定位第一台相机。我还确定了消失点的焦距。我使用极点和其中一个点对(下方,演奏台顶部的点)相对于第一个相机定位第二个相机。
- 对于每个点对,我从每个相机通过其采样点投射一条光线,并标记该点对中最近的覆盖范围(下方为浅黄色)。 我意识到这会遗漏基本矩阵中的信息 - 见下文。
如您所见,这些点并没有很好地收敛。您从演奏台点水平走得越远,左边的那些就会展开。我猜这显示了相机内在特性的差异。不幸的是,我找不到从点对应派生的 F 中找到内在函数的方法。
最后,我认为我并不关心个人内在函数本身。我真正需要的是一种应用内在函数来“纠正”图像的方法,以便我可以将它们用作叠加层来手动优化模型。
这可能吗?我需要其他信息吗?显然,我几乎没有希望找到有关相机内在函数的任何信息。但是有一些明显的结构信息,例如哪些特征是正交的。我在某处看到了一个提示,消失点可用于进一步完善或升级转换,但我找不到任何具体的内容。
更新 1
我可能已经找到了解决方案,但在我将其作为答案发布之前,我希望有人对该主题有所了解。事实证明,Peter's Functions for Computer Vision 有一个函数可以根据样本点对单应性进行 RANSAC 估计。使用m2 = H*m1,我应该能够在第二张图像上的实际 m2 点之上绘制 m1 -> m2 的映射。
唯一的问题是,我不确定我是否相信我所看到的。即使在使用 F 的极点排列得很好的图像对上,单应性的映射看起来也很糟糕。
我会尝试捕捉一个可以理解的图像,但我的推理有什么问题吗?
【问题讨论】:
-
您的最终目标是什么?正如您所提到的,有很多东西很难估计,所以最好确切地知道您在寻找什么。
-
@JackMorrison - 是的,我的帖子有点长,但目标隐藏在第三段中。最终目标是制作 1904 年世界博览会(或其中的一部分)的 Blender 模型。近期目标是对齐相机,以便我可以使用叠加的照片作为指导来进行详细建模。为此,我最终需要调整照片,例如,以正确的纵横比和正交性显示对象,以便我可以进行度量重建。我希望这也可能有助于解决一些有问题的图像对,比如上面的两个。
-
明白了。那么您想手动建模还是使用 Blender 进行 3D 重建?
-
@Jack:如果我理解术语,我想做一个稀疏的 3D 重建(即通过点对应),然后我会手动填写细节。
标签: computer-vision linear-algebra perspectivecamera 3d-reconstruction structure-from-motion