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

让大家久等了,一来最近博主工作比较忙;二来PatchMatchSteteo的代码博主是第一次写,并不像SGM写起来迅疾如飞,而是不断的斟酌代码、调试结果,直到结果达到预期才敢上传到博主的Github开源仓库,不敢马虎。

和之前SGM的代码教学不一样,这次博主准备换一种教学方式,因为PatchMatchSteteo的代码博主已经全部写完且上传到Github了,所以像SGM一样一步步教学显得有点奇怪,这次我们就以代码讲解的方式进行,同学们下载代码后,边看代码边看博主的博客,理解的会更快!

好了,废话不多说,先从博主的GIthub仓库里下载代码吧?

点击进入: Github - PatchMatchStereo

欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,给颗小星星,以及Follow Me!感激不尽!

算法效果图镇楼:

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

  • 算法框架
  • 代码框架

算法框架

首先,介绍下PatchMatchStereo(后面简称PMS)算法的框架,详细理论博主不再详说,请参考前几篇博客:

【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型
【理论恒叨】【立体匹配系列】经典PatchMatch: (2)基于PatchMatch的视差估计
【理论恒叨】【立体匹配系列】经典PatchMatch: (3)后处理(一致性检查与视差填充)

PMS的实现就是依次执行三大步:

  • (1)随机初始化
  • (2)迭代传播
  • (3)后处理

第(1)步随机初始化的操作是为每个像素随机一个视差和法线,并计算出视差平面。

而第(2)步迭代传播又包括依次执行的四小步:

  1. 空间传播(Spatial Propagation)
  2. 视图传播(View Propagation)
  3. 时序传播(Temporal Propagation)
  4. 平面优化(Plane Refinement)

第(3)步后处理包括依次执行的三小步:

  1. 一致性检查(Left-Right Consistency Check)
  2. 视差填充(Fill)
  3. 加权中值滤波(Weighted Median Filter)

所以框架这样画:

博主的代码也是遵循这样的框架编写,唯一区别在于博主并未实现时序传播,原因有三:首先这样的场景太特殊,难找到测试数据;其次PatchMatchStereo的效率实在是支撑不了视频立体;第三点是即使不做时序传播,结果也已经非常出色。

代码框架

先看看工程里的代码文件:

大家可以看到代码量并不多,工程里和PMS有关的文件也不到十个(打钩的文件),博主画了一个图来说明代码结构,描述每个代码文件所代表的功能模块:

(1)主体实现类
PMS的主体实现代码,包含唯一的类:PatchMatchStereo。头文件PatchMatchStereo.h里是类的定义,源文件PatchMatchStereo.cpp里是类的实现。

(2)代价计算器
cost_computer.hpp文件中,实现了PMS的代价计算器,以基类-派生类的方式编写,基类CostComputer是空基类,不包含具体的代价计算实现;CostComputerPMS是CostComputer的派生类,实现了PMS论文中的代价计算方式。设计基类-派生类架构的目的是为了让使用者可以以派生类的方式自己实现想要实现的代价计算器。

(3)迭代传播类
PMS的迭代传播实现类PMSPropagation在头文件pms_propagation.h及源文件pms_propagation.cpp中实现,包含PMS的迭代传播所有步骤。

(4)类型定义
在pms_types.h文件中,代码实现了PMS的

  1. 基础类型别名定义 sint32/float32…
  2. 参数结构体定义:PMSOption
  3. 颜色梯度结构体定义:PColor/PGradient
  4. 2/3维矢量定义:PVector2f/PVector3f
  5. 视差平面结构体定义:DisparityPlane

这样大家就差不多对代码的框架有个较为清晰的认识了。再结合代码里的注释,相信大家心中有谱了。

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

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

下载完整源码,点击进入: https://github.com/ethan-li-coding/PatchMatchStereo.git
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,给颗小星星,Follow 我!感激不尽!

码上实战系列

【码上实战】【立体匹配系列】经典PatchMatch: (1)框架
【码上实战】【立体匹配系列】经典PatchMatch: (2)主类
【码上实战】【立体匹配系列】经典PatchMatch: (3)随机初始化
【码上实战】【立体匹配系列】经典PatchMatch: (4)代价计算
【码上实战】【立体匹配系列】经典PatchMatch: (5)迭代传播
【码上实战】【立体匹配系列】经典PatchMatch: (6)后处理

博主简介:
Ethan Li 李迎松(知乎:李迎松)
武汉大学 摄影测量与遥感专业博士

主方向立体匹配、三维重建

2019年获测绘科技进步一等奖(省部级)

爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com

个人微信:

欢迎交流!

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

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

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

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

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

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

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

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

  4. 【码上实战】【立体匹配系列】经典PatchMatch: (2)主类

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

  5. 【码上实战】【立体匹配系列】经典PatchMatch: (6)后处理

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

  6. 【码上实战】【立体匹配系列】经典PatchMatch: (3)随机初始化

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

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

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

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

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

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

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

最新文章

  1. 利用sharding-jdbc分库分表
  2. 软件更新点的配置—SUP
  3. Java多线程之迭代器问题(四)
  4. AE 模板 天使之城
  5. 【新媒体】现阶段新闻聚合的玩法
  6. MySQL数据库事务中的行级锁,表级锁,页级锁
  7. synchronized和ReentrantLock区别,用新的lock有什么好处?举例说说
  8. Hessian局部线性嵌入算法(HLLE)——matlab实现
  9. matlab中patch函数的用法
  10. 云图说|DRS数据对比——带您随时观测数据一致性
  11. kubernetes(K8s):管理云平台中多个主机上的容器化的应用
  12. 线性回归的梯度下降和正规方程组求解
  13. 51单片机c语言两个变量比对,51单片机C语言编程技巧
  14. 阿里巴巴矢量图标 iconfont 下载图标分辨率小一点、并占得内存小一点呢
  15. ADS仿真 之 直流仿真示例
  16. CHM 打开时提示 已取消到该网页的导航
  17. 虚拟机挂起后硬盘响应变慢,SCSI转IDE方法
  18. Activiti reassign task to another user
  19. cassandra java cql_Cassandra CQL v3.3中文文档(下)
  20. 最好用的mac免费PDF阅读器是什么?

热门文章

  1. 第8.1.2解析mht格式文件
  2. 3个有用的CSS网格生成器
  3. 除蚂蚁文件数据恢复大师之外,还有哪些相似的软件?
  4. python接口测试传form-data参数
  5. 升级ingress-nginx-controller的nginx版本
  6. setevent/waitforsingleobject
  7. ps神经网络滤镜用不了,ai神经网络滤镜安装包
  8. Python 之文本进度条
  9. Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
  10. 青岛一中2021年高考成绩查询,2021年青岛高考各高中成绩及本科升学率数据排名及分析...