我需要通过AVDepthData
从相机到相机图像中的点距离。据我所知,AVDepthData
有两种准确性:相对和绝对,后者是与实际距离相对应的准确度。
我似乎无法以绝对准确度生成AVDepthData。它有可能吗?
答案 0 :(得分:0)
AVDepthData
是一个通用模型对象,用于表示来自各种可能来源的深度图,包括基于视差的差异推断,基于飞行时间的深度推断,由第三方摄像机记录的数据,或者由3D渲染引擎合成的数据。因此,它可以表示和描述比您当前使用的设备可以捕获的更多类型的数据。
(它就像拥有支持每组件10位颜色的图像格式:只是因为UIImage
或其他一些API可以告诉你它持有一个宽色图像并不意味着你有一个可以拍摄这些图像的相机。)
更具体地说......你没有说明你是否在iPhone X上使用前置或后置摄像头,但这对于你能捕获的深度图有多重要。
builtInDualCamera
,iPhone X用于后置摄像头(与iPhone 7/8 Plus一样)推断差异 - 这与深度并不完全相同,但相关 - 通过分析两个相机图像之间的视差偏移。这种技术不会产生深度的绝对测量,但由于视差与深度成反比,您可以知道哪些点比其他点更深。 (使用cameraCalibrationData
你可以做一些数学计算,也许可以获得一些绝对深度的估计。)
builtInTrueDepthCamera
,其iPhone X(以及目前为止只有iPhone X)的前置摄像头可以通过飞行时间分析来测量差异或深度。 (还有<罢工>鲨鱼用毛毡激光束!)这种技术可以很好地产生绝对测量值,只要你能安全地假设光速。
使用哪种技术决定了您可以获得哪种测量方法,以及使用哪种技术取决于您选择的捕获设备。 (顺便说一下,有关这些技术如何在WWDC17 talk on capturing depth中发挥作用的大量信息。)
如果您正在寻找绝对参考帧中的后置摄像头深度测量值,您可能最好查看ARKit - 这不会为每个像素获得准确的深度值,因为它取决于粗略的场景重建,但你可以得到的距离值是绝对的。