【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现
要求:对给出的左右视图进行匹配,最后输出左右两张disparity map(视差图)
e.g.
左视图、右视图(两幅图像大小相同,只有水平方向上的视角变换)

标准视差图如下:

SSD(sum of squared differences)实现:
1.把左右视图转成CV_8UC1单通道图像
可以直接引用opencv的API实现、自己写一个对三通道取平均值或者按照下面公式转换的函数,对结果影响不大

2.对每一个像素进行处理
假设dmax=79,则有,对于每个像素的每个d值,计算patch(滑动窗口)内左右视图的像素灰度值的平方差之和,然后记录该值与其对应的d值
此处可以用vector<pair<sum, d>>来存储结果
3. 取最小sum值对应的d做为最终输出的disparity map对应点的灰度值
result:5*5 窗口,坏点率分别为24,72%, 25.78%

NCC(normalized cross-correlation)实现:

1. 同样,先把左右视图转成单通道灰度图
2. 然后对于每个像素做处理,对于每个对应的d值,先计算分子,在计算分母,最后把分子/分母的值与对应d值存入vector中
3.取vector中最大值对应的d值为disparity map在该点的灰度值
result:5*5窗口 坏点率:23.64%, 24.20% 比SSD稍微好一点

ASW(Adaptive Support Weight)实现:



这个就按公式实现,比较简单,如果窗口足够大的话,ASW的处理效果会比较好,但是会很慢
但是中间计算Cpq值的时候主要要把BGR模型转换成Lab模型计算

result:5*5 窗口大小,坏点率:31.33% , 31.39%

33*33窗口大小,坏点率:19.44% , 20.75%(但是,跑了9242 seconds...可以自行感受一下...

代码实现:https://github.com/CheerM/opencv_stereo_matching/tree/master/src
BTW,哪位勇士跑完全部测例的ASW 33*33,能不能顺便分享一下数据给我看看,感激不尽啊> <

【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现的更多相关文章
- OpenCV3.4两种立体匹配算法效果对比
以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: ) + ) & -; cv::Ptr<cv::StereoBM> b ...
- opencvSGBM半全局立体匹配算法的研究(1)
转载请说明出处:http://blog.csdn.net/zhubaohua_bupt/article/details/51866567 这段时间对opencvSGBM半全局立体匹配算法进行了比較仔细 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- 立体视觉-opencv中立体匹配相关代码
三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...
- opencv 人脸识别
背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
- opencv 61篇
(一)--安装配置.第一个程序 标签: imagebuildincludeinputpathcmd 2011-10-21 16:16 41132人阅读 评论(50) 收藏 举报 分类: OpenCV ...
- OpenCV stereo matching 代码 matlab实现视差显示
转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/44151213, 来自:shiter编写程序的艺术 基础知识 计算机视觉是一门研究 ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- 【计算机视觉】基于OpenCV的人脸识别
一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
随机推荐
- IRedisClient 常用方法说明
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- Python基础教程【读书笔记】 - 2016/7/4
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第二波:第7章 更加抽象 [总览] 创建自己的对象,是Python的核心概念!Python被称为面向对象的语言.介绍如 ...
- windows7使用Source insight上远程修改ubuntu共享内核源码
由于本人阅读喜欢使用source insight.前段时间接触了linux核代码,而这份代码只能放在ubuntu服务器上编译,刚开始的时候是在windows上修改,完了之后再copy到服务器上去编译, ...
- 删除指定的文件.bat
@echo offattrib -s -h -r /s /d C:\*Thumbs.dbattrib -s -h -r /s /d D:\*Thumbs.dbattrib -s -h -r /s /d ...
- 《黄聪:手机移动站SEO优化教程》1、为什么要做手机移动端网站
视频地址:http://v.youku.com/v_show/id_XNzE2Mzk3MjI4.html
- 在编译oc中protocol时出现的错误
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ...
- Educational Codeforces Round 15 Cellular Network
Cellular Network 题意: 给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少. 题解: 枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候 ...
- pycharm 格式化代码
有时候将空格键和tab键混用,在windows上没什么事情,但是如果移动到linux就会有问题,所以我们在移动到linux上之前要先格式化一下代码: ctrl+alt+L可以格式化,但是和锁屏快捷键冲 ...
- transform.position和transform.localPosition区别
1. position是根据世界原点为中心 2. localPosition是根据父节点为中心,如果没有父节点,localpositon和position是没有区别的 3.选中一个物体左上角Globa ...
- systick优先级的理解
sysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15).这样它可以很方便的移植到不同厂商出CM3内核 ...