zoukankan      html  css  js  c++  java
  • 不同方法获得视差图比较

    原帖地址: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 );  

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

     

     

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

  • 相关阅读:
    Dbcp2抛出org.apache.commons.dbcp2.LifetimeExceededException
    DbUtils使用时抛出Cannot get a connection
    Spring注解【非单例】
    Exception in thread java.lang.IllegalThreadStateException
    eclipse选中变量,相同变量高亮。
    git push 403
    java虚拟机能并发的启动多少个线程
    产品的随想
    【转载】学习新东西的唯一方法
    Mysql错误问题记录
  • 原文地址:https://www.cnblogs.com/zfluo/p/5131837.html
Copyright © 2011-2022 走看看