1

我正在尝试创建一个示例应用程序,我可以在其中覆盖相机屏幕上的 3d 对象。它们将被放置在特定点,并在用户移动相机以改变视角时重新绘制每一帧。

从本质上讲,我希望复制这个:http ://www.youtube.com/watch?v=EEstFtQbzow

这是我更准确地表述问题的尝试:考虑在初始对象放置时给定一个初始图像矩阵(代表所有 X、Y 像素坐标)。放置后,需要分析每个后续视频帧以重新定位已放置的对象,以便在给定新视角的情况下正确重新绘制(叠加)它。

我有一点计算机视觉方面的背景,但我不确定如何完成这项特定任务。作为参考,我要创建的示例应用程序将适用于 Android,因此如果有人知道现有代码,我也可以利用它。但是,我非常愿意被引导到描述我需要实现的算法的学术论文。谢谢。

4

4 回答 4

2

你应该看看Vuforia,一个由 Qualcomm 开发的移动 SDK。它是免费的,并提供了许多工具来将增强现实添加到您的应用程序中。

据我所知,这也是来自 Augment 的人(在您的视频中)在他们的应用程序中使用的东西!

于 2013-04-18T10:07:53.327 回答
2

这是计算机视觉中一个众所周知的问题。您可以参考各种论文,包括执行同步定位和映射 (SLAM) 的系统,这些系统可能使用捆绑调整或基于过滤器的跟踪。阅读有关这些主题的热门论文将使您深入了解现实世界中的相机和跟踪。

总而言之,您需要在每一帧中获取相机的 6D 位姿,即您需要确定相机在现实世界中的位置(平移)和指向的位置(旋转)。这通常是通过首先跟踪场景中的显着特征,估计它们的 3D 位置,然后使用这些特征的感知运动来计算每一帧中的相机姿势来完成的。您需要在现实世界中定义一个原点(您不能将相机用作您要解决的问题的原点),并至少有 4 个已知/测量点作为参考。在您问题中包含的视频中,Augment 似乎使用印刷图案来获取初始相机姿势。然后他们跟踪现实世界中的特征以继续跟踪姿势。

一旦有了相机姿势,就可以使用投影在现实世界中定位 3D 对象。相机姿势被编码为基本/基本相机矩阵,使用它您可以将世界上的任何 3D 点转换为相机帧中的 2D 位置。因此,要在现实世界中渲染一个虚拟 3D 点,例如在 (x, y, z),您将使用相机矩阵将 (x, y, z) 投影到 2D 点 (u, v)。然后在从相机获得的图像上渲染点。对要渲染的对象的每个点执行此操作,然后就完成了:)

于 2013-04-18T15:15:27.723 回答
2

这是一个经典的问题。在电影视觉效果 (VFX) 行业中,它被称为匹配移动。它归结为解决给定图像序列的运动结构 (SfM) 问题,并专门估计相机内在参数和相对于任意原点的每一帧的位置/姿势(例如,在序列的第一帧)。

相关搜索词:“sfm”、“matchmoving”、“bundle adjust”、“ceres solver”。

谷歌的 Ceres 捆绑调节器已经开源,包括一个 Android 端口(在最近的版本中支持“球形”相机模式)。

于 2013-04-18T13:31:45.297 回答
1

这是关于如何使用 Metaio SDK 构建家具用例的分步教程(也是免费的,带有小水印-但它也有自己的渲染引擎,因此您可以使用或不使用统一本机代码)http: //dev.metaio.com/sdk/tutorials/interactive-furniture/

独特之处在于,虽然您展示的视频中的示例仅限于使用标记,但 Metaio 的 sdk 允许您使用 SLAM 环境跟踪、图像/标记跟踪或 GPS 坐标跟踪来增强 3D 对象 - 也就是您可以使用或不使用标记来执行相同的操作。

有关跟踪配置 + 教程 + 实时网络研讨会 + 示例代码的所有其他信息都可以通过上面的链接找到。

希望这可以帮助。

于 2013-04-29T23:43:28.013 回答