双目立体匹配步骤
双目立体匹配可划分为四个步骤:匹配代价计算、代价聚合、视差计算和视差优化。
Step1 匹配代价计算
匹配代价计算的目的是衡量待匹配像素与候选像素之间的相关性。两个像素无论是否为同名点,都可以通过匹配代价函数计算匹配代价,代价越小说明相关性越大,是同名点的概率也越大。
每个像素在搜索同名点之前,往往会指定一个视差搜索范围D(Dmin~Dmax),视差搜索时将范围限定在D内,用一个大小为W*H*D的三维矩阵C来存储每个像素在视差范围内每个视差下的匹配代价值。矩阵C通常称为DSI(Disparity Space Image)。
匹配代价计算方法主要有,
基于像素的代价计算:
灰度绝对值差(AD, Absolute differences)
截断灰度绝对值之差(TAD,truncated absolute differences)
基于区域的匹配代价计算:
灰度绝对值差之和(SAD, sum of absolute differences)
归一化相关系数(NCC, Normalized Cross-correlation)、互信息(MI, Mutual Information)、Census变换(CT, Census Transform)方法等。
step2 代价聚合
代价聚合的根本目的是让代价值能够准确的反映像素之间的相关性。上一部匹配代价计算只会考虑局部信息,通过两个像素邻域内一定大小的窗口内的像素信息来计算代价值,容易受影像噪声影响,特别是弱纹理或重复纹理区域,这个代价值可能无法准确反映像素之间的相关性,也就是真实同名点的代价值非最小。
而代价聚合是建立邻接像素之间的联系,以一定的准则,如相邻像素应该具有连续的视差值,来对代价矩阵进行优化,这种优化是全局的,每个像素在某个视差下的新代价值都会根据其相邻像素在同一视差值或附近视差值下的代价值来重新计算,得到新的DSI,用矩阵S表示。
实际上代价聚合类似于一种视差传播步骤,信噪比高的区域匹配效果好,初始代价能够很好的反映相关性,可以更准确的得到最优视差值,通过代价聚合传播至信噪比低、匹配效果不好的区域,最终使所有影像的代价值都能准确反映真实相关性。常用的代价聚合方法有扫描线法、动态规划法、SGM算法中的路径聚合法等。
step3 视差计算
视差计算即通过代价聚合之后的代价矩阵S来确定每个像素的最优视差值,通常使用赢家通吃算法(WTA, Winner-Takes-All)来计算,如下图所示,即某个像素的所有视差下的代价值中,选择最小代价值所对应的视差作为最优视差。这意味着聚合代价矩阵S的值必须能够准确的反映像素之间的相关性,也表明上一步代价聚合步骤使立体匹配中极为关键的步骤。
step4 视差优化
视差优化的目的是对上一步得到的视差图进一步优化,改善视差图的质量,包括剔除错误视差、适当平滑以及子像素精度优化等步骤,一般采用左右一致性检查(Left-Right Check)算法剔除因为遮挡和噪声而导致的错误视差;采用剔除小连通区域算法来剔除孤立异常点;采用中值滤波、双边滤波等平滑算法对视差图进行平滑;另外还有一些有效提高视差图质量的方法如鲁棒平面拟合(Robust Plane Fitting)、亮度一致性约束(intensity consistent)、局部一致性约束(locally consistent)等也常被使用。
由于WTA算法所得到的视差值是整像素精度,为了获得更高的子像素精度,需要对视差值进行进一步的子像素细化,常用的子像素细化方法是一元二次曲线拟合法,通过最优视差值为子像素视差值。如下图所示。
局部匹配算法的步骤一般包括匹配代价计算、代价聚合和视差计算三个步骤,全局算法则包括匹配代价计算,视差计算,与视差优化三个步骤,半全局算法SGM则四个步骤都有。
版权声明:本文为CSDN博主「李迎松~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rs_lys/article/details/83302323