3D重建 - 如何从2D图像创建3D模型?

时间:2011-10-09 17:55:50

标签: image-processing 3d language-agnostic 3d-reconstruction 3d-model

如果我用相机拍照,所以我知道从相机到物体的距离,比如房子的比例模型,我想把它变成我可以操作的3D模型周围所以我可以评论房子的不同部分。

如果我坐下来考虑拍摄多张图片,标注方向和距离,我应该能够弄清楚如何做到这一点,但是,我想我会问是否有人有一些可能有助于解释的论文更多。

你解释的语言并不重要,因为我正在寻找最好的方法。

现在我正在考虑展示房子,然后用户可以为高度提供一些帮助,例如从相机到模型那部分顶部的距离,并且给予足够的这个就可以开始计算其余部分的高度,特别是如果有自上而下的图像,则从四边的角度计算图像,以计算相对高度。

然后,部件需要颜色不同,以帮助分离我期望的模型的各个部分。

6 个答案:

答案 0 :(得分:61)

如前所述,问题是非常很难,通常也称为multi-view object reconstruction。通常通过解决每对连续图像的立体视图重建问题来接近它。

执行立体重建需要拍摄具有大量物理点可见重叠的图像。您需要找到corresponding points,然后您可以使用三角测量来查找点的3D坐标。

极线几何

立体声重建通常是通过首先校准相机设置来完成的,这样您就可以使用epipolar geometry理论来修正图像。这简化了查找相应点以及最终三角测量计算的过程。

如果你有:

您可以仅使用矩阵理论计算fundamentalessential matrices,并使用这些来纠正您的图像。这需要一些关于co-ordinate projectionshomogeneous co-ordinates的理论以及对pinhole camera modelcamera matrix的了解。

如果您想要一种不需要相机参数且适用于未知相机设置的方法,您应该研究uncalibrated stereo reconstruction的方法。

对应问题

找到相应的点是一个棘手的部分,需要您寻找相同亮度或颜色的点,或使用纹理图案或一些其他功能来识别成对图像中的相同点。通过在每个点周围的小区域中查找最佳匹配,或者全局,通过将图像视为一个整体来实现本地的技术。

如果您已经拥有fundamental matrix,它将允许您纠正图像,使两个图像中的对应点被约束为一条线(理论上)。这有助于您使用更快的本地技术。

目前仍然没有理想的技术来解决对应问题,但可能的方法可能属于这些类别:

  • 手动选择:让人手动选择匹配点。
  • 自定义标记:放置标记或使用您可以轻松识别的特定图案/颜色。
  • 差异平方:取一个点周围的区域,找到另一个图像中最接近的整个匹配区域。
  • 图形切割:基于使用图论的优化的全局优化技术。

对于特定实施,您可以使用Google Scholar搜索当前的文献。以下是一篇被高度引用的论文,比较各种技术 A Taxonomy and Evaluation of Dense Two-Frame Stereo Correspondence Algorithms

多视图重建

一旦得到相应的点,就可以使用极线几何理论进行三角测量计算,找到点的三维坐标。

然后对每对连续图像重复这整个立体重建(暗示您需要对图像的顺序或至少知道哪些图像具有许多重叠点)。对于每对,您将计算不同的基本矩阵。

当然,由于每个步骤的噪音或不准确,您可能需要考虑如何以更全球化的方式解决问题。例如,如果您有一系列围绕对象拍摄并形成循环的图像,则会提供额外的约束,可以使用bundle adjustment之类的内容来提高早期步骤的准确性。

正如您所看到的,立体和多视图重建都远未解决问题,仍在积极研究中。你想以自动化的方式做得越少,问题就越明确,但即使在这些情况下,也需要相当多的理论才能开始。

替代

如果它在您想要做的限制范围内,我建议您考虑使用专用硬件传感器(例如XBox's Kinect)而不是仅使用普通相机。这些传感器使用结构光,飞行时间或一些其他范围成像技术来生成深度图像,它们还可以与来自他们自己的相机的颜色数据相结合。它们实际上为您解决了单视图重建问题,并且通常包括用于拼接/组合多个视图的库和工具。

极线几何参考

我的知识实际上在大多数理论上都很薄,所以我能做的最好的事情就是进一步为你提供一些有用的参考资料(按照相关性顺序):

我不确定所有这些是多么有用,但希望它包含足够有用的术语和参考资料以寻找更多资源。

答案 1 :(得分:14)

此问题称为Photogrammetry

Google会为您提供无穷无尽的参考资料,请注意,如果您想推出自己的参考资料,那就是非常难题。

答案 2 :(得分:7)

研究取得了重大进展,现在可以从2D图像中获得漂亮的3D形状。例如,在我们最近的题为“Synthesizing 3D Shapes via Modeling Multi-View Depth Maps and Silhouettes With Deep Generative Networks”的研究工作中,在解决从2D图像获取3D形状的问题上迈出了一大步。在我们的工作中,我们展示您不仅可以直接从2D到3D并获得良好的近似3D重建,还可以以有效的方式学习3D形状的分布并生成/合成3D形状。下面是我们工作的图像,显​​示我们甚至可以从单个轮廓或深度图(左侧)进行 3D重建。地面实况3D形状显示在右侧。

enter image description here

我们采取的方法有一些与认知科学或大脑运作方式相关的贡献:我们建立的模型共享所有形状类别的参数,而不是仅针对一个类别。此外,它还可以获得一致的表示形式,并在生成3D形状作为输出时将输入视图的不确定性考虑在内。因此,即使对于非常模糊的输入,它也能够自然地给出有意义的结果。如果你看一下我们论文的引用,就可以看到从2D图像到3D形状的更多进展。

答案 3 :(得分:3)

Google Sketchup(免费)有一个photo matching tool,可让您拍摄照片并与其视角相匹配,以便轻松进行建模。

编辑:您似乎对开发自己的解决方案感兴趣。我以为你试图在单个实例中获得图像的3D模型。如果这个答案没有帮助,我道歉。

答案 4 :(得分:3)

查看The Deadalus Project,虽然该网站不包含有关解决方案的说明性信息的图库,但它发布了几篇论文和有关工作方法的信息。

我观看了该项目的一位主要研究人员(Roger Hubbold)的讲座,图像效果非常惊人!虽然这是一个复杂而漫长的问题。它有很多棘手的细节需要考虑到获得三维数据的近似值,例如从墙面获取三维信息,其中启发式工作如下:拍摄正常照明场景的照片,然后在完全闪光激活的情况下重新拍摄相同位置的图像,然后减去两个图像,并通过预先采取的闪光校准图像分割结果,对此新结果应用盒式滤镜,然后进行后处理以估计深度值,整个过程详细解释in this paper(也在项目网站上发布/引用)

答案 5 :(得分:0)

希望这对您尝试从2d图像堆栈构建3d体积有帮助!!您可以使用3D查看器插件随附的开源工具,例如ImageJ Fiji。

https://quppler.com/creating-a-classifier-using-image-j-fiji-for-3d-volume-data-preparation-from-stack-of-images/