《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

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3