下载AD-Census完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上角点颗星!感谢!

离AD-Census的理论教学结束两周有余,博主并没有闲着,一直在耕耘AD-Census的源码,此篇的开始意味着源码工作已经完成,完整代码已开源在我的Github仓库,供大家下载。

仓库地址:https://github.com/ethan-li-coding/AD-Census

本次系列我们依旧采取代码教学的方式,大家下载代码后,可以把我的博客当做一本工具书,有不懂的部分就来这里找找答案。即使代码里已经加了丰富的注释,但是难免也会遇到晦涩难懂之处,博主的注释有肯定有所纰漏和错误,此博客系列也正好做一个补充。单独读完本系列也是完全可以的,心中会对代码有个整体的理解,再去看代码就会更加通透。

本篇的内容是系列的第一篇,我们按照惯例,介绍AD-Census的算法框架和代码框架。

先贴一下AD-Census的效果图:

熟悉我博客的同学可能想看看AD-Census和前两个算法SGM和PatchMatch算法的效果有啥差别,从该实例数据来看,效果上PatchMatch>AD-Census>SGM,而效率上则是SGM>AD-Census>PatchMatch。AD-Census更像是不偏科的全能型选手,在效率和效果上做了一个平衡。

我们来看本篇的内容:

【码上实战】【立体匹配系列】经典AD-Census: (1)框架

  • 算法框架
  • 代码框架

算法框架

算法理论部分博主就不再赘述细节,请参看系列文章:

【理论恒叨】【立体匹配系列】经典AD-Census:(1)代价计算
【理论恒叨】【立体匹配系列】经典AD-Census: (2)十字交叉域代价聚合(Cross-based Cost Aggregation)
【理论恒叨】【立体匹配系列】经典AD-Census: (3)扫描线优化(Scanline Optimization)
【理论恒叨】【立体匹配系列】经典AD-Census: (4)多步骤视差优化

总的来说,AD-Census依次包括4个步骤:

  • (1)代价计算(Cost Compution)
  • (2)十字交叉域代价聚合(Cross-based Cost Aggregation)
  • (3)扫描线优化(Scanline Optimization)
  • (4)多步骤视差优化(MultiStep Refinement)

第一步代价计算需要计算AD代价和Census代价,最终融合成AD-Census代价。

第二步十字交叉域代价聚合分为两小步,第一小步是计算每个像素的十字交叉臂,第二步是对所有像素进行十字交叉臂聚合。

第三步扫描线优化和SGM的代价聚合步骤一样,从四个方向进行优化。

第四步多步骤视差优化共有六个小步骤,分别是:

  1. 离群点检测(Outlier Detection)
  2. 迭代局部投票法填充(Iterative Region Voting)
  3. 内插填充(Proper Interpolation)
  4. 非连续区视差调整(Depth Discontinuity Adjustment)
  5. 子像素优化(Sub-pixel Enhancement)
  6. 中值滤波(Median Filter)

通过以上的梳理,框架图可以如下方式绘制:

代码框架

我们之所以绘制算法框架,就是为代码框架做指导,所以代码框架整体上会跟随算法框架的思路,在局部做一些细微的调整。

我们先看看代码文件:

代码结构还是比较清晰的,一个独立的功能模块我都会写成一对cpp/h,从文件名就可以大概知道模块的含义。基于上面的算法架构,我绘制了一个代码框架图:

下面我们具体对代码文件进行解读。

(1)主体实现类
AD-Census的算法主体类,包含唯一的类ADCensusStereo。头文件ADCensusStereo.h里是类的接口定义,源文件ADCensusStereo.cpp里是类的功能实现。主体类是算法使用者直接调用的类,通过主体类成员函数即可完成AD-Census匹配得到视差图。

(2)代价计算器类
实现AD-Census的代价计算模块所有功能函数,代价计算相关的所有实现都集成在代价计算器类CostComputor中,例如灰度图计算、Census变换、AD以及Census代价计算等。主体类通过实例化代价计算器类完成代价计算。

(3)代价聚合器类
实现AD-Census的代价聚合模块所有功能函数,代价聚合相关的所有实现都集成在代价聚合器类CosAggregator中,例如十字交叉域的构建、代价沿十字交叉域的聚合等。主体类通过实例化代价聚合器类完成代价聚合。

(4)扫描线优化器类
实现AD-Census的扫描线优化模块所有功能函数,扫描线优化相关的所有实现都集成在扫描线优化器类ScanlineOptimizer中,例如水平、竖直方向的扫描线优化等。主体类通过实例化扫描线优化器类完成扫描线优化。

(5)多步优化器类
实现AD-Census的多步视差优化模块所有功能函数,多步视差优化相关的所有实现都集成在多步优化器类MultiStepRefiner中,例如离群点检测、视差填充、非连续区视差调整等。主体类通过实例化多步视差优化器类完成多步视差优化。

(6)工具包
工具包内实现一些通用的工具,如census变换、汉明距离计算、中值滤波。以命名空间adcensus_util组织。

(7)基础类型定义
包含一些基础类型的定义,包括:

  1. 基础类型别名定义 sint32/float32…
  2. 参数结构体定义:ADCensusOption
  3. 颜色梯度结构体定义:ADColor

以上就是整个代码结构的描述,看完大家应该对整个代码有个整体了解,后面的博文将给大家讲解每一个模块每一个类具体的实现细节。

代码注释这块博主很重视,尽量让大家能快速看懂代码,代码风格也遵循google规范,希望带给大家的是一份高质量代码。

当然,博主能力有限,不免会有错误纰漏,欢迎大家在博主的Github开源仓库及博客里热烈讨论,博主也会参与进来,和大家一起交流。

下载AD-Census完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上角点颗星!感谢!

博主简介:
Ethan Li 李迎松(知乎:李迎松)
武汉大学 摄影测量与遥感专业博士
主方向立体匹配、三维重建
2019年获测绘科技进步一等奖(省部级)

爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding (欢迎follow和star)

个人微信:

欢迎交流!

关注博主不迷路,感谢!
博客主页:https://ethanli.blog.csdn.net

【码上实战】【立体匹配系列】经典AD-Census: (1)框架相关推荐

  1. 【码上实战】【立体匹配系列】经典SGM:(2)代价计算

    码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SGM:(2)代价计算 [码上实战][立体匹配系列]经典SGM:(3)代价聚合 [码上实战][ ...

  2. 【码上实战】【立体匹配系列】经典SGM:(4)代价聚合2

    昔人已乘黄鹤去,此地空余黄鹤楼. 2020对武汉.对中国.对世界来说是异常艰难的一年.武汉壮士扼腕,封一城而救一国,引得八方救援,举国抗疫.中国人在灾难面前总是空前团结,勇往直前!中华民族几千年来从未 ...

  3. 【码上实战】【立体匹配系列】经典SGM:(5)视差优化

    千呼万唤始出来,犹抱琵琶半遮面. 抱歉让大家久等,最近事儿繁多,导致更新推迟,实在抱歉. 码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SG ...

  4. 【码上实战】【立体匹配系列】经典SGM:(1)框架与类设计

    前言 一直就想做这样的专题,因为自己是一名算法工程师,而算法落地对算法工程师来说是职责和能力之体现,前面有一个专题是专门介绍Semi-Global Matching(SGM)双目立体匹配算法的理论知识 ...

  5. 【码上实战】【立体匹配系列】经典SGM:(6)视差填充

    科学是一个精益求精的过程. 码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SGM:(2)代价计算 [码上实战][立体匹配系列]经典SGM:( ...

  6. 【码上实战】【立体匹配系列】经典SGM:(7)弱纹理优化

    欢迎收看长篇小说SGM第七章:弱纹理优化 码上教学系列 [码上实战][立体匹配系列]经典SGM:(1)框架与类设计 [码上实战][立体匹配系列]经典SGM:(2)代价计算 [码上实战][立体匹配系列] ...

  7. 【码上实战】【立体匹配系列】经典AD-Census: (6)多步骤视差优化

    同学们好久不见! 下载完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census 欢迎同学们在Github项目里讨论! 在实战的上一篇,我们对AD- ...

  8. 【码上实战】【立体匹配系列】经典PatchMatch: (1)框架

    下载完整源码,点击进入: https://github.com/ethan-li-coding/PatchMatchStereo 欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上角s ...

  9. 【码上实战】【立体匹配系列】经典PatchMatch: (4)代价计算

    下载完整源码,点击进入: https://github.com/ethan-li-coding/PatchMatchStereo 欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上角s ...

最新文章

  1. Matlab 绘制三维立体图(以地质异常体为例)
  2. 没听说过“羽毛球VR”计划?嗯?
  3. sdwan解决方案的分类—Vecloud
  4. 【云隐】STM32F103C8T6实现串口IAP方式升级固件
  5. python安装pyquery失败
  6. [译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块
  7. 学习笔记~~~~LinkedHashMap
  8. Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接
  9. Qt工作笔记-QTableWidget插入QcomboBOx后,如何获取数据
  10. 开源、快速、高精度的椭圆检测—你值得拥有!
  11. Android ------ handler 异步处理消息
  12. vue中实现图片的懒加载
  13. matlab数学实验 课件,MATLAB数学实验课件.PPT
  14. “隔空播放”显示器只有“关闭”的原因
  15. 深度学习 基础硬件CPU GPU知识笔记
  16. 【opencv-python不规则多边形 ROI提取】
  17. 2018 Android面经分享(京东,百度,陌陌,58到家等知名公司)
  18. office 文档 在线查看
  19. 计算机网络实验报告哈工大_哈工大计算机网络实验报告之五
  20. 如何解决打开浏览器跳转MSN中国页面

热门文章

  1. 清除node_modules 缓存
  2. npm 和 yarn 缓存清理
  3. opencv android 透视,OpenCV图像几何变换之透视变换
  4. oracle 把结果加上百分号_用一条sql语句显示数据百分比并加百分号
  5. 服务器信号有杂音怎么回事,电脑麦克风有杂音滋滋怎么解决
  6. mysql 二叉树表设计_Mysql 索引模型 B+ 树详解
  7. (三)Shi-Tomasi角点检测
  8. oracle数据的安装,与基本配置
  9. 三极管工作原理分析!精辟、透彻
  10. 性能测试:一个完整的性能测试过程