基于Opencv的几种立体匹配算法+ELAS_第1页
基于Opencv的几种立体匹配算法+ELAS_第2页
基于Opencv的几种立体匹配算法+ELAS_第3页
基于Opencv的几种立体匹配算法+ELAS_第4页
基于Opencv的几种立体匹配算法+ELAS_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Opencv的几种立体匹配算法+ELAS0:ELAS这里要去下载日as的开源库函数。intStereoMatch:ElasMatch()(cv:Matdisp_l,disp_r,disp8u_l,disp8u_r;doubleminVal;doublemaxVal;/视差图的极值cv二MatleftImage=cv二imread(./test_images/leftr31.png,0);cv:MatrightImage=cv二imread(./test_images/rightr31.png,0);/计算视差/generatedisparityimageusingLIBELASintbd=

2、0;constint32_tdims3=leftImage.cols,leftImage.rows,leftImage.cols;cv:Matleftdpf=cv二Mat:zeros(cv二Size(leftImage.cols,leftImage.rows),CV_32F);cv:Matrightdpf=cv:Mat:zeros(cv二Size(leftImage.cols,leftImage.rows),CV_32F);Elas:parametersparam;param.postprocess_only_left=false;Elaselas(param);cess(le

3、ftlmage.data,rightlmage.data,leftdpf.ptr(0),rightdpf.ptr(0),dims);cv二Mat(leftdpf(cv二Rect(bd,0,leftImage.cols,leftImage.rows).copyTo(disp_l);cv二Mat(rightdpf(cv:Rect(bd,0,rightImage.cols,rightImage.rows).copyTo(disp_r);一Checkitsextremevaluescv二minMaxLoc(disp_l,&minVal,&maxVal);coutMindisp:MaxvalueminV

4、almaxVal;numberOfDisparities.=(maxVal-minVal)一DisplayitasaCV_8UC1imagedisp_l.convertTo(disp8u_l,CV_8U,255/(maxVal-minVal);(numberOfDisparities*16.)cv二minMaxLoc(disp_r,&minVal,&maxVal);coutMindisp:MaxvalueminValmaxVal;numberOfDisparities.=(maxVal-minVal)/-DisplayitasaCV_8UC1imagedisp_r.convertTo(disp

5、8u_r,CV_8U,255/(maxVal-minVal);/(numberOfDisparities*16.)cv:normalize(disp8u_l,disp8u_l,0,255,CV_MINMAX,CV_8UC1);/obtainnormalizedimagecv:normalize(disp8u_r,disp8u_r,0,255,CV_MINMAX,CV_8UC1);/obtainnormalizedimagecv:imshow(Left,leftImage);cv二imshow(Right,rightImage);cv:imshow(Elas_left,disp8u_l);cv:

6、imshow(Elas_right,disp8u_r);cv:imwrite(Elas_left.png,disp8u_l);cv:imwrite(Elas_right.png,disp8u_r);coutendlOverendl;cv:waitKey(0);return0;1:BM算法intStereoMatch:BMMatching()cv:Matdisp,disp8u;doubleminVal;doublemaxVal;/视差图的极值cv:Matleftlmage=cv:imread(./test_images/leftr.png,0);cv:MatrightImage=cv二imrea

7、d(./test_images/rightr.png,0);intSADWindowSize=19;intnumberOfDisparities=16*3;/*0?numberOfDisparities:(leftImage.cols/8)+15)&-16;/bm.state-roi1=remapMat.Calib_Roi_L;/左右视图的有效像素区域,一般由双目校正阶段的cvStereoRectify函数传递,也可以自行设定。/bm.state-roi2=remapMat.Calib_Roi_R;/一旦在状态参数中设定了roi1和roi2,OpenCV会通过cvGetValidDispari

8、tyROI函数计算出视差图的有效区域,在有效区域外的视差值将被清零。/bm.State-preFilterSize=41;/预处理滤波器窗口大小,5-21,oddbm.state-preFilterCap=31;/63,1-31/预处理滤波器的截断值,预处理的输出值仅保留卜preFilterCap,preFilterCap范围内的值,bm.state-SADWindowSize=SADWindowSize0?SADWindowSize:9;/SAD窗口大小5-21bm.state-minDisparity=0;/64最小视差,默认值为0bm.state-numberOfDisparities=

9、numberOfDisparities;/128视差窗口,即最大视差值与最小视差值之差,窗口大小必须是16的整数倍bm.state-textureThreshold=10;/低纹理区域的判断阈值。如果当前SAD窗口内所有邻居像素点的x导数绝对值之和小于指定阈值,则该窗口对应的像素点的视差值为0bm.state-uniquenessRatio=15;/5-15视差唯一性百分比,视差窗口范围内最低代价是次低代价的(1+uniquenessRatio/100)倍时,最低代价对应的视差值才是该像素点的视差,否则该像素点的视差为0bm.state-speckleWindowSize=100;/检查视差连

10、通区域变化度的窗口大小,值为0时取消speckle检查bm.state-speckleRange=32;/视差变化阈值,当窗口内视差变化大于阈值时,该窗口内的视差清零bm.state-disp12MaxDiff=1;左视差图(直接计算得出)和右视差图(通过cvValidateDisparity计算得出)之间的最大容许差异。超过该阈值的视差值将被清零。该参数默认为-1,即不执行左右视差检查。注意在程序调试阶段最好保持该值为-1,以便查看不同视差窗口生成的视差效果。/计算视差bm(leftImage,rightImage,disp);/-Checkitsextremevaluescv:minMax

11、Loc(disp,&minVal,&maxVal);coutMindisp:MaxvalueminValmaxVal;/numberOfDisparities.=(maxVal-minVal)/-4.DisplayitasaCV_8UC1imagedisp.convertTo(disp8u,CV_8U,255/(maxVal-minVal);(numberOfDisparities*16.)cv二normalize(disp8u,disp8u,0,255,CV_MINMAX,CV_8UC1);/obtainnormalizedimagecv二imshow(left,leftImage);cv二

12、imshow(right,leftImage);cv二imshow(Disp,disp8u);cv二imwrite(bm.png,disp8u);cv二waitKey(0);2:SGBMintStereoMatch:SGBMMatching()cv二Matdisp,disp8u;doubleminVal;doublemaxVal;/视差图的极值cv二MatleftImage=cv二imread(./test_images/leftr.png,0);cv二MatrightImage=cv二imread(./test_images/rightr.png,0);intnumberOfDisparit

13、ies=16*2;/*0?numberOfDisparities:(leftImage.cols/8)+15)&-16;intSADWindowSize=11;sgbm.preFilterCap=63;sgbm.SADWindowSize=SADWindowSize0?SADWindowSize:3;/3-11intcn=leftImage.channels();sgbm.P1=8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;P1、P2的值越大,视差越平,toP2P1,可取(50,800)或者(40,2500)sgbm.P2=32*cn*sgbm.SADW

14、indowSize*sgbm.SADWindowSize;sgbm.minDisparity=0;sgbm.numberOfDisparities=numberOfDisparities;128,256sgbm.uniquenessRatio=10;/10,0sgbm.speckleWindowSize=100;/200sgbm.speckleRange=32;sgbm.disp12MaxDiff=1;sgbm.fullDP=1;/计算视差sgbm(leftImage,rightImage,disp);/-Checkitsextremevaluescv二minMaxLoc(disp,&minV

15、al,&maxVal);coutMindisp:MaxvalueminValmaxVal;/numberOfDisparities.=(maxVal-minVal)/-4.DisplayitasaCV_8UC1imagedisp.convertTo(disp8u,CV_8U,255/(maxVal-minVal);/(numberOfDisparities*16.)cv二normalize(disp8u,disp8u,0,255,CV_MINMAX,CV_8UC1);/obtainnormalizedimagecv二imshow(left,leftImage);cv二imshow(right,

16、leftImage);cv二imshow(Disp,disp8u);cv二imwrite(sgbm.png,disp8u);cv二waitKey(0);3:VARintStereoMatch:VARMatching()(cv:Matdisp,disp8u;doubleminVal;doublemaxVal;/视差图的极值cv二MatleftImage=cv二imread(./test_images/leftr.png,0);cv:MatrightImage=cv二imread(./test_images/rightr.png,0);intnumberOfDisparities=16*2;/*0

17、?numberOfDisparities:(leftImage.cols/8)+15)&-16;var.levels=3;/ignoredwithUSE_AUTO_PARAMSvar.pyrScale=0.5;/ignoredwithUSE_AUTO_PARAMSvar.nIt=25;var.minDisp=-numberOfDisparities;var.maxDisp=0;var.poly_n=3;var.poly_sigma=0.0;var.fi=15.0f;var.lambda=0.03f;var.penalization=var.PENALIZATION_TICHONOV;/igno

18、redwithUSE_AUTO_PARAMSvar.cycle=var.CYCLE_V;/ignoredwithUSE_AUTO_PARAMSvar.flags=var.USE_SMART_ID|var.USE_AUTO_PARAMS|var.USE_INITIAL_DISPARITY|var.USE_MEDIAN_FILTERING;/计算视差var(leftImage,rightimage,disp);/-Checkitsextremevaluescv二minMaxLoc(disp,&minVal,&maxVal);coutMindisp:MaxvalueminValendldepth,1

19、);IplImage*right_disp_=cvCreateImage(cvGetSize(leftImage),leftImage-depth,1);cvFindStereoCorrespondenceGC(leftImage,rightImage,left_disp_,right_disp_,state,0);cvReleaseStereoGCState(&state);cvNamedWindow(Left,1);cvNamedWindow(Right,1);cvNamedWindow(GC_left,1);cvNamedWindow(GC_right,1);cvShowImage(Le

20、ft,leftImage);cvShowImage(Right,rightImage);cvNormalize(left_disp_,left_disp_,0,255,CV_MINMAX,CV_8UC1);cvNormalize(right_disp_,right_disp_,0,255,CV_MINMAX,CV_8UC1);cvShowImage(GC_left,left_disp_);cvShowImage(GC_right,right_disp_);cvSaveImage(GC_left.png,left_disp_);cvSaveImage(GC_right.png,right_dis

21、p_);coutendlOverendl;cvWaitKey(O);cvDestroyAllWindows();cvReleaseImage(&leftImage);cvReleaseImage(&rightImage);return0;intStereoMatch:GCMatching_Mat()(doubleminVal;doublemaxVal;/视差图的极值cv:Matdisp8u_l,disp8u_r;cv:MatleftImage=cv二imread(./test_images/leftr31.png,0);cv:MatrightImage=cv二imread(./test_ima

22、ges/rightr31.png,0);CvStereoGCState*state=cvCreateStereoGCState(16,5);cv二Matleft_disp_=leftImage.clone();cv:Matright_disp_=rightImage.clone();IplImagetemp=(IplImage)leftImage;IplImage*leftimg=&temp;IplImagetemp1=(IplImage)rightImage;IplImage*rightimg=&temp1;IplImagetemp2=(IplImage)left_disp_;IplImage*leftdisp=&temp2;IplImagetemp3=(IplImage)right_disp_;IplImage*rightdisp=&temp3;cvFindStereoCorrespondenceGC(leftimg,rightimg,leftdisp,rightdisp,state,0);cvReleaseStereoGCState(&state);cv二namedWindow(Left,1);cv:namedWindow(Right,1);cv:nam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论