ARKit逐帧更新ARCamera的许多内部(和外部)参数。我想知道它是否也考虑到了Radial Lens Distortion (就像在ARKit不使用的AVCameraCalibrationData类中),并为后置iPhone和iPad摄像头适当地修复了视频帧的失真(distort/undistort操作)?
众所周知,当我们将未失真的3D对象放置在被镜头扭曲的真实场景中时,Radial Lens Distortion对六自由度姿态估计的精度有很大的影响。
如果ARKit中的Lens Distortion's math可以在API中找到,在哪里可以找到?
发布于 2018-09-11 18:51:34
虽然没有明确说明,但我确信ARKit正在校正非线性镜头失真。镜头失真(和反向失真)查找表在iOS11中存在,可以通过AVCameraCalibrationData获得,但ARKit不会公开它们,大概是因为您已经在处理已校正的坐标,所以不需要它们。
每个设备模型的失真模型参数是否相同(即每个iPhone 7的值完全相同),这是一个有趣的问题。我不能访问同一型号的多部手机,但对于有这种能力的人来说,这一点应该不难理解。
来源
例如: https://github.com/verebes1/ARKit-Multiplayer QR标记检测
在苹果公司的Vision的帮助下,现在可以识别摄像机视频馈送中的QR标记,并在其处于视野中时对其进行跟踪。该框架为我们提供了QR标记方角在屏幕坐标系中的坐标。
QR标记姿态估计
在检测到QR标记后,您可能想要做的下一件事是从它们获取相机姿势。
要执行QR标记姿态估计,您需要知道相机的校准参数。这是摄像机矩阵和失真系数。每个相机镜头都有独特的参数,例如焦距、主点和镜头失真模型。找到摄像机内部参数的过程称为摄像机校准。摄像机校准过程对于增强现实应用非常重要,因为它描述了输出图像上的透视变换和镜头失真。为了实现增强现实的最佳用户体验,应该使用相同的透视投影来实现增强对象的可视化。
最后,校准后得到的是相机矩阵:一个由3x3个元素组成的矩阵,其中包含焦距和相机中心坐标(也称为内部参数),以及失真系数:一个由5个或更多元素组成的向量,用于模拟相机产生的失真。大多数iDevices的校准参数都是相同的。
通过标记角点的精确位置,我们可以估计3D空间中相机和标记之间的转换。此操作称为从2D-3D对应进行姿态估计。姿态估计过程找到相机和对象之间的欧几里德变换(仅由旋转和平移分量组成)。
C用来表示相机的中心。P1-P4点是世界坐标系中的三维点,p1-p4点是它们在相机图像平面上的投影。我们的目标是使用内部矩阵和图像平面上的已知点投影(P1-P4)找到3D世界中已知标记位置(p1-p4)和相机C之间的相对变换。
OpenCV函数用于计算QR标记变换,其方式是最小化重新投影误差,即观察到的投影的imagePoints和投影的objectPoints之间的平方距离之和。估计的变换由旋转(rvec)和平移分量(tvec)定义。这也称为欧几里得变换或刚性变换。最后,我们得到了旋转四元数和QR标记的平移矩阵。
集成到苹果的ARKit
最后一部分是将有关QR标记姿势的所有信息整合到由ARKit创建的3D场景中。ARKit使用视觉惯性里程计(VIO)来精确跟踪它周围的世界。VIO将相机传感器数据与CoreMotion数据融合。这两个输入允许设备以高精度感知它如何在房间内移动,而无需任何额外的校准。所有的渲染东西都是基于苹果的Metal和苹果的SceneKit。
为了以适当的方式在QR标记上呈现SceneKit的节点,我们需要从OpenCV获得的四元数和平移矩阵创建QR标记的模型矩阵。下一步是将QR标记的模型矩阵乘以SceneKit场景虚拟摄像机的变换矩阵。因此,我们可以看到一个自定义节点(我们项目中的Axes节点),当QR标记在iPhone摄像头的视野中时,它会重复QR标记在现实世界中的所有移动,如果不是,它会停留在最后更新的位置,以便我们可以检查它。
https://stackoverflow.com/questions/52025727
复制相似问题