OpenCV三种立体匹配求视差图算法总结

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

首先我们看一下BM算法:

该算法代码:

  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的一种新算法:

  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方法:

  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 ); 

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值