我想拼接 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/