我想创建一个将 2d 图像/视频转换为 3d 模型的应用程序。在研究它时,我发现了类似的应用程序,如 Trnio、Scann3D、Qlone 和其他一些应用程序(尽管它们中很少有人提供较差的输出 3D 模型)。我还发现了一项由微软研究推出的名为 mobileFusion 的技术,它展示了我对我的应用程序所希望的相同愿景,但这些应用程序并非如此。
1 回答
创建 3D 建模应用程序是一项复杂的任务,要达到高标准需要大量的学习。为了给您指明正确的方向,您很可能需要执行称为运动结构(SfM) 或同时定位和映射(SLAM) 的操作。
如果您想自己编程,如果您了解 C++ 或 Python, OpenCV是一个不错的起点。典型的管道涉及;特征提取和匹配、相机位姿估计、三角测量,然后使用捆绑调整进行优化。SfM 和 SLAM 的所有管道都遵循这些一般步骤(当然有例外)。尽管谷歌的 Ceres Solver 是一个优秀的开源捆绑调整,但所有这些步骤都是可能的 OpenCV。SfM 通常会进行密集匹配,这是您获得非常密集的点云的地方,这有利于创建网格。一个免费的开源管道是OpenSfM。另一个很好的工具来源是OpenMVG,它拥有制作完整管道所需的所有工具。
SLAM 与 SfM 类似,但更多地关注实时应用,而不是绝对准确度。这方面的应用更多地集中在机器人技术上,机器人想知道它相对于环境的位置,但它不太关心绝对精度。排名靠前的 SLAM 算法是ORB-SLAM和LSD-SLAM。两者都是开源的,您可以免费在自己的软件中实施。
所以真的取决于你想要什么...... SfM 用于高精度,SLAM 用于实时。如果您想要一个好的 3D 模型,我建议您使用现有的算法,因为它们非常好。
我认为最好的商业软件... Agisoft Photoscan。如果你能做出一半这么好的东西,我会非常感动。要回答您的问题,您需要什么资源。在我看来,python/c++ 技能、谷歌搜索的能力以及正确阅读摄影测量和 SfM 的空闲时间。