ARCore Google与Apple正面叫板

今年6月份Apple发布了iOS 11,随之带来了ARKit,ARKit一出技惊四座,就在昨天Google发布了他们的AR开发工具ARCore,看效果还是蛮不错的,看来又是一场大战了。
GoogleAR官方平台:https://developers.google.com/ar
ARCore SDK:https://github.com/google-ar/arcore-android-sdk

ARCore是基于单目+IMU增强现实方案, 跟ARKit一样,除了自家平台,Unity3D和Unreal平台也都有相应的开发包,都是为了笼络开发者啊。

解密三大核心功能

ARCore的核心功能有三个:相机姿态估计, 环境感知以及光源感知(Light Estimation)。

ARCore_Lion.gif

相机姿态估计其实就是通过单目相机读取图像,通过特征的匹配估计相机的运动轨迹。这点我相信研究过SFM、SLAM的同学并不陌生。但是ARCore极有可能用的不是常见的特征匹配法。这里先卖个关子,下文再详细分析运动轨迹的估计方法。
环境感知其实就是ARKit中的平面检测,这样可以保证虚拟物体摆放位置相对合理,处于水平姿态。

ARCore_Taco.gif

而第三个功能光源感知,按照谷歌官方的说法是,ARCore能感知现实世界的光源位置,使虚拟物体能够形成相应方位的影子,从而增加虚拟物体在现实世界里的真实度。可以看到上面的那个gif图,在关灯之后,狮子身上的光照也发生了变化。
个人估计:是因为使用的匹配算法的原因。我们就切入到ARCore第一个核心功能——姿态估计上,进行具体分析:
传统的特征匹配方法只计算关键点和描述,几十万像素的图像只用了几百个特征点,屏蔽了大部分可能有用的信息,更别说对灰度的估计了。所以,ARCore很有可能是使用了直接法来做相机位姿估计(对直接法感兴趣的同学可以去看看LSD, SVO, DSO等解决方案)。
简单来说,直接法直接使用的是整张图片的像素信息,通过像素亮度来进行运动轨迹的估计。这样的好处是速度很快,直接跳过计算关键点与描述子的步骤。同时在有些缺失特征点的环境下,只要环境中有明暗变化,也能工作,如此大大的避免了跟丢的情况。
直接法的数学推导就不详述了,但是该方案是基于灰度不变的强假设。换句话说, 就是同一空间的像素灰度值,在每张图像上都是不变的。这样就对光源的强弱及位置变化要求比较高,同时相机的自动曝光功能也需要关闭,使得图像不会整体变亮或者变暗。
ARCore的所谓光源感知功能估计就是基于像素灰度变化的计算。这也就是为什么不同的光源强度下,形成的影子的方向效果有好有差。
由于直接法完全依靠像素梯度优化来估计相机位姿,作为Ceres(谷歌推出的SLAM闭环检测算法)的东家,这点对于谷歌来说并不是什么难处。另外一个ARCore使用直接法的例证就是点云。
ARCore的SDK里是有点云功能的——由于Unity3D的Demo存在Bug,无法看到具体形成的点云是半稠密还是稠密的。但无论是半稠密还是稠密点云的构建,这都是特征法无法实现的。个人估计是半稠密的点云。如果ARCore在没有GPU CUDA加速的情况下真构建了稠密点云,只能膜拜Google大法了。


ARCore Google与Apple正面叫板_第1张图片

相比之下,ARCore能够实现的光源感知和点云功能,ARkit实现不了——如果ARKit是Metaio(苹果之前收购的德国公司)做的话,采用特征法的可能性大,这样就无法实现光源感知,点云理论上是能构建,但只能是稀疏的,基本上就是一堆点,看不出什么。
至于ARCore整体的工程是SLAM还是VIO,个人的偏向还是VIO更有可能。就如ARKit一样,使用的场景更偏向于手机端,在场景不大的情况下,VIO作为定位方案已经绰绰有余,而且更加节省计算资源。

小结

虽然Google正式与Apple在AR战场上叫板了,不过个人觉得鉴于安卓混乱的市场,有些手机甚至没有陀螺仪,我对它的推广表示一些担忧。不过话说回来,Apple跟Google都在AR上发力,AR增强现实的春来就是真的来了。

参考文章:http://www.sohu.com/a/168298525_114778

你可能感兴趣的:(ARCore Google与Apple正面叫板)