校正映射
有了立体校正项,可以使用cv::initUndistortRectifyMap() 函数的独立调用来预计算左右摄像机视图的左右校正查找图
前向映射的目标图像将看起来像奶酪,应该采用后向工作模式:对于目标图像中每一个整体像素位置,查找源图像中的浮点位置,利用周围源像素的整型值插值出新的值
立体校正:原始图像->未畸变图像->标定->裁剪
立体匹配
opencv实现两种立体匹配算法,共享一个通用的对象接口
块匹配
使用小的“绝对值之差的和”(SAD)窗口来寻找左右立体校正图像之间的匹配点,只搜索两个图像之间的强匹配/强纹理
块匹配工作于无畸变,标定立体图像对
- 预过滤以使图像亮度归一化,并增强纹理
- 使用SAD窗口,沿着水平极线进行匹配查找
- 后置滤波以消除不良对应匹配
双目视界内部对应内置约束称为顺序约束,简单表示特征的顺序不能从左侧视图变化到右侧(翻译有问题?)搜索到的特征的顺序保持相同
匹配通常具有强烈的中心峰被副瓣所包围的特征,使用后过滤防止错误匹配
尝试纹理阙值,确保响应值低于某个最小值的匹配不予考虑
基于块匹配可能在物体边缘产生问题,因为匹配窗口捕获一侧的前景和另一侧的背景
这种导致同时产生大小视差的局部区域,称之为“散斑”,再散斑窗口上设置散斑检测器,这种方式的作用事将每个像素用作构建由可变范围漫水定义的连通组件的基础。仅当其在当前像素的某个范围内时,可变范围注满填充包括一个邻近像素。连通部分被计算比散斑窗口小就会被视为散斑
半全局块匹配
与BM算法不同之处在于使用Birschfield-Tomasi度量在子像素水平上进行匹配,第二点是SGBM试图基于所计算的深度信息来强制实现全局平滑约束
算法的关键要素指对任何可能的视差如何为每个像素分配成本,引入视察连续性假设的同时使用更小的块
在SGBM中,大窗口的替代方案是使用较小的窗口(以补偿噪声)结合路径,这些路径原则上从图像的边缘延伸到单个像素并且包括从边缘到像素的每一条可能路径,关注的是沿着路径代价最低的这类路径,沿着任意一条路径的代价是每一条像素的成本(围绕它的小块)加上当一个像素与其周围在视差上轻微变化产生的微笑补偿,或者当一个像素与其周围在视差上剧烈变化的产生的大的补偿
如果知道相邻像素的成本,唯一可能的情况就是这个新像素的最小成本路径来自于附近像素值一,因此可以从边缘开始跨越图像进行计算,。首先计算所有能计算得到的像素的所有可能的视差成本,之后移动到它的相邻像素