augmented-reality - 如何在 ARKit 中获取 "light-invariant" `capturedImage`?

标签 augmented-reality arkit

我想拼接 ARKit ( ARFrame.capturedImage ) 提供的多个背景图像。 (我知道有更好的方法来完成这项任务,但我使用的是我的自定义算法。)
问题是实时流没有锁定曝光,因此场景中物体的颜色取决于我如何定位 iPhone。例如,这会导致墙壁在每一帧中具有非常不同的颜色(从白色到灰色到褐色),这会在将图像拼接在一起时产生可见的条纹。
我注意到 ARKit 为每个 lightEstimate 提供了 ARFrame ambientIntensity ambientColorTemperature 属性。还有 ARFrame.camera.exposureOffset 属性。
这些属性是否可以用于“标准化”捕获的图像,以便场景中对象的颜色在整个时间内保持大致相同,并且最终不会出现严重的 strip ?
附言我确实需要使用 ARKit,否则我会使用我自己的设置(例如锁定曝光)基于 AVFoundation API 设置我自己的 session 。

最佳答案

由于所有提到的属性都不可设置,因此您不能直接使用它们来修复 panorama-360 中每个拼接图像的强度。
但是您可以计算每帧的强度和曝光的差异,然后将乘数用于 CoreImage过滤器。例如,曝光差异就是这么简单:

Frame_02_Exposure / Frame_01_Exposure = 0.37
然后将结果用作 CIExposureAdjust 的输入乘数筛选。

关于augmented-reality - 如何在 ARKit 中获取 "light-invariant" `capturedImage`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63270413/

相关文章:

ios - 仅用一个旋转轴将 SCNNode 定位在相机前面

ios - 在 ARKIT 中为 3D 对象添加阴影

iOS-表面检测

opencv - 在学术项目中使用增强现实图书馆

ios - 如何判断检测到哪个引用对象?

swift - 如何在 ARKit 2/SceneView 中扩展线段

ios - SceneKit 在多个透明平面上延迟阴影

Android studio com.google.ar.sceneform.ux.ArFragment 与 androidx.fragment.app.Fragment 不兼容

c# - 如何在 Android Image Gallery 中保存从 unity 拍摄的照片?

ios - 如何缩放 SCNNodes 以适应边界框