处理来自靠近边缘的 TrueDepth 相机缓冲区的伪影的正确方法是啥?

Posted

技术标签:

【中文标题】处理来自靠近边缘的 TrueDepth 相机缓冲区的伪影的正确方法是啥?【英文标题】:What's the right way to handle the artifacts from TrueDepth camera buffer near the edges?处理来自靠近边缘的 TrueDepth 相机缓冲区的伪影的正确方法是什么? 【发布时间】:2020-08-07 21:54:53 【问题描述】:

我正在遵循https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/streaming_depth_data_from_the_truedepth_camera 的指南。它使用AVCaptureDepthDataOutput() 从前置摄像头传输深度数据。

但是,两条边的数据有误。在纵向模式下,它将是上边缘和右边缘。在逆时针旋转的横向中,它将位于左侧和上方。 这是它的外观示例。这是来自教程,但我修改了一些代码。请注意,我确实将实际距离打印为数字,以确保它不是视频/颜色渲染的错误。 https://drive.google.com/file/d/1AGFHAZypmHz9136T02ufedz-X3Ct94Kq/view?usp=sharing

如果它只是将 3D 数据转换为 2D 数据的必要工件,我可以接受。但我正在寻找的是裁剪图像的“正确”方法,以便 2D 深度缓冲区在边缘没有这些伪影。我怎么知道作物的距离?我只是试验一下吗?如果是这样,我怎么知道它在所有设备上都一样?

另一个问题是,如果物体离相机太近,距离会被解释为最大距离而不是最小距离。这是预期的吗?

【问题讨论】:

【参考方案1】:

关闭“平滑深度”,缓冲区将更加清晰和一致(例如,小于 50 像素)。可以安全地假设边缘附近的任何值都不准确,因此插入一些类似于 50 的量,您应该尝试看看什么最适合您。

尽可能接近报告为最大值的值,您应该检查 float.isNanfloat.isInfinite 并过滤掉这些值。有一个minimum range 无法检测到比该距离更近的物体。

【讨论】:

以上是关于处理来自靠近边缘的 TrueDepth 相机缓冲区的伪影的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何统一使相机的边缘变灰

ARKit3 如何使用 TrueDepth 相机进行人脸跟踪和其他人的面部网格?

想要Mac电脑上的面部识别码?MacOS Big Sur暗示TrueDepth摄像头即将推出

使用 iPhone TrueDepth 传感器检测真人脸与照片?

OpenYurt 联手 eKuiper,解决 IoT 场景下边缘流数据处理难题

OpenYurt 联手 eKuiper,解决 IoT 场景下边缘流数据处理难题