本文虽然命名为对比文档,但是对比意义不是特别强烈的内容仍不在少数——如三种3D技术的误差等部分——换言之,本文旨在通过对比的形式对三种3D技术的特点和特性进行总结。资料主要来自于网络,部分相关参考文献会附在文末。由于时间有限,有些图留有多重水印,如有侵权,请联系作者删除。作者学习时间为一周左右,浏览的文献及网络资料繁多,参考文献难免有缺漏。本文系作者学习总结,用于个人学习记录,读者若有见解,请不吝赐教。
目录
1、三种3D技术的概述
1.1 ToF
ToF(Time of flight),即飞行时间法,是一种深度测量的方法,精度为厘米级。ToF的原理简单,模块体积小,测量距离范围较大,抗干扰能力较强。ToF测距方法属于双向测距技术,它主要利用信号在两个异步收发机(Transceiver)(或被反射面)之间往返的飞行时间来测量节点间的距离。
根据调制方法的不同,ToF可以分为两种:脉冲调制(Pulsed Modulation)和连续波调制(Continuous Wave Modulation)。脉冲调制是直接测量飞行时间,因此也称为dToF(direct);连续波调制是通过相位差来计算飞行时间,因此也称为iToF(indirect)。
1.2 双目
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。
双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来。这个差别称作视差(Disparity)图像。
双目立体视觉测量方法具有效率高、精度合适、系统结构简单、成本低等优点,非常适合于制造现场的在线、非接触产品检测和质量控制。在运动物体(包括动物和人体形体)测量中,由于图像获取是在瞬间完成的,因此立体视觉方法是一种更有效的测量方法。双目立体视觉系统是计算机视觉的关键技术之一,获取空间三维场景的距离信息也是计算机视觉研究中最基础的内容。
1.3 结构光
结构光技术就是使用提前设计好的具有特殊结构的图案(比如离散光斑、条纹光、编码结构光等),然后将图案投影到三维空间物体表面上,使用另外一个相机观察在三维物理表面成像的畸变情况。如果结构光图案投影在该物体表面是一个平面,那么观察到的成像中结构光的图案就和投影的图案类似,没有变形,只是根据距离远近产生一定的尺度变化。但是,如果物体表面不是平面,那么观察到的结构光图案就会因为物体表面不同的几何形状而产生不同的扭曲变形,而且根据距离的不同而不同,根据已知的结构光图案及观察到的变形,就能根据算法计算被测物的三维形状及深度信息。
一般而言,结构光可以分为线扫描结构光和面阵结构光,前者本文不做讨论。对于面阵结构光来说,大致可分为两类:随机结构光和编码结构光。随机结构光较为简单,也更加常用。通过投影器向被测空间中投射亮度不均和随机分布的点状结构光,通过双目相机成像,所得的双目影像经过极线校正后再进行双目稠密匹配,即可重建出对应的深度图。随机结构光本文不做讨论,因为和普通双目算法较为相似,一些额外的考虑就是是否给相机加装滤光片、光斑的密度要到什么程度等硬件和光学的问题了。
这里主要讨论编码结构光。编码结构光可以分为两类:时序编码和空间编码。
2、三种3D技术的组成部分
由于技术的发展和创新,我们很难对三种3D技术的组成部分进行死板僵硬的框定。本部分仅为了解三种技术提供参考。
2.1 ToF
TOF相机采用主动光探测,通常包括以下几个部分:
1、照射单元
照射单元需要对光源进行脉冲调制之后再进行发射,调制的光脉冲频率可以高达100MHz。因此,在图像拍摄过程中,光源会打开和关闭几千次。各个光脉冲只有几纳秒的时长。相机的曝光时间参数决定了每次成像的脉冲数。
要实现精确测量,必须精确地控制光脉冲,使其具有完全相同的持续时间、上升时间和下降时间。因为即使只是1ns的偏差即可产生高达15cm的距离测量误差。如此高的调制频率和精度只有采用精良的LED或激光二极管才能实现,一般照射光源都是采用人眼不可见的红外光源。
2、光学透镜
用于汇聚反射光线,在光学传感器上成像。不过与普通光学镜头不同的是这里需要加一个带通滤光片来保证只有与照明光源波长相同的光才能进入。这样做的目的是抑制非相干光源,减少噪声的同时防止感光传感器因外部光线干扰而过度曝光。
3、成像传感器
TOF的相机的核心。该传感器结构与普通图像传感器类似,但比图像传感器更复杂,它包含2个或者更多快门,用来在不同时间采样反射光线。因此,TOF芯片像素比一般图像传感器像素尺寸要大得多,一般100μm左右。
4、控制单元
相机的电子控制单元触发的光脉冲序列与芯片电子快门的开/闭精确同步。它对传感器电荷执行读出和转换,并将它们引导至分析单元和数据接口。
5、计算单元
计算单元可以记录精确的深度图。深度图通常是灰度图,其中的每个值代表光反射表面和相机之间的距离。为了得到更好的效果,通常会进行数据校准。
2.2 双目的计算流程
双目由于主动双目、被动双目等区分,结构方面的组成有所差别。如主动红外双目包括IR投射器和IR相机,被动双目则包括两个可见光摄像头等等(其实主动双目可以视作传统被动双目和结构光的结合)。下面简要介绍双目立体视觉的计算流程。
图2.1 双目计算流程图
如图2.1所示,首先通过双目标定获取相机的内参外参(标定两个相机各自的内参和两个相机间的外参), 经过校正(包括畸变矫正和极线校正,在查阅资料过程中发现矫正和校正经常替换,但在《学习OpenCV》P430页里,有这样的解释:区分一下“矫正 undistortion”和“校正 rectification”。矫正:在数学上去掉透镜畸变。校正:数学上将图像排列整齐。
个人认为矫正即“将错误的去除或改正”,校正即“将混乱地重新排列或者通过计算使其有序化”。)在经过双目标定后,我们得到了两个相机之间的位姿关系即旋转矩阵R和平移矩阵T。在进行双目三维视觉最核心的步骤立体匹配之前,通过极线校正,我们一般通过立体校正,把两个不共面的相机调整成共面行对准,即把两个相机的成像平面调整到同一个平面上,保证两辅助像的每一行是相对应的。这样就会把二维搜索问题变成一维搜索问题,所以在寻找匹配关系时,只需要在两幅图像的同一行进行搜索就可以,同时也可把求解深度的问题转化成求解视差的问题。然后通过求解同一个点在两幅图像上横坐标的差值,来确定这个点在真实空间的深度。最常见的校正方法即Bouguet校正算法:将标定的外参数矩阵R和T分解为左右相机各旋转一半的旋转和平移矩阵R1,T1与R2,T2。分解的原则是左右图像重投影造成的畸变最小,左右视图共视面积最大,如图2.2所示。
图2.2 Bouguet算法示意图
经过校正则是立体匹配,立体匹配是通过已知外参的相机,根据极线约束寻找真实空间中的同名点,然后再对这个空间上的点进行深度估计。立体匹配包括匹配代价计算、代价聚合、视差计算和视差优化/后处理。
立体匹配的相关信息(图片文章等)见图2.3和图2.4。
图2.3 立体匹配的四个部分
图2.4 立体匹配的分类
立体匹配相关知识在以下博文里有相当详细的整理:
双目立体匹配入门【一】(理论)_凳子花❀的博客-CSDN博客_双目相机匹配
2.3 结构光
3D结构光的整个系统包含结构光投影设备、摄像机、图像采集和处理系统。其过程就是投影设备发射光线到被测物体上,摄像机拍摄在被测物体上形成的三维光图形,拍摄图像经采集处理系统处理后获得被测物体表面数据。在这个系统中,当相机和投影设备相对位置一定时,投射在被测物体上的光线畸变程度取决于物体表面的深度,所以在拍摄图像中可以得到一张拥有深度的光线图像。
3D结构光的根本就是通过光学手段获取被拍摄物体的三维结构,再通过这一信息进行更深度的应用。
3、三种3D技术的原理对比
3.1 ToF
ToF的基本原理是通过连续发射光脉冲(一般为不可见光)到被测物体上,然后接收从物体反射回去的光脉冲,通过探测光脉冲的飞行(往返)时间来计算被测物体离相机的距离。
图3.1 飞行时间法深度测量基本原理示意图
下面根据ToF的两种类型分别对ToF的原理进行介绍。
3.1.1 dToF(脉冲调制)
脉冲调制直接根据脉冲发射和接收的时间差来测算距离。图3.2是脉冲调制测距的示意图:
图3.2 脉冲调制测距示意图
脉冲调制方案的照射光源一般采用方波脉冲调制,这是因为它用数字电路来实现相对容易。接收端的每个像素都是由一个感光单元(如光电二极管)组成,它可以将入射光转换为电流,感光单元连接着多个高频转换开关(下图的G0,G1)可以把电流导入不同的可以储存电荷(图3.3S0,S1)的电容里。
相机上的控制单元打开光源然后再关闭,发出一个光脉冲。在同一时刻,控制单元打开和关闭接收端的电子快门。接收端接收到的电荷被存储在感光元件中。
图3.3 接收端单元电路图
然后,控制单元第二次打开并关闭光源。这次快门打开时间较晚,即在光源被关闭的时间点打开,同时新接收到的电荷S1也被存储起来。具体过程如图3.4所示。
图3.4 脉冲波形图
因为单个光脉冲的持续时间非常短,此过程会重复几千次,直到达到曝光时间。然后感光传感器中的值会被读出,实际距离可以根据这些值来计算。
记光速为c,tp为光脉冲的持续时间, S0表示较早的快门收集的电荷, S1表示延迟的快门收集的电荷,那么距离d可以由如下公式计算:
最小的可测量距离是:在较早的快门期间S0中收集了所有的电荷,而在延迟的快门期间S1没有收集到电荷,即S1=0。代入公式会得出最小可测量距离d=0。
最大的可测量的距离是:在S1中收集了所有电荷,而在S0中根本没有收集到电荷。然后,该公式得出d=0.5×c×tp。因此最大可测量距离是通过光脉冲宽度来确定的。例如,tp=50ns,代入上式,得到最大测量距离。
需要注意的是,当反射时间超过光脉冲持续时间时,上述测量方法失去作用。因此我们设置了快门S2对此问题进行解决,如图3.5所示。而当反射时间在光脉冲持续时间内时,快门S2也能对环境光的影响进行测试。
图3.5 直接测量法
优点:
测量方法简单,响应较快;
由于发射端能量较高,所以一定程度上降低了背景光的干扰。
缺点:
发射端需要产生高频高强度脉冲,对物理器件性能要求很高;
对时间测量精度要求较高;
环境散射光对测量结果有一定影响。
3.1.2 iToF(连续波调制)
实际应用中,通常采用的是正弦波调制。由于接收端和发射端正弦波的相位偏移和物体距离摄像头的距离成正比(见后面推导),因此可以利用相位偏移来测量距离。图3.6是连续波调制原理示意图:
图3.6 连续波调制测距示意图
其实相移偏移来测量距离相位差的方法与四步相移法的推导基本一样。下图是发射的正弦波和接收的正弦波的示意图:
图3.7 发射接收正弦波示意图
连续正弦波调制测量方法,具体的推导过程如下。序号1-9对应下图的公式1-9。
- 假设发射的正弦信号s(t)振幅是a,调制频率是f
- 经过时延△t后接收到的信号为接收r(t),衰减后的振幅为A,强度偏移(由环境光引起)为B
- 四个采样时间间隔相等,均为T/4
- 根据上述采样时间可以列出四个方程组
- 从而可以计算出发射和接收的正弦信号的相位偏移△φ
- 据此可以根据6中公式计算物体和深度相机的距离d
- 接收信号的衰减后的振幅A的计算结果
- 接收信号强度偏移B的计算结果,反映环境光
- A,B的值间接的反应了深度的测量精度,深度测量方差可以用公式9近似表示。
优点:
相位偏移(公式5)中的(r2-r0)和(r1-r3)相对于脉冲调试法消除了由于测量器件或者环境光引起的固定偏差;
可以根据接收信号的振幅A和强度偏移B来间接的估算深度测量结果的精确程度(方差);
不要求光源必须是短时高强度脉冲,可以采用不同类型的光源,运用不同的调制方法。
缺点:
需要多次采样积分,测量时间较长,限制了相机的帧率;
需要多次采样积分,测量运动物体时可能会产生运动模糊。
3.2 双目
在介绍双目测距之前,先看看通用单目相机模型
图3.8 通用单目相机模型示意图
通用相机模型中,X,Y,Z为世界坐标系,(x,y,z)为相机坐标系,根据x三角形相似性:
双目测距原理:三角测量/视差原理
图3.9 视差示意图
图3.10 双目测距原理图
图3.11 双目测距原理图
深度Z的计算如下所示:
3.3 结构光
3.3.1 时序编码
图3.12 时序编码结构光原理图
如图3.12,时序编码结构光即为在一定时间范围内,通过投影器向被测空间投射一系列明暗不同的结构光,每次投影都通过相机进行成像。假设共有n张影像,并设被阴影覆盖的部分编码值为1,未被覆盖的部分编码值为0。此时,每个像素都对应唯一一个长度为n的二进制编码,双目影像搜索匹配像素的问题就变成了查找具有相同编码值的像素。如果双目图像已经进行了极线校正,那么所投影的结构光只需要在x方向上不具有重复性即可。
如图3.13中,红框内的像素的编码为0110,转化为十进制则为6。此时,只需要在右图相同行上检索编码值为6的像素即可。图3.13编码方式称为二进制码(binary code),每段区域不断的进行二分下去直至投影的编码宽度等于相机的像素宽度即可。对于宽度为1024的图像,最少需要10张影像来进行编码。
(图3.13中右边三列编码有误,应该为0010,0001,0000)
图3.13 编码转换图
图3.14 Binary Code
图3.15 Gray Code
Binary Code 的一种改进为Gray Code. Gray Code比Binary Code具有更好的鲁棒性,它使得相邻两个像素相差1bit。Gray Code的详细介绍和其与Binary Code之间的转换可以参考Wikipedia。
注意观察即可看到gray code和binary code在前几行像素上的不同
转换算法:
自然,除了使用二进制的0-1编码之外,还可以使用更多颜色层级的编码。假设使用了M种不同的灰度层级进行编码,则拍摄N张影像可以得到包含M^N个条带的影响。如下图中M = 3,N = 3时图中有27条条带。
图3.16 三张影像三种灰度层级的二维编码
由以上的介绍也可以得出时序编码结构光的优缺点:
优点:
高精度。
缺点:
只适用于静态场景;需要拍摄大量影像。
3.3.2 空间编码
为满足动态场景的需要,可以采用空间编码结构光。前面谈到了随机结构光,就是不带编码信息,投影随机纹理,而这里讨论的空间编码结构光特指向被测空间中投影经过数学编码的、一定范围内的光斑不具备重复性的结构光。由此,某个点的编码值可以通过其邻域获得。其中,包含一个完整的空间编码的像素数量(窗口大小)就决定了重建的精度。
3.3.2.1 德布鲁因序列 (De Bruijn) 序列
德布鲁因序列(维基百科)B(k,n) 表示用k个符号(如二进制,k = 2)来表示长度为的循环编码,n为一个编码值的长度。举例:最简单的,k = 2时,采用二进制符号(0, 1),编码值的长度n = 2,可以得到一个长度为的循环序列:[0,0,1,1]。此时,我们得到4个长度为2的不同的编码:[0,0],[0,1],[1,1],[1,0]。此,某种结构光就可以按照该德布鲁因序列进行编码。而获得的结构光影像中,以上4个像素的编码为[0,0,1,1],通过一个大小为2的滑动窗口(假定一个结构光光斑或光束的宽度是一个像素)即可获取每个像素的编码值。同样地,如果是经过极线校正的双目图像,只需要搜索对应的行即可,此时只要求编码在x轴上不具备重复性。此时的结构光就是竖直条带状的。
当然,为了提高编码效率,也可以使用灰度图、彩色图像等比0-1编码具有更多可能编码值的投影方式。例如,对于RGB影像,采用二进制编码(即某种颜色只有 有、无 两种状态),则共有 种颜色组合,去除(0,0,0),还剩下7种颜色。因此k = 7,n = 3,这样就可以获得一个长度为343的条带序列。对于这个序列,唯一的约束为:相邻的条带不能为同样的颜色。否则对于解码算法来说很容易造成误差。下图展示了只使用5种颜色(k = 5, n = 3)的结构光序列:
图3.17 5种颜色的结构光序列
3.3.2.2 二维空间编码
德布鲁因序列是一种一维编码,可以将之扩展到二维空间中,使得对于一个x * y大小的二维空间,其中一个w * h大小的子窗口所包含的编码值在这整个二维编码序列中只出现一次。
图3.18 4 * 6M-arrays序列
如上面中的4 * 6的M-arrays序列中,每个2 * 2大小的窗口所包含的编码值都是唯一的。
同样也可以利用RGB信息来进行二维编码,有相关算法来产生一些伪随机二维编码。如在下图中,左边展示了一个6 * 6大小的二维矩阵,子窗口的大小为3 * 3。算法首先在左上角的3 * 3子窗口中随机填入各种颜色;然后一个3 * 1大小的滑动窗口移动到右端第一个空白处,并随机填入3中颜色;在填入生成的随机颜色前,算法会先验证子窗口的编码的唯一性能不能得到保证,若不能,则会重新生成3中随机颜色;如此循环,只是在竖直方向上滑动窗口的大小变为1 * 3,直至将整个6 * 6矩阵填满。右图则是该算法产生的某种伪随机二维编码的示例。
图3.19 RGB二维编码
通过以上对空间编码的讨论,也可以看出空间编码结构光的一些优缺点:
优点:
无需多张照片,只需要一对影像即可进行三维重建。可以满足实时处理,用在动态环境中。
缺点:
易受噪声干扰;由于反光、照明等原因可能导致成像时部分区域等编码信息缺失;对于空间中的遮挡比较敏感;相较于时序编码结构光精度较低。
4、三种3D技术的误差
4.1 ToF
4.1.1 系统性误差
图4.1 镜头畸变原理图
镜头畸变,包括径向畸变和切向畸变,其中径向畸变来自于透镜的形状,可根据畸变的形式再分为枕形畸变和桶形畸变;切向畸变则来自于整个相机的组装过程,例如镜头与sensor不是非常平行(一般切向畸变较小)。
图4.2 镜头畸变示意图
FPPN固定相位模式噪声,也被称为梯度误差。Sensor是按照阵列排布的,这带来了一个问题,就是信号到每一个阵列上的信号的时间是不同的,这就导致每个Pixel之间都存在一定量的时延。除此之外,曝光跟参考信号有一定的时延,这会导致整体会有向上的偏差。因此FPPN其实是由两部分,即整体向上偏差和每个Pixel之间的局部差异组成的。
图4.3 Sensor与Pixel的示意图
图4.4 Pixel之间的局部差异
图4.5 整体向上偏差
循环误差,由于调制波不是完美正弦波,甚至是方波导致。由于所有的信号都可以表示为谐波和基波的组合,因此可以将误差表示为基波与数个谐波之和的形式:
图4.6 循环误差波形图
温漂,vcsel的driver信号随着温度的升高而产生时延从而导致测量距离的变换。一般来说,温漂和测距误差存在线性关系。
杂散光,当环境中存在阻挡物时信号会产生叠加,使相位发生改变。可以通过点扩散函数(PSF)进行滤除补偿。点扩散函数描述了一个成像系统对一个点光源(物体)的响应。PSF的一般术语就是系统响应,是一个聚焦光学系统的冲击响应。通过快速傅里叶变换和反快速傅里叶变换还原原始图像。
4.1.2 非系统性误差
Flying pixel(飞点),对于深度图像而言,处于前景的物体边缘与背景是相连的,由于pixel size较大,同一个pixel可能会接收到背景反射和前景反射回来的信号,且两个信号发生融合,导致物体点云边缘存在连续的线性噪声。这种线性噪声相对于点云来说一般间距较大,因此可以通过对随距离变化的阈值进行筛选,当距离超过阈值时认为是噪声,当距离小于阈值时认为是有效信息。
幅度相关的误差,不同高度的曝光(或者积分时间)会导致测距的精准度问题(更偏向于精度)。可通过自动曝光功能进行改善。
多设备间干扰,当同时有多个设备进行工作时,多设备的投射光源对各个设备存在干扰。目前可以通过时分复用或者空间复用的方案解决。
多径干扰,类似与系统性误差里的杂散光,不同的是,杂散光是来自于镜头跟sensor之间的反射,而多径干扰则通常来自于外部目标物体之间的多次反射,反射产生的多余距离会造成较大的干扰。目前尚未有较好的解决方案。
运动模糊,无论是直接测量法还是间接测量法,都需要4次以上的曝光。在这个过程中,如果物体运动达到一定的速度时,边缘可能会出现检测异常的情况,称为运动模糊。
物体材质/反射率对测距产生影响:主要反映在接收的信号强度过强或者过弱时导致测距产生误差。
环境光干扰,当外界光照较强的时候,会对测距的影响较大。即当外界环境光较强时,无法判断哪一部分是光源发射出的。
4.2 双目
当焦距与baseline固定不变时,深度数据Z的误差仅与计算视差d有关。
计算视差d与距离Z的关系,得到matlab仿真图如下:
图4.7 视差d与距离Z的关系图
如图4.8所示,两个射线的夹角越小,距离越远,误差越大。
图 4.8双目测距误差原理图
4.3 结构光
系统的测量误差主要来源为系统建模误差、标定误差和图像处理误差。由于文章篇幅有限,详细分析、推导计算过程可见:
许丽,曾丹,张之江.结构光测量系统误差分析[J].光电工程,2008(10):26-31+97.
5、三种3D技术的优缺点
5.1 ToF
5.1.1 直接测量法
- 对光信号的稳定性要求较高;
- 计算量少;
- 通过调整脉冲周期可以提高测量距离;
- 数据抖动性相对较大;
- 需要较快(~10ns)高性能的全局曝光。
5.1.2 间接测量法
- 对光信号的稳定性要求相对宽松;
- 计算量相对较大;
- 需要通过多个频率计算扩大测量距离;
- 数据抖动性相对较少。
5.2 双目
5.2.1 优点
- 被动双目由于其被动特性,硬件功耗较低;
- 近距离精度为毫米级,2m内误差在千分之五(5mm);
- 硬件要求低,成本低;
- 室内室外都可使用;
- 分辨率可达到较高的2k分辨率;
5.2.2 缺点
- 对环境光照非常敏感。光线变化导致图像偏差大,进而会导致匹配失败或精度低;
- 不适用单调缺乏纹理的场景。双目视觉根据视觉特征进行图像匹配,没有特征会导致匹配失败;
- 计算复杂度高。该方法是纯视觉的方法,对算法要求高,计算量较大;
- 基线限制了测量范围。测量范围和基线(两个摄像头间距)成正比,导致无法小型化。
5.3 结构光
5.3.1 优点
- 由于结构光主动投射编码光,因而非常适合在光照不足(甚至无光)、缺乏纹理的场景使用。
- 结构光投影图案一般经过精心设计,所以在一定范围内可以达到较高的测量精度。
- 技术成熟,深度图像可以做到相对较高的分辨率。
5.3.2 缺点
- 室外环境基本不能使用。这是因为在室外容易受到强自然光影响,导致投射的编码光被淹没。增加投射光源的功率可以一定程度上缓解该问题,但是效果并不能让人满意。
- 测量距离较近。物体距离相机越远,物体上的投影图案越大,精度也越差(想象一下手电筒照射远处的情景),相对应的测量精度也越差。所以基于结构光的深度相机测量精度随着距离的增大而大幅降低。因而,往往在近距离场景中应用较多。
- 容易受到光滑平面反光的影响。
6、后处理
6.1 ToF
大部分系统性的误差可以通过标定的技术手段进行解决。标定可以将误差进行量化和模型化,将误差总结为具体数值或者模型,运用在后期的计算跟校正中。
6.1.1 深度数据校正
根据标定的参数,在深度计算当中对其进行补偿。具体流程需要于标定流程一致。
6.1.2 滤波
由于Flying Pixel或数据抖动等原因,点云图像成像不够完美。对此我们通过滤波进行处理。
6.1.3 自动曝光
自动曝光算法的目标是通过适当的方式调整曝光时间以控制图像振幅,避免出现过曝和曝光不足的情况,特别是控制饱和区域的振幅,使其保持在恒定的范围内(对应非系统性误差中幅度相关的误差)。
利用参考幅度和当前帧实际测量的幅度的比值(gain)计算下一帧的建议曝光值。公式如下:
图6.1 自动曝光流程图
6.1.4 HDRZ
通过设置长短曝光帧+深度数据融合实现HDRZ功能。根据不同TOF方案的功能实现长短曝光的方法可分为:前后帧长短曝光和同一帧长短曝光。
一般情况下,长曝光采用固定曝光,短曝光采用自动曝光,保证在近距离的情况下不会产生过曝的情况。最后将长曝光和短曝光的深度数据进行融合,从而达到HDRZ的目标——既能拍摄到近距离的目标也能拍摄到远距离的目标。
6.2 双目
左右一致性检测(Left-Right Consistency (LRC) check)
LRC check的作用是实现遮挡检测(Occlusion Detection),得到对应的遮挡图像。
具体做法:根据两幅输入图像,分别得到两幅视差图。对于左图中的一个点p,求得的视差值是d1,那么p在右图里的对应点应该是(p-d1),(p-d1)的视差值记作d2。若|d1-d2|>threshold,p标记为遮挡点(occluded point)。
遮挡填充(Occlusion Filling)
得到了二值的遮挡图像,之后是为所有黑色的遮挡点赋予合理的视差值。对于左图而言,遮挡点一般存在于背景区域和前景区域接触的地方。遮挡的产生正是因为前景比背景的偏移量更大,从而将背景遮盖。
具体赋值方法是:对于一个遮挡点p,分别水平往左和往右找到第一个非遮挡点,记作pl、pr。点p的视差值赋成pl和pr的视差值中较小的那一个。d(p)= min (d(pl),d(pr)) (Occluded pixels have the depth of the background)。
中值滤波(Median Filtering)
这种简单的Occlusion Filling方法在遮挡区域赋值方面效果显著,但是对初始视差的合理性和精度依赖较高。而且会出现类似于动态规划算法的水平条纹,所以其后常常跟着一个中值滤波步骤以消除条纹。
完整、详细内容及图片见以下链接:
立体匹配的后续处理:左右检测+遮挡填充+中值滤波_lphbtm的专栏-程序员ITS401
https://its401.com/article/lphbtm/17953347
7、资料与参考文献
在网络上找到了一些总结对比图,与参考资料放在这一部分。
7.1 ToF的部分参考资料
Tof原理及应用_爱钻研的小铭的博客-CSDN博客_tof原理
https://blog.csdn.net/qq_42676511/article/details/120723131
径向误差、偏心误差和薄棱镜误差_Hali_Botebie的博客-CSDN博客
https://blog.csdn.net/djfjkj52/article/details/121122845
ToF技术全解读_图像算法AI的博客-CSDN博客_tof定位算法
7.2 双目的部分参考资料
双目立体匹配入门【一】(理论)_凳子花❀的博客-CSDN博客_双目相机匹配
双目立体匹配_知也无涯12345的博客-CSDN博客_双目立体匹配
https://blog.csdn.net/m0_37604894/article/details/81020846
车载双目ADAS(五):双目视觉技术的原理、组成、应用与挑战_bobuddy的博客-CSDN博客_双目视觉避障原理
双目立体视觉(一) 基本原理和步骤_CodeIsCoding的博客-CSDN博客_双目立体视觉
机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)_啦啦啦1231213的博客-CSDN博客_双目摄像头视差
双目视觉原理(万字总结,包含Halcon代码)_happylife_mini的博客-CSDN博客_双目视觉
深入浅出讲解主动双目立体视觉 – 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/158051630
7.3 结构光的部分参考资料
三维视觉之结构光原理详解_小白学视觉的博客-CSDN博客
结构光3D成像原理及应用_小白学视觉的博客-CSDN博客
https://blog.csdn.net/qq_42722197/article/details/119770044
结构光的误差分析- CSDN搜索
3D-camera结构光原理_wujianming_110117的博客-CSDN博客
7.4 三种3D技术对比的部分参考资料
TOF、RGB双目、结构光优劣分析_hjwang1的博客-CSDN博客
3D相机技术调研(飞行时间TOF+双目+结构光)_PKing666666的博客-CSDN博客_结构光3d相机
https://panjinquan.blog.csdn.net/article/details/119649838
文章出处登录后可见!