立体匹配算法(局部立体匹配 全局立体匹配 深度学习立体匹配 )

Posted 一颗小树x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立体匹配算法(局部立体匹配 全局立体匹配 深度学习立体匹配 )相关的知识,希望对你有一定的参考价值。

前言

双目立体匹配的原理类似于人类的视觉原理:分别单独使用左眼和单独使用右眼去观察一个物体,该物体在两个视角中的相对位置会存在一定的偏移,人类视觉系统可以根据该偏移去判断该物体的距离远近。

同样的,在双目立体匹配中,只要能在两张图像中正确地找到匹配点,结合相机的内部参数和外部参数,就能精准地计算出空间点距离拍摄相机的距离。

目录

一、立体匹配简介

二、国内外研究现状

三、局部立体匹配算法 

3.1 像素匹配代价计算 

3.2 匹配代价聚合 

3.3 视差计算

3.4 视差图后处理

四、全局立体匹配算法 

五、深度学习立体匹配算法 

六、立体视觉方法评测

参考文献


一、立体匹配简介

双目立体视觉一般是指使用两个摄像机从不同的角度获取同一个场景的左右视图,然后使用双目立体匹配算法来寻找左右视图中的匹配像素点对,最后利用三角测量原理来还原三维空间物理点过程。其中双目立体匹配算法是最为核心的。 

立体匹配是一种根据平面图像恢复真实场景深度信息的技术,其做法是从两个或多个相同场景的图像中找出匹配点对,然后根据三角测量原理计算点对所对应的空间物理点的深度。

二、国内外研究现状

传统立体匹配方法基于计算机视觉的通用定律和人为观察设计的规则,对匹配像素的搜索进行指引。在判断某个像素和另一幅图像上的一个像素是否匹配时,根据同时考虑匹配情况的周围像素范围是局部的还是全局的,传统立体匹配方法又可分为局部立体匹配方法全局立体匹配方法,它们有着各自的优点和不足。

深度学习立体匹配方法。随着近几年可用训练数据集的增加和计算机性能的提升,基于训练学习的深度学习立体匹配方法得到迅速的发展,逐渐成为立体匹配技术研究的主流。

三、局部立体匹配算法 

局部立体匹配算法,整个过程可分为四个步骤:

  1. 像素匹配代价计算
  2. 匹配代价聚合
  3. 视差计算
  4. 视差图后处理

3.1 像素匹配代价计算 

对左眼视图中的像素,需要计算其与右眼视图中可能的匹配像素之间匹配代价,用来表征两个像素点的匹配程度。匹配代价越大,表示这两个像素的相似性越低,代表同一个实际空间物理点的可能性越小。

3.1.1  像素的灰度值 是一个像素最基本的信息,所以最简单的方法是使用两个像素的灰度绝对值灰度差平方值或者使用强度值采样作为两个像素的匹配代价。

但是在一副图像中会存在很多灰度值相同的像素点,仅仅使用单个像素的灰度值无法区分这些像素。此外,由于左右视图拍摄设备的参数、拍摄噪声不完全相同,拍摄时光照条件不同,一个物体在两幅图像中的成像也会显示不同的颜色,所以这类简单方法在很多情况下是无法正确衡量两个像素的不相似程度的,会导致大量的误匹配。 

3.1.2 图像上的位置信息;处于图像上的不同位置,其周围的像素集合不同,它们所构成的图像区域结构也就不同。

以一个像素为中心去取一个固定大小的窗口(称为特征窗口),然后把比较两个像素的匹配程度转换为比较两个像素其特征窗口图像块相似性,这样能更加准确地衡量两个像素在图像上表现出来的差异。这也是目前双目立体匹配中像素匹配代价计算的基本思路。 

3.1.3 匹配代价的方法

归一化互相关方法(Normalized cross correlation,简记为 NCC 算法)计算两个图像块之间的互相关性来代替像素的匹配代价,它对局部的灰度值线性变化具有不变性,抗噪声干扰能力较强,但容易受局部光照变化的影响,且匹配速度较慢;

基于互信息的代价计算方法(Mutual information-based,简记为 MI 算法)利用图像灰度值概率分布的信息去计算匹配代价,可以在一定程度上应对噪声干扰和辐射畸变的影响,但是它在无纹理区域和物体边界处的匹配效果差。其它还有很多关于 NCC 和 MI 算法的后续改进工作,在一定程度上使得这类方法可以有更大的适用范围。

基于转换的方法; 这类方法从局部像素灰度值的相对顺序不变的假设出发,认为即使是在光照变化强烈的情况下,单个像素的灰度值会发生变化,但该像素与周围像素的灰度值的大小关系是不变的。所以可以比较图像块内 各个像素灰度值的大小关系,把比较结果作为代表该图像块结构信息的特征,然后把比较两个像素的匹配程度转换为比较两个像素特征的相似性。

这类方法的代表算法有 CENSUS 算法、LBP 算法(Local binary pattern)、SLBP 算法(Support local binary pattern)、FEP算法(Fuzzy  encoding  pattern)、RSRT 算法(Robust  soft  rank  transformations)、ADCENSUS 算法(Absolute  difference  and  CENSUS),等等。长期的实践证明,这类算法在立体匹配中表现出的匹配效果优异,稳定性高。


3.2 匹配代价聚合 

图像上的像素通常与其周围的像素形成一个整体,如都是表示同一个物体,或者表示同一个物体的某部分,这个联系(匹配代价聚合 )使得一个像素会和周围的部分像素有着接近的匹配情况。从另外一个方面讲,一个像素的匹配需要受周围其它像素匹配情况的约束,不能孤立地考虑单个像素的匹配情况。 

局部立体匹配方法在考虑一个像素的匹配情况时,只考虑“该像素”周围一个小区域内其它像素的匹配情况。

对于左右视图中两个像素,通常会分别以这两个像素为中心取相同大小的窗口(称为聚合窗口),然后逐个计算两个窗口内处于相同位置的像素之间的匹配代价,并把这些匹配代价值累加起来作为最终的聚合匹配代价。如果聚合代价越小,则两个像素越有可能是匹配的。 

左右视图中的两个像素取形状大小相同的聚合窗口,这种做法默认假设了处于聚合窗口内的像素具有相同的视差值,即它们在实际空间中距离相机的距离相同。但是,实际情况中小窗口内的像素不一定具有相同的视差,所以关于代价聚合步骤,研究的主要工作在于如何选择合适的窗口进行聚合。

有一部分论文致力于找到与中心像素具有相同视差的像素:离中心像素较近的区域内,如果一个像素的灰度值与中心像素的灰度值相近,便认为该像素与中心像素的视差相同,在聚合时也只累加上这部分具有相同视差的像素的匹配代价;

另外一部分论文无论对待什么情况,都选取一个固定大小的矩形聚合窗口,只是在对窗口内各个像素的匹配代价进行累加时都附加上一个权重,该权重表示该像素与中心像素具有相同视差的可能性大小。如对聚合窗口施加一个高斯滤波权重后进行聚合、对聚合窗口进行引导滤波聚合、把聚合窗口拓展到整幅图像后加权聚合;还有一部分论文认为左边视图中的区域映射到右边视图时,需要先找到该区域所在真实三维空间中的平面法向量,再根据平面法向量进行映射。

3.3 视差计算

视差计算是在计算出聚合匹配代价之后,寻找到各个像素最优匹配点,完成匹配任务。局部立体匹配算法中的视差计算一般比较简单,采用 WTA 胜者为王理论(Winner-Take-All)直接进行视差寻找。

具体方法为:对于左边图中的一个像素,它在右图中有多个可能的匹配像素,逐个比较这些可能匹配像素与当前待匹配像素的聚合代价,其中有着最小匹配代价的像素即为寻找到的匹配像素

这一步骤的相关研究不多,比较出名的是 Patch Match 算法针对视差搜索效率进行的方法改进,其根据图像的连续性原理,用随机搜索的方法大大缩小了可能匹配像素的集合,极大提高了视差计算的效率。 

3.4 视差图后处理

视差图后处理是在初步得到视差图之后,对视差图的结果进行判断,发现可能的匹配错误情况并进行改正。

常用的后处理方法:左右一致性检测、遮挡填补、加权中值滤波。

左右一致性检测 用于发现错误匹配情况,它的原理是:左边视图中的某个像素p ,其找到的匹配像素为右边视图中的像素 q ,则反过来像素 q 找到的匹配像素也应该为 p ,如果不是则视为错误匹配。

遮挡填补 认为错误的匹配点是该像素在另外一个视图中被遮挡住的原因,所以该像素应该与邻近的背景像素具有相同的视差值。

中值滤波 是为了解决遮挡填补后产生的横向条纹问题,对填补像素的视差进行中值滤波。 
 

四、全局立体匹配算法 

全局立体匹配算法,分为三个步骤:

  1. 像素匹配代价计算
  2. 视差计算
  3. 视差图后处理

其中像素匹配代价计算视差图后处理部分与局部立体匹配方法的完全相同,与局部立体匹配方法不同的只在于同时考虑匹配情况的周围像素的范围

全局立体匹配算法认为图像的视差全局范围内是平滑的,对于相邻像素视差值相差较大的情况需要加以惩罚,据此构造全局匹配代价函数来代替局部算法中的代价聚合,整个图像上的所有像素同时进行视差值求解。匹配代价函数通常定义如下:

 E(d)  表示整幅图像中每个像素都各自取了一个视差 d 时的匹配代价;

  表示整幅图像所有像素的像素匹配代价之和;

 表示各像素点与其邻域内像素的视差值之间差值的惩罚项。 

全局立体匹配的难点在于如何最小化匹配代价函数的结果,比较典型的求解方法有:

  • 在特定路径下寻找最小匹配代价的动态规划算法
  • 基于马尔科夫场估计最优解的置信度传播算法
  • 采用“最大流”和“最小割”来优化代价函数的图割法
     

五、深度学习立体匹配算法 

深度学习立体匹配算法是基于训练学习的方法,其让神经网络从已知正确匹配结果的图像数据中学习匹配的规则,再将训练好的神经网络模型用于新图像的匹配预测。

主流的深度学习立体匹配方法借鉴传统局部立体匹配方法的研究成果,用局部立体匹配四个步骤的理论对神经网络的设计进行指导。其中一部分研究针对四个步骤中的某个步骤进行深度学习化,

  • 如通过一个小神经网络去计算两个图像块的匹配代价,用以代替局部立体匹配的第一个步骤;
  • 或者设计一个网络结构来完成类似 Patch Match 算法的工作,或者设计一个网络结构来进行代价聚合;
  • 或者通过一个神经网络去进行视差图的后处理工作;

另一部分研究直接让神经网络进行端对端的学习,输入两幅图像,直接得到最终的视差图,但所设计的神经网络通常划分为四个部分,其中每一个部分完成局部立体匹配中一个步骤的功能。

 在某些特定场景中,如果有足够的数据集进行训练学习得到一个可用模型,则深度学习立体匹配方法后续在相似场景中进行立体匹配工作时,通常可以取得优于传统立体匹配方法的效果,这是因为神经网络可以从数据中学习到更为细致的匹配规则,一些人为指引所不能体现的规则。

但是训练好的模型用于一个新场景时,如果没有足够多关于新场景的数据让其进行参数调整,则该网络匹配正确率将大大下降。这是目前众多深度学习立体匹配方法表现出来的通病,对训练数据有极大的依赖性,泛化性差。 

六、立体视觉方法评测

 ETH3D  ETH3D

Kitti Stereo http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo

Middlebury Stereo 3.0  https://vision.middlebury.edu/stereo/eval3/

参考文献

[1] 陈维翔.基于等级特征和多匹配代价融合的立体匹配算法研究 [D].华南理工大学,2020

[2] https://guo-pu.blog.csdn.net/article/details/115387812

本文只供大家参考和学习,谢谢。

以上是关于立体匹配算法(局部立体匹配 全局立体匹配 深度学习立体匹配 )的主要内容,如果未能解决你的问题,请参考以下文章

立体匹配算法

双目立体匹配GANet阅读笔记

ZYNQ 激光视觉SLAM算法移植与设计

理论恒叨立体匹配系列经典SGM:匹配代价计算之互信息(MI)

哪种立体匹配算法不是全局匹配算法

立体视觉入门指南:立体匹配