StereoVision--立体视觉
立体匹配:给两幅图去做对应点的匹配
一、数据集:(找到输入)
1.有哪些?
3种分别是,MiddleBury, KITTI,SceneFlow。
2.数据集的新旧?
kitti和middlebury是比较旧的数据集
Sceneflow数据集是比较新的数据集,是在CVPR 2016提出的
3.数据集各自适合的任务?
(1)MiddleBury
格式:
* 几十对
* 2964*1988 pixels
适合做的任务:
是一个室内高分辨率数据集
作评测。
(2)KITTI ( 2012/2015)
格式是:
1,489 x 784 pixels
1,489 training samples / 784 testing samples
训练样本数量为1,489 \times 784像素。
测试样本数量为1,489 \times 784像素。
其中训练数据集中约为65.4%的空间区域包含深度信息,
测试集中仅约65.4%的空间区域包含深度信息。
适合做的任务:
- 城市道路测试环境代表自动驾驶技术的重要评估基准
- 其中KITTI 2012和KITTI 2015两个版本最为常用
- 基于KITTI数据集开展性能评估
(3)Sceneflow
格式是:
* 960*540 pixels
* 39, 000 training/ 2, 000 testing
适合做的任务:
* 是一个大规模的合成数据集,用来训练深度立体匹配网络。做pre-train。
二、特征提取:
特征点:图像的角点、边和斑点的识别
提取特征点的方法比如SIFT,SURF,ORB
在OpenCV框架中,SIFT算法与dog detector的结合被广泛采用。其中狗检测器负责识别关键点的位置(即keypoints),而标准SIFT算法则负责提取这些特征的具体描述符。
该算法基于 Hessian 与 SURF 结合的方式进行设计。其中,Hessian 负责关键点的检测,SURF 刻画了关键点的特征。
ORB基于FAST与BRIEF相结合,在图像处理领域具有重要地位。 FAST被用来进行关键点检测, 而BRIEF则被用来描述关键点的特性。
速度上ORB>SURF>SIFT,SURF的鲁棒性(抗干扰能力)更好一些。
三、匹配代价计算:
1.计算
(1)定义了一个处理左右两幅图像中匹配像素点的函数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBpPrfbU-1637481847215)(https://www.zhihu.com/equation?tex=f(I_{L}(x%2Cy)%2CI_{R}(x%2Bd%2Cy)))] ,
这个区域是我们为左图中的每个像素点定义的一个特定区域,在右图中为该像素点寻找对应的视差位移位置。对于左图中的每一个像素点(x,y),我们将其在右图中的对应位置进行定位,并在此过程中计算出其相应的深度信息。
举个例子:我们设定视差搜索范围为0至16,并且假设对于匹配图像定义了视差的寻找范围为[d=0,16](见下文)。也就是说,在左图中的单个像素点I_L(x,y)对应于右图中的一个位置x+dx(其中dx\in[−16,−1,0,1,...,16]),那么其对应的匹配代价计算区域就是[x+dx-8,x+dx+8]区间内的所有位置。
同样的道理,在右图中与该像素点I_L(x,y)对应的匹配代价计算区域是[x+dx-8,x+dx+8]区间内的所有位置。
同样地,在左图中的单个像素点I_L(x,y)对应于右图中的一个位置x+dx(其中dx\in[−16,−1,0,1,...,16]),那么其对应的匹配代价计算区域就是[x+dx-8,x+dx+8]区间内的所有位置。
同样的道理,在右图中与该像素点I_L(x,y)对应的匹配代价计算区域是[x+dx-8,x+dx+8]区间内的所有位置。
同样的道理,在左图中的单个像素点I_L(x,y)对应于右图中的一个位置x+dx(其中dx\in[−16,−1,0,1,...,16]),那么其对应的匹配代价计算区域就是[x+dx-8,x+dx+8]区间内的所有位置。
同样的道理,在右图中与该像素点I_L(x,y)对应的匹配代价计算区域是[x+dx-8,x+dx+8]区间内的所有位置。
同样的道理,在左图中的单个像素点I_L(x,y)对应于右图中的一个位置$x + dx \in [-16,-9,-2,…,+9,+
在每个像素点上指定一个视差范围,并在此范围内确定或计算出最小的目标函数值即可确定该区域内的最佳匹配位置
而我们寻找的那个最小值所代表的外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 即是我们探讨的重点——视差问题(这一过程采用了Winner Take All: WTA策略进行处理)
(3)对左图每一个像素计算代价,然后找出最优,得到全图的视差图。
在图像处理过程中,在每个像素位置上计算从dmin到dmax范围内的匹配成本构成了DSI空间(disparity space image)。在该空间中定义的每一个元素C(x,y,d),其中x和y表示图像的空间坐标位置关系为行与列的关系,则视差值为深度差异的度量值),其数值反映了图像左半部分Ir(x, y)与右半部分It(x+d, y)之间的相似程度(即匹配成本)。
2.常见代价计算方式
第一步确定像素和像素之间的关联性称为匹配代价(matching cost)。例如,在图像处理中通常会使用以下几种类型的匹配成本:如基于灰度值的差分、基于边缘检测的梯度差以及基于区域特征的相似性度量等
- 绝对值差异(Absolute differences)
C(x,y,d) = \begin{vmatrix} I_{R}(x,y)-I_{T}(x+d,y) \end{vmatrix}
- 平方差 (Squared differences)
C(x,y,d)=(I_{R}(x,y)-I_{T}(x+d,y))^2
BT(Birchfied and Tomasi)
Opencv中SGBM采用了此方法
Census。 目前基于Census的变种使用非常广泛,效果也不错。
3.匹配评判标准?
做出来的视差图和ground truth进行比较:
bool d_err = fabs(d_gt-d_est)>ABS_THRESH && fabs(d_gt-d_est)/fabs(d_gt)>REL_THRESH;
代码解释
当当前视差值准确性较高时, 匹配成本会降低; 反之, 则会升高.
四、代价聚合:
1.原因:
基于点对之间的匹配容易受到噪声干扰,在一个窗口内对周围像素进行对比分析
2.怎样做?
两种方式:
在以下场景中,在一个3×3的窗口内,在此基础上完成成本整合其表达式为g(x)
首先对原始左图像一个像素点的聚合: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iHv7sxP-1637481847229)(https://www.zhihu.com/equation?tex=\sum_{(x_{L}%2Cy_{L})\in(W_{x_{L}}%2CW_{y_{L}})}^{}{g(x_{L}%2Cy_{L})})] (结果是窗口的中心点的值),
同理对右边的图像,在视差范围内做聚合: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYXETEVr-1637481847229)(https://www.zhihu.com/equation?tex=\sum_{(x_{R}%2Bd%2Cy_{R})\in(W_{x_{R}}%2CW_{y_{R}})}^{}{g(x_{R}%2Bd%2Cy_{R})})] 。
对处理之后的像素计算匹配代价,找到代价最小值:
该算法通过计算区域I_{L}与I_{R}之间的最小值与最大值之间的差异来实现最小化变化幅度d的过程
(2)以滤波的方式 ,直接对得到的视差图进行代价聚合:
在以下条件下进行累加:\sum_{(x_D,y_D)\in(W_{x_D},W_{y_D})^B}
其中...表示视差图坐标系中的像素点位置参数,在该系统中...即代表了通过匹配成本计算得到的像素值坐标参数
其中...表示视差图坐标系中的像素点位置参数,在该系统中...即代表了通过匹配成本计算得到的像素值坐标参数
最后两种方法的结果一致。
3、应用于
局部匹配(Local Matching) :
从一张图像中选择某一像素点及其邻域内的一个小区域,在另一幅图像中指定的一个区域内基于特定的标准来衡量两者的相似程度通过计算找到与目标区域最接近的配准块其中,在目标区域中与配准块相对应的那个像素即为目标像素的最佳匹配位置。
存在诸多问题,在图像处理领域中我们经常遇到各种挑战和困难。例如,在处理图像时我们会遇到很多问题和难点……
进一步优化的算法,如Box-filtering优化
常见的计算方式包括SAD(绝对差分总和)、SSD(平方差总和)以及归一化的互相关计算方式(Normalized cross correlation)等
全局匹配(Global):
会省略代价聚合
基于全局优化理论的方法对整体性进行研究,在此过程中构建了一个包含各子区域的能量模型,并对整个系统进行了系统化的分析。经过计算得出,在这一过程中能够获得准确且一致的视差估计值。
能量函数:
相关外链图片无法正常加载
优点是得到的结果比较准确,缺点是运行时间比较长,不适合实时运行
常用的算法包括图割、信念传播以及动态规划等方法。
半全局匹配(Semi-Global Matching)
- 将2维优化问题转换到1维,采用动态规划(DP)来优化
五、视差计算
在计算出聚合匹配代价之后,寻找到各个像素最优匹配点,完成匹配任务。
最常用策略WTA策略。胜者为王学习规则 WTA (winner-take-all)
算法
局部算法:直接优化代价聚合模型
全局算法:要建立一个能量函数,输出的是一个粗略的视差图。
六、视差优化:
对视差图的结果进行判断,发现可能的匹配错误情况并进行改正
视差图后处理:
- 左右一致性检测用于发现错误匹配情况。其原理是通过左边视图中的某个像素p寻找对应的右边视图中的q,并验证反过来q找到的匹配像素也应是p。如果不满足则视为错误匹配。
- 遮挡填补认为错误的匹配点是由于某个像素在另一个视图中被遮挡导致的问题。因此该区域应与邻近区域具有相同的几何特性。
- 中值滤波是对经过遮挡填补后的图像进一步处理的方法。通过对填补区域进行中值滤波消除伪影现象。
优化方法:亚像素求精+均值滤波
