ARCore 中的相机校准(内在)参数

Posted

技术标签:

【中文标题】ARCore 中的相机校准(内在)参数【英文标题】:Camera calibration (intrinsics) parameters in ARCore 【发布时间】:2018-06-13 11:43:37 【问题描述】:

是否有任何方法可以从 ARCore 获取相机内在参数,类似于 ARKit 提供的方法?我试过使用 ImageMetadata 中的LENS_INTRINSIC_CALIBRATION,但显然这个常量实际上并不支持(我试过在 Pixel 2 上使用它)。

【问题讨论】:

在我的情况下也是如此。相机校准给出了一些不可靠的参数。 你能解释一下你想做什么吗?也许它只是有另一个名字...... @StevenMohr 在任何摄影测量应用程序中,相机内在函数都很重要。它包含焦距和与镜头和图像传感器相关的信息 我正在使用自定义计算机视觉库,本质上是在做 SfM 的变体。该库需要 2x3 矩阵(焦距和主点偏移)形式的相机内在函数。我可以从投影矩阵中得出近似值,但这不方便且容易出错。 Apple 的 ARKit 正是我所需要的。 @nbsrujan 我了解相机内在函数对于摄影测量的重要性,但如何将其转化为 ARCore。也许我应该问 DmitryA 他想要实现什么...... 【参考方案1】:

据我了解,这在 ARCore 中肯定不可用,尤其是因为焦距已锁定。我建议您在 ARCore github 上将此问题报告为一个问题,并让人们写下他们对该功能的支持,并希望它能够实现!

【讨论】:

谢谢,我注意到@nbsrujan 刚刚为此创建了一个问题。 太棒了。你介意在这里链接到这个问题吗?如果您觉得我提供了帮助,将不胜感激被标记为答案或其他提升。 :) 这里是问题的链接:github.com/google-ar/arcore-android-sdk/issues/112 我正在使用的特定第三方库确实需要相机校准矩阵来处理原始图像数据并构建自己的点云。然后使用 ARCore 呈现结果。 @Dmitry 很有趣。我很想知道你在做什么!【参考方案2】:

有可能。但这些参数只能获取(就像在 ARKit 中一样)。

ARCore 的类CameraIntrinsics 提供有关设备摄像头物理特性的信息,用于摄像头图像 (CPU) 或纹理 (GPU)。 CameraIntrinsics 是一个长寿命的对象,CameraIntrinsics 的属性可能会在每次调用 Session.update() 时更新。

public class CameraIntrinsics

【讨论】:

【参考方案3】:

从 1.3 release 开始,相机内部函数已添加到 ARCore。

【讨论】:

【参考方案4】:

现在您可以使用投影矩阵来获取fx, fy, cx, cy。 但是失真是不可能获得的,虽然有可能图像已经没有失真。

【讨论】:

【参考方案5】:

尝试了一些受here 描述的第一步启发的东西,我能够在 ARCore APK 中找到受支持设备的内在参数。您需要获取 apktool 并在下载 ARCore APK(本例中为 v1.2)的同一文件夹中运行它:

apktool -q d -s -r ARCore_1_2.apk -o ARCore_1_2

这将创建一个名为 ARCore_1_2 的文件夹,然后转到 ./lib/arm64-v8a 并将 libdevice_profile_loader.so(例如 7zip)解压缩到一个新文件夹中以方便使用。然后,使用文本编辑器在新创建的文件夹中打开文件.rodata。该文件的大部分内容都被格式化为 XML,只需查找您正在使用的手机的名称,您就会在 tag 中找到内部参数。也有一些IMU标定数据和extrinsics,但不清楚具体是怎么用的。

我自己没有测试过参数,不过过几天会做...

【讨论】:

【参考方案6】:

其实 LENS_INTRINSIC_CALIBRATION在pixel 2中是支持的,你只需要确认你的APK可以访问摄像头。您可以通过进入设置手动授予您的应用权限。

【讨论】:

以上是关于ARCore 中的相机校准(内在)参数的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV中的相机失真内外参不失真图像相机校准

相同相机的内在参数相同?

计算内在相机参数时获取复数

相机校准期间的不同平面

iPhone 5s 相机校准参数

使用数码相机进行相机校准