双目立体匹配原理及流程简介

立体视觉:

立体视觉:立体视觉是计算机视觉领域的一个重要课题,它的目的在于重构场景的三维几何信息.其应用包括移动机器人的自主导航系统,航空及遥感测量,工业自动化系统等。

双目立体视觉:

双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。

双目匹配其实求的是视差disparity, 视差和深度有一个计算公式:
disp = focal_length * base_line / depth 
其中disp为视差, focal_length是焦距, base_line是双目之间的距离, depth是深度	

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 步骤:
    1)摄像机标定:内参、外参、畸变参数
    2)双目图像的矫正: 畸变校正和立体矫正
    3)双目立体匹配: 得到视差图,深度图

双目相机标定及矫正: link

一.立体匹配算法分类:
  • 按照算法运行时约束的作用范围,即采用的最优化理论方法:
    • 局部立体匹配
      • 区域匹配: 可获取稠密视差图。缺点:受图像的仿射畸变和辐射畸变影响较大;像素点约束窗口的大小与形状选择比较困难,选择过大,在深度不连续处,视差图中会出现过度平滑现象;选择过小,对像素点的约束比较少,图像信息没有得到充分利用,容易产生误匹配。
      • 特征匹配: 可获得稀疏的视差图,经差值估计可获得稠密视差图。可提取点、线、面等局部特征,也可提取多边形和图像结构等全局特征。缺点:特征提取易受遮挡、光线、重复纹理等影响较大;差值估计计算量大
      • 相位匹配: 假定在图像对应点中,其频率范围内,其局部相位是相等的,在频率范围内进行视差估计
    • 全局立体匹配:
      • 动态规划:
      • 图割法:
      • 置信传播:
  • 按照生成的视差图:
    • 稠密匹配: 对于所有像素都能生成确定视差值
    • 稀疏匹配: 只选择关键像素点[通常为角点或者边缘点]计算视差值的方法称为稀疏匹配,该算法计算速度较快,但后续还需要通过插值算法计算缺失像素点的视差值,因此应用场景上有很大限制。
二、算法优缺点比较:
立体匹配算法名称 算法特性
基于动态规划的立体匹配算法 时间复杂度比较低,匹配精度不高,容易出现条纹现象
基于图割法的立体匹配算法 能解决动态规划出现的条纹现象,边缘匹配处理比较好,时间复杂度比较高
基于置信度传播的立体匹配算法 收敛性比较差,时间复杂度比较高,对于低纹理问题处理的比较好
基于区域的立体匹配算法 时间复杂度比较低,算法受环境影响比较大,弱纹理问题不能有效解决
基于特征的立体匹配算法 时间复杂度比较低,对于几何特征明显的图像匹配效果比较好
三、立体视觉基本原理:
1.从两个点或多个点观察同一物体,获取不同视角下的二维图像, 根据三角测量原理计算空间点在二维图像的位置偏差, 运用位置偏差进行三维重建。从本质上看,就是以最小的代价在两幅图像上精确的寻找相同的像素点,找到一条最优的线路。因此设计立体匹配算法就是构建一种优化模型,求解最优解的过程。
2.从各具特色的双目立体匹配算法框架来看,算法有效性主要依赖3 个因素,选择准确的匹配基元(决策变量)、寻找相应的匹配准则(目标函数和约束条件)、构建能够准确匹配所选基元的稳定算法(求解过程)。
3.构建一个完整的立体匹配算法应从4 个方面着手:
  1. 广义匹配基元与特征参数选择;
  2. 匹配方法及策略;
  3. 匹配代价优化标准;
  4. 视差提炼方式
3.1匹配基元:

在图像中有明显特征的点、线或者特定的区域,它是立体匹配算法的最小匹配单元;
匹配基元的选择,要考虑基元的稳定性、敏感性、可行性和能否表示图像。

  • 点:利用图像的局部特征信息作为匹配基元,表示一个像素,如像素灰度值,角点,边缘,卷积等;
    最基本的特征基元,所含有效的信息量相对较少;
    优点是对特征点定位准确、检测和描述像素点的信息更容易;
    采用点状特征作为基元的算法需要采用比较有力的约束准则及匹配策略来约束像素点;
    通常选择图像中的角点作为点状特征匹配基元。
  • 块:局部区域内所有像素的灰度、亮度特征值,对区域内所有像素进行变化
    如卷积、梯度变换和Censes变换等;
    块具有较好的全局属性,所含的信息量较为丰富,能够简单描述出事物的大致结构,在合适的图像中可以采用点状特征基元对场景进行三维重建;
  • 线:一般是像素灰度信息发生急剧变化的像素点集,最能体现边缘特征;
    检测边缘的算子如Sobel算子、Canny算子、Log算子和Prewitt算子等;
    线基元的特征介于点和块之间。
3.2立体匹配约束准则:

约束准则具有缩小匹配搜索的范围,降低误匹配,同时提高匹配效率的功能。

  • 极线约束:
    如图所示,
    三维空间的一个映射点,其匹配点必定在另一图像的极线上,理想情况下,匹配点对位于同一水平线上即坐标y值相同。故只需在对应的水平线上搜素匹配点,大大提高了匹配效率。

注:真正用来匹配的图一般都是矫正好的图,即极线会映射一条水平的直接,匹配点在一条水平线上,即坐标y相同

  • 唯一性约束:
    三维空间点至多只一个图像上的映射点(遮挡则没有映射点),匹配时左右图像上只有唯一一个匹配点。
    连续性约束:
    三维空间中物体表面是光滑的,匹配得到的视差图大部分情况下是连续且光滑变化的。一般使用较小的视差梯度降低匹配的搜索范围和待匹配点的数量以提高匹配速度。
  • 相似性约束:
    三维空间中的物体在不同视角下投影产生的匹配基元(点、块、线)必须要有相同或相似的属性。由于光照等因素的影响,相似性约束具有局限性。
  • 顺序一致性约束:
    三维空间中物体上的点的位置信息在映射到两幅图像上的位置顺序不会改变。
    这是不透明物体表面投影的几何学必然性。
  • 平滑性约束:
    假设三维空间中物体表面是平滑的,则视差图上除物体边界位置会有大的视差波动以外,其他位置上匹配视差的变化很小。
  • 左右一致性约束:
    左参考图像素点p点在右匹配图上的点是q,则右参考图上像素点q在左匹配图上是p。如果两次搜索的结果不对应,则该点不可靠。
    常用于遮挡区域的检测,然后再对遮挡点做一些其他处理。
  • 视差范围约束:
    两台摄像机之间具有一定的距离,在沿极线搜索时,搜索的范围应小于一定的阈值。视差范围约束限制了搜索的范围。
四、数据集:
  • 1.SceneFlow(Synthetic):
    Synthetic data
    39, 000 training/ 2, 000 testing
    960*540 pixels
    在这里插入图片描述在这里插入图片描述

  • 2.KITTI 2012/2015:
    Autonomous driving data (LIDAR)
    200 training / 200 testing (2012)
    1260*370 pixels

五、立体匹配步骤:
  • 1.匹配代价计算
C(x, y, z) = L(x + d, y) − R(x, y) 
L:双目立体视觉系统中的左视图, 
R:双目立体视觉系统中的右视图, 
x和 y 分别表示像素点的坐标值,
d像素点的视差值。

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

匹配代价计算的目的是计算参考图像上的每一个待匹配像素与目标图上每一个可能的视差范围内的候选像素之间的相关性,最后得到一个大小为W×H×D (D为视差搜索范围)的代价矩阵C(也叫视差空间图Disparity Space Image,DSI),代价计算算法是双目匹配的核心之一,不同的计算方式有不同的优势,有时候可以结合多种计算方法。

比如Census保留周边像素空间信息,对光照变化有一定鲁棒性,具有灰度不变的特性,AD边缘明显清晰,纹理重复结构效果还可以,不适用于噪声多的情况,低纹理区域效果不好,对颜色值敏感,AD和Census结构可以取一个折中。

常用的相关性计算方式有灰度绝对值差(AD,Absolute Differences)、灰度绝对值差之和(SAD,Sum of Absolute Differences)、归一化相关系数(NCC,Normalized Cross-correlation)、互信息(MI,Mutual Information)、Census变换(CT,Census Transform)法、Rank变换(RT, Rank Transform等方法来计算两个像素的匹配代价。

  • 2.代价聚合
    局部立体匹配算法匹配时的代价只考虑以匹配像素为中心一个小窗口之间的相关性,没有考虑全局信息,不适用于低纹理或者重复纹理,对噪声敏感,所以一般需要代价聚合让代价值能够准确的反映像素之间的相关性。
    每个像素在每个视差下的新代价值都会根据其相邻像素在同一视差值或者附近视差值下的代价值来重新计算,得到新的DSI,相当于更新了一下DSI。
    代价聚合其实是视差传播的步骤,因为相邻像素一般具有连续的视差值,考虑进来可以降低噪声的影响,也可以提升低纹理或重复纹理效果。
    常用的代价聚合方法有扫描线法、动态规划法、SGM算法中的路径聚合法等。
  • 3.视差计算
    通常采用‘赢者通吃’策略(WTA,Winner Take All),即在视差搜索范围内选择累积代价最优的点作为对应匹配点,与之对应的视差即为所求的视差。
  • 4.视差优化
    最后还需要对视差图做优化,包括左右一致性检查算法剔除因为遮挡和噪声而导致的错误视差;采用剔除小连通区域算法来剔除孤立异常点;采用中值滤波、双边滤波等平滑算法对视差图进行平滑,还有插值和亚像素增强等方法也常被使用。
六、立体匹配相似性测度:
匹配代价 公式 说明
绝对差值和SAD 在这里插入图片描述
截断绝对差值和STAD 在这里插入图片描述
差值平方和SSD 在这里插入图片描述
归一化互关系NCC 在这里插入图片描述 用于归一化待匹配目标之间的相关程度
census 在这里插入图片描述 计算左右图的二进制序列的海明距离,也可以用异或操作计算。seq[I§]函数根据p点像素值和p的支持窗口内像素值生成一个二进制序列。即根据p点周围像素和p点关系是生成,如大于p点则为1,小于为0,左右图都生成这样的序列,然后计算两个序列的汉明距离作为代价,这种方法充分考虑了图像局部相关的特性,而不是直接使用灰度值做差,具有抗光影畸变的作用,效率高、稳定性强
rank变换函数 在这里插入图片描述 对图像噪声和立体图像的亮度差异不那么敏感,且计算快,实时性好。

常用的census: 计算每个待匹配像素和周围像素的大小关系,当左图某像素和右图对应像素与周围像素大小关系一致时(比如都大于周围某像素),则diff + 1, 否则diff不变, 其实diff记录的是汉明距离。
AD也经常和census合用

转载自https://blog.csdn.net/qq_33278461/article/details/97446718

你可能感兴趣的:(#,CV与opencv,双目视觉)