一、立体匹配
1.1 原理
找出两张图像的对应关系,根据三角测量原理,得到视差图;在获得了视差信息后,根据投影模型可以得到原始图像的深度信息和三维信息。
1.2 步骤
-
匹配代价计算: 一般是通过计算左右两图对应像素3个通道的灰度值差来决定匹配代价的,常用的就是基于像素点匹配代价计算,一般有AD, SD,TAD,基于区域的匹配代价计算一般有SAD,SSD, STAD。匹配代价计算会生成一个disparity space image,也就是DSI。这个DSI是一个三维的空间,也就是每一个视差,得到一张代价图。假如视差范围是0~16,则会得到17幅代价图。视差搜索范围就是MiddleBurry网站上的stereo pair值,也就是说在视差范围内(比如0-16)搜索匹配代价,得到17张匹配代价图,然后找到匹配代价最小的对应的视差值就是此像素对应的视差。
-
**代价聚合:**其实就是一个滤波的过程,对每一幅代价图进行聚合,最简单的就是采用boxfilter。第一步代价计算只是得到了图像上所有孤立像素的视差值,但是这些时差值都是孤立的,引入了过多噪声,比如一片区域的视差值都是10,可是引入噪声后就会导致这一片的视差值都不一样,那么就需要一个滤波的过程,也就是我们所说的局部立体匹配方法,即采用窗口卷积达到局部滤波的目的。
-
计算视差:常用的方法就是WTA算法(局部),对于图像中的同一个点,选出17幅代价图中匹配代价最小的那张图,该幅图对应的视差值就选取为最终的视差。或者在全局立体匹配中采用能量函数的方法,分为数据项和平滑项,数据项其实就是代价计算,平滑项就是代价聚合,只不过窗口大小是整幅图像,也可以试试如果把平滑项前面的系数lamda设为0,那么得到的结果和单纯代价计算的局部立体匹配是一样的。
-
视差精化:对得到的视差进行优化的过程,如:左右一致性检测、区域投票等;这步就是做如遮挡处理,中值滤波,左右一致性检测等,都能使最后的是视差图提升1%左右,立体匹配最关键的步骤仍然是代价计算和代价聚合步骤。
二、NCC视差匹配
2.1 原理
对于原始的图像内任意一个像素点 ( p x , p y ) ( p x , p y ) ( p x , p y ) (p_x,p_y) (p_x,p_y)(p_x ,p_y) (px,py)(px,py)(px,py)构建一个 n × n n×n n×n的邻域作为匹配窗口。然后对于目标相素位置 ( p x + d , p y ) ( p x + d , p y ) ( p x + d , p y ) (p_x+d,p_y) (p_x+d, p_y)(p_x+d,p_y) (px+d,py)(px+d,py)