文章目录

  • 前言
  • 一、AD-census是什么?
    • 1.代价计算
    • 2.代价聚合
    • 3.视差优化
    • 4.视差后处理
  • 二、基于python的AD-census立体匹配算法实现

前言

  AD-Census算法来自于中国学者Xing Mei等在ICCV2011发表的论文《On Building an Accurate Stereo Matching System on Graphics Hardware》,其主要优点是有效兼顾并行速度和精度两点。
原文链接:On Building an Accurate Stereo Matching System on Graphics Hardware
参考文章:
《On Building an Accurate Stereo Matching System on Graphics Hardware》
双目立体匹配算法:ADCensus概述
论文阅读《On Building an Accurate Stereo Matching System on Graphics Hardware》(AD Census-双目立体匹配)


一、AD-census是什么?

  AD-Census是一个将局部算法和半全局算法相结合的算法,它包含四个步骤:代价计算(cost initialization):绝对差AD+Census变换算法、代价聚合(cost aggregation):动态十字交叉域、视差优化(disparity computation):扫描线视差优化、后处理(refinement):多步后处理操作。

1.代价计算

  AD-Census代价计算结合了AD法和Census法(关于AD和census代价计算的方法大家可以参考李博的文章【理论恒叨】【立体匹配系列】经典AD-Census: (1)代价计算)AD法在重复纹理区域比Census法表现更好,Census法在弱纹理区域比AD法表现更好,而AD-Census法在两种场景下都是表现最好的。如下为AD-census的代价计算公式,两个算法的结果尺度并不一样,AD的结果是亮度差,范围是[0,255],而Census是比特串对应位值不相同的个数,范围为[0,N](N等于比特串的位数,一般是32位或者64位)。因此,需要通过归一化,将两者的结果归一化到相同的范围区间。

2.代价聚合

  AD-Census采用改进的十字交叉域构造进行代价聚合,基于颜色相似度和空间接近度对每个像素计算十字臂的长度,为了在无纹理区域和深度不连续区域获得更好的结果。在交叉构建步骤之后,像素 p 的窗口区域通过合并位于 p 垂直臂(例如 q)上的所有像素的水平臂来建模。获得十字交叉域后,进行代价聚合,原始的聚合策略是第一遍横向汇总匹配成本并存储中间结果; 然后第二遍垂直聚合中间结果以获得最终成本,这个过程迭代2-4次。改进的聚合策略是第一次和第三次先水平聚合,再垂直聚合,第二次和第四次,先垂直聚合再水平聚合,两种聚合方式的十字交叉区域不一样,这样能够提高大的无纹理区域和深度不连续区域的精度。


  十字交叉域构建过程中,颜色差异阈值τ\tauτ和最长臂长阈值 L 起着决定性作用,在大的弱纹理区域,需要使用更大的 L和 τ\tauτ值来得到邻域中更多的信息的像素,让结果更稳健 ,但简单增大 L 和 τ\tauτ会在视差非连续区域带来更多的噪声。基于此,AD-Census改进的规则如下(以左臂延伸为例):改进后的规则可以避免臂的延伸穿过边缘像素,同时使弱纹理有更长的臂同时又不会让所有像素的臂过长。

3.视差优化

  AD-Census学习了SGM的代价聚合方式,想要进一步提高代价的准确性,减少匹配错误(在SGM中此步骤称为代价聚合),优化的方向为4个方向,左右上下。这里李博讲的很明白啦。【理论恒叨】【立体匹配系列】经典AD-Census: (3)扫描线优化(Scanline Optimization)


  AD-Census所做的修改在于P1和P2值的设定方式。P1,P2不只是和左视图的相邻像素颜色差D1 = Dc ( p , p − r )
有关,而且和右视图对应同名点的相邻像素颜色差D2 =Dc (pd,pd−r)有关。


4.视差后处理

(1)Outlier Detection离群点检测
  离群点检测就是左右一致性检查,将不匹配点分为遮挡区域(occlusion region)和误匹配区域(mismatch region)。
(2)Iterative Region Voting迭代局部投票

(3)Proper Interpolation(视差填充)
  对于保留下来的无效像素p,在一定范围内沿周围16个方向搜索最近的可靠像素的视差值:对于遮挡区域像素p,选择所有搜索到的可靠像素的视差中最小的值(因为遮挡像素一般在背景,背景离相机远,也就是视差小)。对于误匹配像素p,在搜索到的可靠像素的集合中选择和p颜色最相近的像素的视差赋值给p。
(4)Depth Discontinuity Adjustment视差非连续区调整
  此步的目的是进一步优化视差非连续区域的视差值。首先,会对视差图做一个边缘检测,对于边缘上的像素 p ,记其视差值为D(p),记录其左右两边像素 p1 、p2的视差值DL ( p1 ) 、DL ( p2 ) 。如果DL ( p1 ) 、DL ( p2 )中存在一个视差值赋给像素 p 后的匹配代价比 p pp 原先的匹配代价C2(p,Dp)更小,则把D(p )替换成该视差值。
  其实就是对边缘上的像素值进行微调,选择左右两边使其代价更小的那个视差值。
(5)Sub-pixel Enhancement子像素优化
  子像素优化用一元二次拟合。

二、基于python的AD-census立体匹配算法实现

参考博主:ADCensus立体匹配算法(Python)的代码
修改如下部分就可以运行啦!

运行结果如下:

大家可以直接根据大佬的GitHub下载,这里就不放链接啦!

基于python的AD-census立体匹配算法实现相关推荐

  1. Census立体匹配算法算法的Python实现

    1.前言 Census作为立体匹配的代价函数之一,不论是局部立体匹配还是全局立体匹配都有很重要的作用,今天直入主题,直接给出代码并解释一下代码的实现,具体原理有很多优秀的博文已经贴出来了,本文不再赘述 ...

  2. python立体匹配评价,sad立体匹配算法的Python实现,SAD,PYTHON

    SAD立体匹配算法的PYTHON实现 这是第一次发CSDN博客,因为在机器视觉的学习中CSDN帮助了我很多,那么我也应该为CSDN社区做一些贡献,所以本文将介绍我用python实现的SAD匹配算法. ...

  3. 双目立体匹配:AD Census

    ADCensus立体匹配算法是Xing Mei, Xun Sun, Mingcai Zhou等几个人 在2011年,发表的一篇题目为:<On Building anAccurate Stereo ...

  4. 双目视觉(三)立体匹配算法

    系列文章: 双目视觉(一)双目视觉系统 双目视觉(二)双目匹配的困难和评判标准 双目视觉(三)立体匹配算法 双目视觉(四)匹配代价 双目视觉(五)立体匹配算法之动态规划全局匹配 双目视觉(六)U-V视 ...

  5. 基于深度学习算法和传统立体匹配算法的双目立体视觉

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01 立体视觉是什么? 在开始之前,我相信很多站友都会有这个疑问, ...

  6. 《一种新颖的自适应权重 Census变换立体匹配算法》(2016)

    摘要:针对当前 Census 变换立体匹配算法深度不连续区域匹配精度低的缺陷,提出了一种新颖的自适应权重的Census 变换立体匹配算法.在 Census 变换阶段计算变换窗口中心点上下左右四个像素的 ...

  7. python立体匹配误匹配率_立体匹配算法(Stereo Matching)及其在OpenCV中的应用

    模拟人的两只眼睛的Stereo相机最近变得很受欢迎.通过对stereo相机拍摄的左右两张图进行匹配找出视差图,可以还原物体的3D信息. 立体匹配(Stereo matching)的步骤如下: 1: 预 ...

  8. 基于置信传播(BP,Belief Propagation)的立体匹配算法

    简介 基于置信传播的立体匹配算法是一种经典的全局立体匹配算法,其主要思想是在立体匹配过程中引入置信度的概念,置信度表示相邻节点的不同视差标记的可信度,通过一定迭代次数的消息迭代传播更新后,全局能量函数 ...

  9. python 立体匹配算法_OpenCV3.4两种立体匹配算法效果对比

    以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: int numberOfDisparities = ((imgSize.width / 8) + ...

最新文章

  1. nexus 离线下载中央库索引
  2. 记一次数组工具类 交集,去重
  3. 发通知 PendingIntent 中Intent 内容没有更新
  4. Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity
  5. Webfrom --图片验证码
  6. Python之pandas:pandas.set_option函数的参数详细解释
  7. VS2008 ,TFS2008破解序列号
  8. mysql5.7卸载语句_MySQL5.7完全卸载
  9. linux系统IO操作
  10. (81)Verilog HDL:状态机一段式
  11. C++ 二叉搜索树的实现
  12. 帆软报表登录背后得逻辑
  13. JVM的7种垃圾收集器
  14. form表单样式案例
  15. 苹果手机代数_苹果一共几代?
  16. python 获取项目根目录
  17. 在 MacOS 上使用 Qt 开发 Android APP
  18. java的跨平台特性是指_如何理解JAVA的跨平台特性
  19. 亿道丨三防手机丨手持终端丨PDA丨优势与特点
  20. 超全面!Verilog入门到实战系列(1)

热门文章

  1. 如何给PDF设置编辑权限?
  2. UGUI源码之Toggle组件
  3. 网投简历+宣讲会内容流水账(得帆宣讲会+汉得宣讲会)+感想+汉得offer
  4. mat格式转换成csv格式
  5. 赵致琢计算机导论最新版,计算机导论课程教学大纲
  6. 虚拟同步发电机_学术简报︱基于虚拟同步发电机控制的T型三电平并网逆变器研究...
  7. 智慧社区平台建设应该从哪几个方面入手?
  8. WebRTC Opus编码器的创建与参数细节分析( sdp -> native )
  9. 魔力拼图V1.0下载地址
  10. 华为交流会有感-知耻而后勇