我正在尝试创建一个示例应用程序,我可以在相机屏幕上叠加3d对象。它们将被放置在特定点,并在用户移动相机以移动视角时重新绘制每一帧。
本质上,我希望复制这个:http://www.youtube.com/watch?v=EEstFtQbzow
这是我尝试更精确地表达问题:考虑在初始对象放置时给出初始图像矩阵(表示所有X,Y像素坐标)。放置后,需要分析每个后续视频帧以重新定位已放置的对象,以便在给定新视角的情况下可以正确地重新绘制(叠加)。
我有一些计算机视觉背景,但我不确定如何完成这项特殊任务。作为参考,我想要创建的示例应用程序将用于Android,因此如果有人知道现有代码,我可以利用它也会很好。但是,我非常愿意接受描述我需要实现的算法的学术论文。 感谢。
答案 0 :(得分:2)
您应该查看由Qualcomm开发的移动SDK Vuforia。它是免费的,并提供了许多工具来为您的应用程序添加增强现实。
据我所知,这是Augment(在你的视频中)的人也在他们的应用程序中使用的!
答案 1 :(得分:2)
这是一个经典问题。在电影视觉效果(VFX)行业,它被称为matchmoving。它归结为解决给定图像序列的运动结构(SfM)问题,并且具体地估计相对于任意原点的每个帧处的相机固有参数和位置/姿势(例如,相对于任意原点的位置/姿势)。序列的第一帧)。
相关搜索词:“sfm”,“matchmoving”,“捆绑调整”,“ceres solver”。
来自谷歌的Ceres捆绑调整器已经开源,并包含一个Android端口(在最近的版本中支持“球形”摄像头模式)。答案 2 :(得分:2)
这是计算机视觉中一个众所周知的问题。您可以参考各种论文,包括同时进行定位和映射(SLAM)的系统,可以使用捆绑调整或基于过滤器的跟踪。阅读有关这些主题的热门论文,可以让您对现实世界中的摄像机和跟踪有很多了解。
总而言之,您需要在每一帧中获得相机的6D姿势,即您需要弄清楚相机在现实世界中的位置(翻译),以及它指向的位置(回转)。这通常通过首先跟踪场景中的显着特征,估计它们的3D位置然后使用这些特征的感知运动来计算每帧中的相机姿势来完成。您需要在现实世界中定义原点(您不能将相机用作您尝试解决的问题的原点)并且至少有4个已知/测量点作为参考开始。在您的问题中包含的视频中,Augment似乎使用打印图案来获得初始相机姿势。然后他们跟踪现实世界中的特征以继续跟踪姿势。
拥有相机姿势后,您可以使用投影将3D对象放置在现实世界中。相机姿势被编码为基本/基本相机矩阵,使用该矩阵可以将世界中的任何3D点转换为相机框架中的2D位置。因此,要在现实世界中渲染虚拟3D点,例如在(x,y,z),您将使用相机矩阵将(x,y,z)投影到2D点(u,v)。然后渲染从相机获得的图像上的点。对要渲染的对象的每个点执行此操作,然后就完成了:)
答案 3 :(得分:1)
以下是如何使用Metaio SDK构建家具用例的分步教程(也可以免费使用小水印 - 但它也有自己的渲染引擎,因此您可以使用或不使用统一代码)http://dev.metaio.com/sdk/tutorials/interactive-furniture/
关于这一点的独特之处在于,虽然您展示的视频中的示例仅限于使用标记,但Metaio的sdk允许您使用SLAM环境跟踪,图像/标记跟踪或GPS坐标跟踪以增强3D对象 - 也可以使用或不使用标记来执行相同操作。
有关跟踪配置+教程+实时网络研讨会+示例代码的所有其他信息都可以通过上面的链接找到。
希望这有帮助。