Computer vision Google ARCore域模型示例

Computer vision Google ARCore域模型示例,computer-vision,augmented-reality,arcore,android-sdk-2.3,android-augmented-reality,Computer Vision,Augmented Reality,Arcore,Android Sdk 2.3,Android Augmented Reality,我试图阅读并理解GoogleArcore的域模型,尤其是包。目前,此SDK处于“预览”模式,因此没有关于如何使用此API的教程、博客、文章等。甚至谷歌本身也建议只阅读源代码、源代码注释和Javadocs来了解如何使用API。问题是:如果你还不是计算机视觉专家,领域模型对你来说会有点陌生 具体而言,我感兴趣的是了解以下课程之间的基本区别和正确用法: 根据Anchor的javadoc: “描述真实世界中的固定位置和方向。若要停留在物理空间中的固定位置,此位置的数字描述将随着ARCore对

我试图阅读并理解GoogleArcore的域模型,尤其是包。目前,此SDK处于“预览”模式,因此没有关于如何使用此API的教程、博客、文章等。甚至谷歌本身也建议只阅读源代码、源代码注释和Javadocs来了解如何使用API。问题是:如果你还不是计算机视觉专家,领域模型对你来说会有点陌生

具体而言,我感兴趣的是了解以下课程之间的基本区别和正确用法:

根据
Anchor
的javadoc:

“描述真实世界中的固定位置和方向。若要停留在物理空间中的固定位置,此位置的数字描述将随着ARCore对该空间的理解的提高而更新。使用getPose()获取此锚的当前数字位置。此位置可能会随时更改update()”被称为,但永远不会自发地改变。”

所以锚定有一个姿势。听起来像是你在摄像机中可以看到的东西上“放一个锚”,然后ARCore跟踪这个锚,并不断更新它的
姿势
,以反映它在屏幕上坐标的性质

Pose
的javadoc:

“表示从一个坐标系到另一个坐标系的不变刚性转换。正如所有ARCore API提供的那样,Poses始终描述从对象的局部坐标系到世界坐标系的转换(见下文)……这些变化意味着每一帧都应被视为在一个完全独特的世界坐标系中。”

所以听起来像是
姿势
是相机“当前帧”唯一的东西,并且每次更新帧时,所有锚定的所有姿势都会重新计算?如果不是,那么锚点、其姿势、当前帧和世界坐标帧之间的关系是什么?那么姿势到底是什么呢?“姿势”是否只是存储矩阵/点数据的一种方式,以便可以将锚点从当前帧转换为世界帧?还是别的什么

最后,我看到帧、姿势和锚之间有很强的相关性,但还有点云。我能在
com.google.ar.core
中看到的唯一一个使用这些的类是
Frame
PointClouds
看起来是(x,y,z)-坐标,第四个属性表示ARCore对x/y/z分量实际上是正确的“信心”。所以如果一个锚有一个姿势,我会想象一个姿势也会有一个点云,代表锚的坐标&这些坐标的置信度。但是Pose没有点云,所以我一定完全误解了这两个类模型的概念


问题 我在上面提出了几个不同的问题,但它们都归结为一个简单的、可回答的问题:


帧、锚定、姿势和点云背后的概念有什么区别?何时使用它们(以及用于什么目的)?A
Pose
是一种结构化转换。它是从一个坐标系(通常是对象局部坐标系)到另一个坐标系(通常是世界坐标系)的固定数值变换

表示世界上物理上固定的位置。它的
getPose()
将随着对世界认识的变化而更新。例如,假设你有一座建筑,外面有一条走廊。如果你绕着走廊走了一圈,传感器漂移会导致你无法在开始时的相同坐标上结束。但是,ARCore可以(使用视觉特征)检测到它与启动它的空间相同。当这种情况发生时,它会扭曲世界,使您的当前位置和原始位置对齐。作为变形的一部分,还将调整锚的位置,使其保持在相同的物理位置

由于这种失真,相对于世界的
姿势
应仅在返回该姿势的帧期间有效。下一次你只要调用
update()
,这个姿势下的世界可能已经被重塑了,这可能是无用的。如果需要将某个位置保持在比帧长的位置,请创建一个
锚定点
。只需确保
removeAnchors()
anchors不再使用,因为每个活动锚点都有持续的成本

一个
捕获当前状态,并在两次调用
update()
之间进行更改

PointCloud
s是世界上检测到的一组三维视觉特征点。它们位于自己的局部坐标系中,可以从
Frame.getPointCloudPose()
访问。希望获得比平面检测更好的空间理解的开发人员可以尝试使用点云来了解更多有关3D世界结构的信息

这有用吗

使用以下链接,您可以找到并回答有关
锚定
姿势

此外,这里还有一个关于什么是
点云的信息

点云
是世界空间中点(通常为黄色)的可视云,表示点的可靠位置,用于在真实世界对象上进行3D跟踪
。点云如下所示:

以下是谷歌对点云的看法:

点云
包含一组观察到的3D点和置信值。这个类实现了
Closeable
,通常应该在Java中使用resources或Kotlus
Frame frame = session.update();

try (PointCloud pointCloud = frame.acquirePointCloud()) {
    // Accessing point cloud data.......
}