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