《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法

2024-01-11 16:32

本文主要是介绍《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《3D ISP核心技术算法》系列文章是上海数迹智能科技有限公司结合自身多年来在3D ISP技术方向上的积累,推出的系列型科普文章。系列文章将对影响3D成像质量的主要问题逐一进行讲解,深入浅出的介绍问题出现的原理机制和解决方法,旨在促进3D视觉从成像到感知的应用工程实践,真正实现慧视界、智未来。

本篇文章作为该系列的第一篇文章,将对iToF在复杂场景下的最主要环境误差源之一的多径误差进行介绍。

多径是无线通信领域中一个常见术语,具体含义是指无线电信号从发射天线经过多个路径抵达接收天线的传播现象。各分量相互叠加,会导致信号的衰落和相移,对系统造成不良影响[25]。ToF向场景中主动发射(近)红外光,传感器接收场景中对应目标的反射光信号,利用(近)红外光的飞行时间计算深度。由于光在场景中会发生多次反射与折射,每个像素接收的信号包含多个路径的反射光,面临相似的多径问题,导致深度测量的误差。

目前的ToF设备根据测量原理的不同,分为dToF和iToF两类。虽然多径现象是发生在场景中,但是由于测量原理的不同,多径对两类ToF的影响不一样,呈现出来的误差形式也不一样。dToF每个像素对曝光时间内所有接收信号的飞行时间做直方图统计,多径虽然会改变直方图的分布,从理想的单峰分布变成多峰分布。但是直达径信号对应的柱仍然会是峰值,dToF的多径消除方法只需要排除多个干扰项。对于iToF而言,每个像素把所有的接收信号当做一个合成信号处理,经过一系列非线性计算得到一个深度值,无法从该深度值中直接恢复出正确深度值。所以,iToF的多径消除更加困难。此外,由于dToF的研究起步晚,市面上的产品较少,dToF的数据获取比iToF更难。因此,目前关于多径的研究大多数都是基于连续正弦波调制的iToF(CW-ToF)。

本文围绕iToF展开,介绍多径的影响、成因以及消除方法。在多径的消除方法部分,我们主要调研了2011-2018年关于多径的论文。由于篇幅限制,在文中展开介绍了其中具有代表性的4篇。感兴趣的读者可以根据本文最后的参考文献自行查阅,有问题可以联系我们,一起交流,共同探讨。

 

首先,让我们先来了解一下理想的iToF成像原理。

iToF相机向目标场景发射调制光,并由传感器接收目标场景反射回来的调制光,通过计算发射光和反射光的相位差来计算每一个像素点到相机的距离。理想的iToF成像满足如下假设,发射信号在场景中只经过一次反射,传感器的接收信号只包含一次反射光和环境光,如式(1)所示。 

 其中,\alpha是接收信号的幅值,\beta是环境光分量,\Delta \varphi就是发射信号和接收信号的相位差。由于相位差无法通过一次测量直接获得,常见的相位差求解方法是Four-Sampling-Bucket算法[1]。该算法首先计算参考信号和接收信号的自相关 h\left ( \tau \right ),参考信号是发射信号经过相位移动τ后得到的信号。

然后对 \tau 采样,取3-4个值就可以计算出相位差。通常是四次采样, 

得到相位差之后,结合式(4),就可以计算深度:

前文提到,理想的iToF成像假设发射信号在场景中只经过一次反射。然而,实际的成像过程中,光线会在场景中发生多次反射和折射,这也就意味着实际接收信号可能包含若干(甚至无数)个子信号,

其中, \varphi _{0} 项对应的是直达径(direct path),剩下的 \varphi _{i} 项则是对应的间接路径(indirect path),也就是多径干扰成分。通过四次采样计算得到的相位差也不再是式(3)所描述的,而是如式(6)所示: 

 最简单的多径模型是Two-path模型,反射信号中只有一个直达径和一个多径分量,如式(7)所示:

多径现象在ToF测量中始终存在。

这篇关于《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594980

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到