博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不同方法获得视差图比较
阅读量:4322 次
发布时间:2019-06-06

本文共 1691 字,大约阅读时间需要 5 分钟。

原帖地址:http://blog.csdn.net/mailang2008/article/details/5873883

对OpenCV中涉及的三种立体匹配算法进行代码及各自优缺点总结:

首先我们看一下BM算法:

该算法代码:

[cpp] 
  1. CvStereoBMState *BMState = cvCreateStereoBMState();  
  2.   
  3. int SADWindowSize=15;   
  4.  BMState->SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 9;  
  5.  BMState->minDisparity = 0;  
  6.  BMState->numberOfDisparities = 32;  
  7.  BMState->textureThreshold = 10;  
  8.  BMState->uniquenessRatio = 15;  
  9.  BMState->speckleWindowSize = 100;  
  10.  BMState->speckleRange = 32;  
  11.  BMState->disp12MaxDiff = 1;  
  12.  cvFindStereoCorrespondenceBM( left, right, left_disp_,BMState);  
  13.    cvNormalize( left_disp_, left_vdisp, 0, 256, CV_MINMAX );  

其中minDisparity是控制匹配搜索的第一个参数,代表了匹配搜苏从哪里开始,numberOfDisparities表示最大搜索视差数uniquenessRatio表示匹配功能函数,这三个参数比较重要,可以根据实验给予参数值。

该方法速度最快,一副320*240的灰度图匹配时间为31ms,视差图如下。

 

第二种方法是SGBM方法这是OpenCV的一种新算法:

[cpp] 
  1. cv::StereoSGBM sgbm;  
  2.         sgbm.preFilterCap = 63;  
  3.         int SADWindowSize=11;   
  4.         int cn = 1;  
  5.         sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;  
  6.         sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;  
  7.         sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;  
  8.         sgbm.minDisparity = 0;  
  9.         sgbm.numberOfDisparities = 32;  
  10.         sgbm.uniquenessRatio = 10;  
  11.         sgbm.speckleWindowSize = 100;  
  12.         sgbm.speckleRange = 32;  
  13.         sgbm.disp12MaxDiff = 1;  
  14.       
  15.         sgbm(left , right , left_disp_);  
  16.         sgbm(right, left  , right_disp_);  

 

各参数设置如BM方法,速度比较快,320*240的灰度图匹配时间为78ms,视差效果如下图。

 

 

第三种为GC方法:

[cpp] 
  1. CvStereoGCState* state = cvCreateStereoGCState( 16, 2 );  
  2.  left_disp_  =cvCreateMat( left->height,left->width, CV_32F );  
  3.  right_disp_ =cvCreateMat( right->height,right->width,CV_32F );  
  4.  cvFindStereoCorrespondenceGC( left, right, left_disp_, right_disp_, state, 0 );  
  5.  cvReleaseStereoGCState( &state );  

该方法速度超慢,但效果超好。

 

 

各方法理论可以参考文献。

转载于:https://www.cnblogs.com/zfluo/p/5131837.html

你可能感兴趣的文章
跟初学者学习IbatisNet第四篇
查看>>
seL4环境配置
查看>>
Git报错:insufficient permission for adding an object to repository database .git/objects
查看>>
ajax跨域,携带cookie
查看>>
BZOJ 1600: [Usaco2008 Oct]建造栅栏( dp )
查看>>
洛谷 CF937A Olympiad
查看>>
Codeforces Round #445 C. Petya and Catacombs【思维/题意】
查看>>
用MATLAB同时作多幅图
查看>>
python中map的排序以及取出map中取最大最小值
查看>>
ROR 第一章 从零到部署--第一个程序
查看>>
<form>标签
查看>>
vue去掉地址栏# 方法
查看>>
Lambda03 方法引用、类型判断、变量引用
查看>>
was集群下基于接口分布式架构和开发经验谈
查看>>
MySQL学习——MySQL数据库概述与基础
查看>>
ES索引模板
查看>>
HDU2112 HDU Today 最短路+字符串哈希
查看>>
JPanel重绘
查看>>
图片放大器——wpf
查看>>
SCALA STEP BY STEP
查看>>