2013-04-18 119 views
1

我想创建一个示例应用程序,我可以在相机屏幕上叠加3d对象。他们将被放置在一个特定的点上,并随着用户移动摄像机移动视角而重新绘制每一帧。计算机视觉/增强现实:如何在视觉上叠加3D物体?

从本质上说,我期待复制这样的:http://www.youtube.com/watch?v=EEstFtQbzow

这是我在更精确的措辞问题的尝试:考虑被赋予初始图像矩阵的时候(代表所有的X,Y像素COORDS)的初始对象放置。放置后,每个后续视频帧都需要进行分析以重新放置已放置的对象,以便在新视角下可以正确地重新绘制(重叠)对象。

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

回答

2

这是计算机视觉中众所周知的问题。您可以参考各种论文,包括同时进行本地化和映射(SLAM)的系统,这些系统可能使用包调整或基于过滤器的跟踪。阅读关于这些主题的流行论文将为您提供对现实世界中相机和跟踪的深入了解。总而言之,您需要在每一帧中获得相机的6D姿态,即您需要计算出,其中相机处于真实世界(平移)以及它指向的位置(旋转)。这通常是通过首先跟踪场景中的显着特征,估计它们的3D位置,然后使用这些特征的感知运动来确定每帧中的摄像机姿态。您将需要在现实世界中定义一个原点(您不能将相机用作您尝试解决问题的原点),并且至少有4个已知/测量点作为参考开始。在您的问题中包含的视频中,Augment似乎使用印刷图案来获取初始相机姿态。然后他们跟踪现实世界中的特征以继续跟踪姿势。

拥有相机姿态后,您可以使用投影将3D对象放置在现实世界中。相机姿态编码为基本/基本相机矩阵,使用该矩阵可以将世界上的任何3D点转换为相机框架中的2D位置。因此,要想在现实世界中呈现一个虚拟的3D点,在(x,y,z)处说出,您将使用相机矩阵将(x,y,z)投影到二维点(u,v)。然后渲染从相机获取的图像上的点。为你要呈现的对象的每一点做到这一点,你就完成了:)

2

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

就我所知,这就是Augment(在你的视频中)中的人在他们的应用中使用的东西!

2

这是一个经典问题。在电影视觉效果(VFX)行业中,它被称为matchmoving。它归结为针对给定图像序列求解运动结构(SfM)问题,并且具体地估计相对于任意原点的每个帧处的相机固有参数和位置/姿态(例如,序列的第一帧)。

相关搜索词:“sfm”,“matchmoving”,“捆绑调整”,“ceres求解器”。谷歌的Ceres捆绑调整器已经开放,包括一个Android端口(在最近的版本中支持“球形”相机模式)。

1

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

这个独特的事情是,虽然你显示的视频中的示例仅限于使用标记,但Metaio的sdk允许您使用SLAM环境跟踪,图像/标记跟踪或GPS坐标跟踪以增强3D对象 - 也可以使用或不使用标记进行相同操作。

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

希望这会有所帮助。

+0

非常感谢 - 我正要暂时放弃这个想法。在接下来的日子里,将通过该教程深入挖掘,欢呼! – JDS 2013-04-30 01:23:11

+0

很高兴有帮助!祝你好运,让我们知道,如果你遇到任何问题 – Amanda 2013-05-03 15:34:53

+0

根据他们的网站Metaio已经停产。 – Pourya 2016-02-11 19:50:45