【问题标题】:Details about iphone arkit planeDetection关于 iphone arkit planeDetection 的详细信息
【发布时间】:2018-01-10 04:59:44
【问题描述】:

我想从计算机视觉的角度了解如何检测平面以及为什么 Arkit 不能检测垂直表面。

【问题讨论】:

    标签: computer-vision arkit


    【解决方案1】:

    地平面检测的工作方式如下。使用基于特征的视觉惯性里程计执行场景的稀疏 3D 重建(这意味着使用视觉运动与来自潮间带传感器的信息相结合来估计相机姿势)。 3D 重建中的点(也称为地图)对应于在两个或多个相机图像中检测到的特征点。从这个稀疏重建中,通过找到所有近似共面的重建点来建立地平面。最有可能使用基于 RANSAC 的平面拟合来解决此问题。其工作原理是随机抽取一小组特征点(通常为 3 或 4 个),找到最接近这些点的平面方程,然后测试所有其他点是否靠近拟合平面。该过程重复多次(通常为数百次),直到找到适合大量特征点的平面。该库中假设该平面是地平面(不是墙),因此任何检测到的具有强倾角的平面都会被拒绝。它可以使用板载陀螺仪传感器来做到这一点。仅支持地平面的原因是它们对应于 AR 的最常见用例(将虚拟对象放置在地平面上),但将来几乎肯定会支持其他几何表面。

    【讨论】:

    • 非常感谢您的回答。它有很大帮助。但是,我会假设平面将恰好是平滑且缺乏特征的地方,因此没有足够的 3D 点。他们还能用 RANSAC 恢复飞机吗?
    • @fireman 特征不必是 3D 结构。 VIO 和类似算法中使用的“特征点”只是具有足够细节/对比度的小像素区域,可以在后续帧中识别。因此,带有可见木纹的光滑桌面或瓷砖地板等为 VIO 和平面检测提供了充足的细节。此外,像 RANSAC 这样的技术允许人们选择多大程度的容错或误差仍能产生积极的结果,因此厚绒地毯甚至蓬乱的草坪草等表面都可以被识别为平面。
    • @rickster 这是有道理的。谢谢。这可能是 ARkit 无法检测到墙壁的原因之一?
    • 不知道。我想这不是他们是否可以检测墙壁的问题,而是他们是否可以足够准确地检测不同的垂直平面方向以使其值得作为公共 API 提供。
    • 建筑物的内墙倾向于均匀地涂上单一颜色,没有太多纹理细节。因此很难使用图像特征来检测它们。相比之下,诸如桌面或户外地面之类的地平面往往具有更好的纹理细节。他们可能会限制 API,因为计算墙平面还不够强大,因此会让用户感到沮丧。我想补充一点,还有其他方法可以使用背面深度传感器检测墙平面。这些传感器可以在室内很好地工作,例如 Google 的 Project Tango,但 iPhone 中没有这种传感器。