OpenCV中的匹配算法
来源:互联网 发布:新标准韩国语软件 编辑:程序博客网 时间:2024/04/29 04:10
有了标定参数,校准的过程就很简单了。
我使用的是OpenCV中的cvStereoRectify,得出校准参数之后用cvRemap来校准输入的左右图像。这部分的代码参考的是Learning OpenCV 十二章的例子。
校准之后,就可以立体匹配了。立体匹配OpenCV里面有两种方法,一种是Block Matching,一种是Graph Cut。Block Matching用的是SAD方法,速度比较快,但效果一般。Graph Cut可以参考Kolmogrov03的那篇博士论文,效果不错,但是运行速度实在是慢到不能忍。所以还是选择BM。
对OpenCV中涉及的三种立体匹配算法进行代码及各自优缺点总结:
首先我们看一下BM算法:
该算法代码:
- CvStereoBMState
*BMState = cvCreateStereoBMState(); - int
SADWindowSize=15; -
BMState->SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 9; -
BMState->minDisparity = 0; -
BMState->numberOfDisparities = 32; -
BMState->textureThreshold = 10; -
BMState->uniquenessRatio = 15; -
BMState->speckleWindowSize = 100; -
BMState->speckleRange = 32; -
BMState->disp12MaxDiff = 1; -
cvFindStereoCorresponden ceBM( left, right, left_disp_,BMState); -
cvNormalize( left_disp_, left_vdisp, 0, 256, CV_MINMAX );
其中minDisparity是控制匹配搜索的第一个参数,代表了匹配搜苏从哪里开始,numberOfDisparities表示最大搜索视差数uniquenessRatio表示匹配功能函数,这三个参数比较重要,可以根据实验给予参数值。
该方法速度最快,一副320*240的灰度图匹配时间为31ms,视差图如下。
第二种方法是SGBM方法这是OpenCV的一种新算法:
- cv::StereoSGBM
sgbm; -
sgbm.preFilterCap = 63; -
SADWindowSize=11; -
cn = 1; -
sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3; -
sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; -
sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; -
sgbm.minDisparity = 0; -
sgbm.numberOfDisparities = 32; -
sgbm.uniquenessRatio = 10; -
sgbm.speckleWindowSize = 100; -
sgbm.speckleRange = 32; -
sgbm.disp12MaxDiff = 1; -
-
sgbm(left , right , left_disp_); -
sgbm(right, left , right_disp_);
各参数设置如BM方法,速度比较快,320*240的灰度图匹配时间为78ms,视差效果如下图。
第三种为GC方法:
- CvStereoGCState*
state = cvCreateStereoGCState( 16, 2 ); -
left_disp_ =cvCreateMat( left->height,left->width, CV_32F ); -
right_disp_ =cvCreateMat( right->height,right->width,CV_32F ); -
cvFindStereoCorresponden ceGC( left, right, left_disp_, right_disp_, state, 0 ); -
cvReleaseStereoGCState( &state );
该方法速度超慢,但效果超好。
http://www.opencv.org.cn/forum/viewtopic.php?t=23854
http://blog.csdn.net/scyscyao/article/details/5443341?reload
http://www.opencv.org.cn/forum/viewtopic.php?t=23854
- OpenCV中的匹配算法
- opencv图像匹配算法
- SAD立体匹配算法在opencv中的实现
- SAD立体匹配算法在opencv中的实现
- opencv中的模板匹配
- OpenCV的RobustMatch匹配算法
- OpenCV的RobustMatch匹配算法
- OpenCV的RobustMatch匹配算法
- OpenCV中的模板匹配/Filter2d
- OpenCV中的SURF特征匹配
- opencv中的匹配函数matchTemplate
- 立体匹配算法(Stereo Matching)及其在OpenCV中的应用
- Opencv中的pca算法
- opencv-FLANN特征匹配算法实现
- SIFT匹配算法分析(Practical OpenCV)
- OpenCV图像匹配算法之sift
- OpenCV图像匹配算法之surf
- OpenCV图像匹配算法之orb
- storage class specified for parameter
- 机器学习的开源工具
- 细说一些被人忽略的细节——CSS中的背景
- Linux下使用MyEclipse进行Hadoop的开发
- HDU 1394 Minimum Inversion Number
- OpenCV中的匹配算法
- Exploded location overlaps an existing deployment
- HTML5 标签简介(三)
- Protocol Buffers (协议缓冲) 介绍及安装
- 守护进程:代码的分析
- Android 开发之多线程处理、Handler 详解
- S3C2440 FCLK, HCLK, PCLK的关系
- linux 计算时间差
- mysql/hibernate在left join中遇到的问题