立体匹配算法

OpenCv中实现了三种立体匹配算法:

BM算法

SGBM算法

GC算法

参考:http://blog.csdn.net/wqvbjhc/article/details/6260844

首先介绍:SGBM算法,作为一种全局匹配算法,立体匹配的效果明显好于局部匹配算法,但是同时复杂度上也要远远大于局部匹配算法。算法主要是参考Stereo Processing by Semiglobal Matching and Mutual Information

参考:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=23854

#include <highgui.h>
#include <cv.h>
#include <cxcore.h>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{

    IplImage * img1 = cvLoadImage("left.png",0);
    IplImage * img2 = cvLoadImage("right.png",0);
    cv::StereoSGBM sgbm;
    int SADWindowSize = 9;
    sgbm.preFilterCap = 63;
    sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;
    int cn = img1->nChannels;
    int numberOfDisparities=64;
    sgbm.P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
    sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
    sgbm.minDisparity = 0;
    sgbm.numberOfDisparities = numberOfDisparities;
    sgbm.uniquenessRatio = 10;
    sgbm.speckleWindowSize = 100;
    sgbm.speckleRange = 32;
    sgbm.disp12MaxDiff = 1;
    Mat disp, disp8;
    int64 t = getTickCount();
    sgbm((Mat)img1, (Mat)img2, disp);
    t = getTickCount() - t;
    cout<<"Time elapsed:"<<t*1000/getTickFrequency()<<endl;
    disp.convertTo(disp8, CV_8U, 255/(numberOfDisparities*16.));

    namedWindow("left", 1);
    cvShowImage("left", img1);
    namedWindow("right", 1);
    cvShowImage("right", img2);
    namedWindow("disparity", 1);
    imshow("disparity", disp8);
    waitKey();
    imwrite("sgbm_disparity.png", disp8);
    cvDestroyAllWindows();
    return 0;
}
时间: 2024-11-03 05:27:02

立体匹配算法的相关文章

基于最小生成树的实时立体匹配算法简介

转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/51533549, 来自: shiter编写程序的艺术 图割,置信传播等全局优化立体匹配算法,由于运算过程中需要迭代求精,运算时间长,无法达到实时计算立体匹配的需求,然而实时性需求却广泛存在立体匹配的应用场景中.很多基于局部匹配的算法虽然运算时间短,但由于仅考虑匹配窗内的代价聚合,效果很差,视差图只有很多稀疏的视差点,还要经过插值计算,显然无法用于汽车导航,目标拾取等需要精确结果且

【opencv】立体匹配算法SSD、NCC、ASW的基础实现

要求:对给出的左右视图进行匹配,最后输出左右两张disparity map(视差图) e.g. 左视图.右视图(两幅图像大小相同,只有水平方向上的视角变换)   标准视差图如下:   SSD(sum of squared differences)实现: 1.把左右视图转成CV_8UC1单通道图像 可以直接引用opencv的API实现.自己写一个对三通道取平均值或者按照下面公式转换的函数,对结果影响不大 2.对每一个像素进行处理 假设dmax=79,则有,对于每个像素的每个d值,计算patch(滑

基于Opencv的几种立体匹配算法+ELAS

同http://blog.csdn.net/chuhang_zhqr/article/details/51179881类似,采用 这两个经典的图片进行测试. 关于BM和SGBM以及VAR的参数设置请参考 晨宇思远 本文代码基于opencv2.4.9 本文源码地址在我的CSDN代码资源: http://download.csdn.net/detail/chuhang_zhqr/9703763 0:ELAS 这里要去下载Elas的开源库函数. int StereoMatch::ElasMatch()

立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码

立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码 Middlebury是每个研究立体匹配算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了立体匹配算法的进展.Middlebury提供的标准库,其计算出的视差保存在后缀名为.pfm的文件中,Middlebury本身也提供了读取.pfm文件中C++源码和Matlab源码.尽管如此,将源码写成与OpenCV结合的形式是我们更期望的,以下我写的读写.pfm文件的源码.相对于Middlebury给

OpenCV 介绍

介绍 OpenCV(Open Source Computer Vision Library:http://opencv.org)是一个开源的基于BSD许可的库,它包括数百种计算机视觉算法.文档OpenCV 2.x API描述的是C++ API,相对还有一个基于C语言的OpenCV 1.x API,后者的描述在文档opencv1.x.pdf中. OpenCV具有模块化结构,这就意味着开发包里面包含多个共享库或者静态库.下面是可使用的模块: 核心功能(Core functionality) - 一个

OpenCV学习-b

OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/modules/core/doc/intro.html.OpenCV已支持OpenCL OpenGL,也支持iOS和Android.OpenCV的API是C++的,所以在iOS中最佳实践是将用到OpenCV功能写一层Objective-C++封装.这些封装把OpenCV的C++API转化为安全的Object

基于 OpenCV 的人脸识别

基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影. OpenCV 起始于 1999 年 Intel 的一个内部研究项目.从那时起,它的开发就一直很活跃.进化到现在,它已支持如 OpenCL 和 OpenGL 的多种现代技术,也支持如 iOS

基于MST的立体匹配及相关改进(A Non-Local Cost Aggregation Method for Stereo Matching)

怀着很纠结的心情来总结这篇论文,这主要是因为作者提虽然供了源代码,但是我并没有仔细去深究他的code,只是把他的算法加进了自己的项目.希望以后有时间能把MST这一结构自己编程实现!! 论文题目是基于非局部代价聚类(non-local cost aggregation)的立体匹配,从题目上看这篇论文不是局部算法,但是也不是传统意义上的全局算法.这要从基于窗结构局部立体匹配算法说起,如下图: 我们求左右两幅图像在视差d下一点的cost时,我们实际是求得以该点为中心半径为r的Windows内所有点的c

opencv 人脸识别

背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影. OpenCV 起始于 1999 年 Intel 的一个内部研究项目.从那时起,它的开发就一直很活跃.进化到现在,它已支持如 OpenCL 和 OpenGL 等现代技术,也支持如 iOS 和 Android 等平台. 1999