• 不同方法获得视差图比较


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

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

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

     

     

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

  • 相关阅读:
    Tomcat7,Tomcat8 的manager 配置
    JavaScript 获得当前日期+时间
    CentOS 安装jdk 1.8
    nginx文件结构与解析,例子
    jxl解析多个excel工作表-java代码
    一个上传图片,预览图片的小demo
    利用DES,C#加密,Java解密代码
    CentOS安装Nginx
    摄像机标定--很懒的方法
    slam-g2o安装失败的解决问题
  • 原文地址:https://www.cnblogs.com/zfluo/p/5131837.html
Copyright © 2020-2023  润新知