理论恒叨系列

【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)
【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换
【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)
【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化

【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换

  上篇博客中,我们介绍了基于互信息的代价计算方法,由于基于互信息的匹配代价计算由于需要初始视差值,所以需要通过分层迭代的方式得到较为准确的匹配代价值,而且概率分布计算稍显复杂,这导致代价计算的效率并不高。学者Zabih和Woodfill 1 提出的基于Census变换法也被广泛用于匹配代价计算。Census变换是使用像素邻域内的局部灰度差异将像素灰度转换为比特串,思路非常简单,通过将邻域窗口(窗口大小为n×mn×mn×m,nnn和mmm都为奇数)内的像素灰度值与窗口中心像素的灰度值进行比较,将比较得到的布尔值映射到一个比特串中,最后用比特串的值作为中心像素的Census变换值CsC_sCs​,如公式1所示:

式1

其中,n′n'n′和m′m'm′分别为不大于nnn和mmm的一半的最大整数,⊕⊕⊕为比特位的逐位连接运算,ξξξ运算则由公式2定义:

式2

基于Census变换的匹配代价计算方法是计算左右影像对应的两个像素的Census变换值的汉明(Hamming)距离,即

式3

  Hamming距离即两个比特串的对应位不相同的数量,计算方法为将两个比特串进行亦或运算,再统计亦或运算结果的比特位中不为1的个数。

  基于Census变换的匹配代价计算方法如图1所示,

图1 汉明距离示意图

  从图1可以看出,Census变换对整体的明暗变化并不敏感,因为是比较的相对灰度关系,所以即使左右影像亮度不一致,也能得到较好的匹配效果。

  Census相比互信息还具有并行度高的优点,因为Census变换值是局部窗口运算,所以每个像素可以独立运算,这个特性让其可以很好的设计多线程并行计算模型,无论是CPU并行还是GPU并行都能达到非常高的并行效率。

  在实际匹配过程中,简单的执行匹配代价计算并不能得到高质量的视差图,必须经过代价聚合步骤,聚合后的代价能够更准确地反应匹配相似度,下篇博客中,将为大家详解SGM的代价聚合步骤,查看请点击 >> link

附:
计算Census值及Hamming的代码:
Census值

uint8 gray_center= img_data[image_y *img_width + image_x];     // 中心像素值
// 遍历大小为2csh*2csw的窗口内邻域像素,逐一比较像素值与中心像素值的的大小,计算census值
uint32 census_value = 0u;
for (sint32 i = -csh; i <= csh; i++) {for (sint32 j = -csw; j <= csw; j++) {census_value <<= 1;uint8 gray = img_data[(image_y + i)*img_width + image_x + j];if (gray < gray_center) {census_value += 1;}}
}
census[image_y *img_width + image_x] = census_value;      // 中心像素的census值

Hamming距离

// unsigned to 32bit
//计算hamming距离
uint32 hamDist32(const uint32& x, const uint32& y)
{uint32 dist = 0, val = x ^ y;// Count the number of set bitswhile (val){++dist;val &= val - 1;}return dist;
}

码上教学系列

【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(1)框架与类设计
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(2)代价计算
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(3)代价聚合
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(4)代价聚合2
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(5)视差优化
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(6)视差填充
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(7)弱纹理优化

完整代码已发布于Github开源项目:Github/SemiGlobalMatching,欢迎免费下载

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

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

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

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

个人微信:

欢迎交流!

喜欢博主的文章不妨关注一下博主的博客,感谢!
博客主页:https://blog.csdn.net/rs_lys


  1. ZABIH R, WOODFILL J. Non-parametric local transforms for computing visual correspondence[M]. 1994: 151-158. ↩︎

【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换相关推荐

  1. 【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)

      半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...

  2. 【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)

    理论恒叨系列 [理论恒叨][立体匹配系列]经典SGM:(1)匹配代价计算之互信息(MI) [理论恒叨][立体匹配系列]经典SGM:(2)匹配代价计算之Census变换 [理论恒叨][立体匹配系列]经典 ...

  3. 【理论恒叨】【立体匹配系列】经典AD-Census: (1)代价计算

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

  4. 【理论恒叨】【立体匹配系列】经典AD-Census: (3)扫描线优化(Scanline Optimization)

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

  5. 【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型

    一枝独秀不是春 理论恒叨系列 [理论恒叨][立体匹配系列]经典PatchMatch: (1)Slanted support windows倾斜支持窗模型 [理论恒叨][立体匹配系列]经典PatchMa ...

  6. 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)...

      半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...

  7. 双目立体匹配之匹配代价计算

    文章目录 AD SAD Cencus AD-Cencus 之前谈到过双目立体匹配的步骤,主要分为四步(半全局方法):匹配代价计算.代价聚合.视差计算.视差优化.匹配代价计算是双目立体匹配的第一步,其有 ...

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

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

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

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

最新文章

  1. hdu5459(2015沈阳网络赛J题)
  2. rocksdb学习笔记
  3. Android混流技术,基于Android的实时语音混沌保密技术的实现
  4. 《当90后遇上创业》导读
  5. ICCV2021 新增数据集汇总 | 含时序动作定位、时空行为检测、弱光目标检测等!...
  6. 【Kafka】Kafka创建Topic的时候提示WARNING: Due to limitations in metric names, topics with a period ('.')
  7. 移动端滚动穿透的6种解决方案
  8. Tableau可视化学习笔记:day13-14
  9. hdu 1556 Color the ball (线段树做法)
  10. 数论——同余和费马小定理
  11. C语言求素数的简化算法
  12. 如果可以不上班《不上班的23种活法》免费下载及经典语录
  13. 使用python打开多台IMAGINGSOURCE工业相机
  14. R 语言图形函数 par()参数应用举例
  15. 【安全知识分享】重磅|消防控制室培训.ppt(附下载)
  16. 爬虫 Scrapy 学习:Spiders
  17. MySQl 表基本查询操作
  18. 世界药林:首款PRCP抑制剂奥拉帕利已经批准4种适应症
  19. Android Studio打不开,出现start failed的报错
  20. linux系统命令作业

热门文章

  1. Windows 命令行终端可以使用滑轮上下滚动
  2. python模运算求余_取模运算和取余运算
  3. 点赞动画还可以做得那么飘逸!
  4. Git原理 SSH 公钥 私钥的理解
  5. 88NV1120主控,镁光颗粒无法格式化、掉盘、开卡失败的偶然解决(修复)方法
  6. dpdk-16.04 eal 初始化 log 信息解析
  7. Spring Boot 面试杀手锏—自动配置原理
  8. cad修改快捷键_CAD画图难吗?有什么诀窍吗?
  9. handbrake 下载是php,开源视频格式转换:HandBrake
  10. 一文看懂:人工智能的专业术语,你知道几个?