预处理主要有为极线矫正和图像质量增强。
首先极线矫正的意义是:降低算法的时间复杂度。
那么是什么算法呢,因为需要后续step1中的代价计算,而代价计算的前提条件就是找到物品上任意一点分别在左右视图中对应的像素坐标,如下图1所示.
图1.
其中P点为空间中物体的一个点Ol和Or分别为左右相机的光心。Pl和Pr为未极线矫正前,P点分别在左右视图上对应的像素点。
这里就该先简单讲解一下什么是代价计算:
最简单最暴力的代价计算方式就是从左图的第一个像素开始与右图所有像素相比较,找到最相近的两个像素,即为对应点。
设左(右)图像素为M ✖ N。那么需要历遍M ✖ N ✖ M ✖ N次(很简单暴力的表示了吧)。
怎么判断最相近呢,也就是计算每个像素之间的代价(代价计算)。最简单粗暴的代价计算就是
AD(像素灰度值差的绝对值),越接近0的越相似,代价也越低。当然还有其他代价计算方式,后续再说。
回到极线矫正:
现在知道若是如此暴力的破解的话~时间复杂度蹭蹭暴涨,为了提高效率,所以出现了极线矫正。
先看上面的图1,关注左视图的对极线,这就是表示在左视图这条直线上的点,与右视图上那条极限上的点是对应的,但是大家都是斜着的(不一定是斜的,但是他是状态不可知或者获得很麻烦的一条直线,故示意图表为斜线),比较起来相当麻烦。因此为了降低比较难度,采用坐标变换的方式,使左右极线相互平行并在同一行(极线矫正的意义)。
图2
黄色的平面即为极线矫正后的左右视图。
关键点:经历了后续的代价计算,聚合,视差估计,视差矫正后,真正想要深度的话,需要将最终的深度图通过矫正矩阵(左视图的)还原回去,此时才算真正可以使用的深度图。
极线矫正的方法如下几个:
小白视角之Bouguet双目立体校正原理 - 知乎 (zhihu.com)
(69条消息) Bouguet算法--源码解析_wangxiaoxiao111的博客-CSDN博客
(69条消息) 相机去畸变,以及双目平行校正----极线校正(二)————之双目平行校正详细过程_matlab极线校正_wangxiaokun671903的博客-CSDN博客
结合着看吧~我也有点懵逼老实说。看一个效果图(图3):
图3
图像质量增强:
立体匹配阶段需要根据左右图像点的相似度确定视差,因此图像的质量就很关键。由于实际环境中光照的影响和摄像机之间固有的差异性,获取的左右图像总会出现噪声和亮度差异,因此进行图像增强就很有必要。
现阶段我暂时会的只有一个:基于直方图均衡化的亮度校正,如图4、图5。
图4. 左视图源 右视图源
图5. 亮度矫正后的左视图 亮度矫正后的右视图
亮度矫正的参考文献:张晓玲,魏宗康.基于双摄像机的立体视觉图像预处理研究[J].导航与控制,2017,16(02):42-46+80.
一点点建议吧(之前搞的其他方向,这几天刚刚开始看立体匹配)~在没搞清楚这个方向的基础方法前还是不建议英语水平一般的同学直接开始看SCI。虽然中文期刊内容比较简单(水?),但是确实很适合入门看看~但是记得多看几篇对照着,有些还是比较乱搞的。