openCV3中双目深度BM算法参数解析
最近使用opencv做有关双目校正以及深度检测的工作,在深度检测时使用到BM算法,特别感谢这两位的博客解析https://blog.csdn.net/bennygato/article/details/37708195 , https://blog.csdn.net/zilanpotou182/article/details/72329903
在这两篇博文的指导下很快就熟悉了opencv中视差的使用,但对于新手来说其中的相关参数的作用却不是很了解,在调参数时不能根据实际情况调节相关参数。
opencv中三种算法的运算速度方面BM>SGBM>GC,但相反实际效果BM<SGBM<GC,以及在opencv3中BM算法的更新的使用方法详细内容可以点击第二个链接,进博客自行阅读。在使用BM算法时,需要具体设置的参数
- //BM(bidirectional matching)算法进行双向匹配,首先通过匹配代价在右图中计算得出匹配点。
- //然后相同的原理及计算在左图中的匹配点。比较找到的左匹配点和源匹配点是否一致,如果是,则匹配成功。
- //初始化 stereoBMstate 结构体
- //错误:不允许使用抽象类型的stereoBM对象
- //C++中含有纯虚拟函数并且所有纯虚函数并未完全实现的类称为抽象类,它不能生成对象
- //opencv3以后的版本不能这么用了
- //StereoBM bm;
- //int unitDisparity = 15;//40
- //int numberOfDisparities = unitDisparity * 16;
- //bm.state->roi1 = roi1;
- //bm.state->roi2 = roi2;
- //bm.state->preFilterCap = 13;
- //bm.state->SADWindowSize = 19;
- //bm.state->minDisparity = 0;
- //bm.state->numberOfDisparities = numberOfDisparities;
- //bm.state->textureThreshold = 1000;
- //bm.state->uniquenessRatio = 1;
- //bm.state->speckleWindowSize = 200;
- //bm.state->speckleRange = 32;
- //bm.state->disp12MaxDiff = -1;
- cv::Ptr<cv::StereoBM> bm = cv::StereoBM::create();
- int unitDisparity = 15;//40
- int numberOfDisparities = unitDisparity * 16;
- bm->setROI1(roi1);
- bm->setROI2 (roi2);
- bm->setPreFilterCap(13);
- bm->setBlockSize = 15; //SAD窗口大小 设置为奇数
- bm->setMinDisparity(0); //确定匹配搜索从哪里开始 默认值是0
- bm->setNumDisparities(numberOfDisparities) ; //在该数值确定的视差范围内进行搜索,视差窗口
- // 即最大视差值与最小视差值之差, 大小必须是16的整数倍
- bm->setTextureThreshold(1000); //保证有足够的纹理以克服噪声
- bm->setUniquenessRatio(1); //使用匹配功能模式
- bm->setSpeckleWindowSize(200); //检查视差连通区域变化度的窗口大小, 值为0时取消 speckle 检查
- bm->setSpeckleRange(32); // 视差变化阈值,当窗口内视差变化大于阈值时,该窗口内的视差清零
- bm->setDisp12MaxDiff(-1); //左视差图(直接计算得出)和右视差图(通过cvValidateDisparity计算得出)
- // 之间的最大容许差异,默认为-1
其中影响最大的是SAD窗口大小、setNumDisparities、setSpeckleWindowSize三个参数。
SAD一般为5以上的奇数, numberOfDisparities = ((src0.cols / 8) + 15) & -16;
在实际的调试过程中,经过多次调解上面三个参数在显示时发现根本不能正常观测到深度信息,像图一样这种白色块过大,不能显示更加详细的信息的情况。
调节bm->setSpeckleWindowSize(0); 这种情况是此参数过大,逐步减小此参数便能得到细节信息。这张图片上传不了就不上效果图了。另外视差效果图白色块过大看不出效果的情况也可能是视差变化阈值bm->setSpeckleRange(32);
openCV3中双目深度BM算法参数解析相关推荐
- python算法工程师招聘_经验 | 我心目中招聘深度学习算法工程师的标准
原标题:经验 | 我心目中招聘深度学习算法工程师的标准 本文转载自有三AI 目前利用深度学习这个工具可以做很多事情,各大领域(图像,语音,NLP等),各大行业(娱乐,金融,医疗等)这几年都被玩的风生水 ...
- 万字长文解读深度学习算法在自动驾驶规控中的应用
交流群 | 进"传感器群/滑板底盘群"请加微信号:xsh041388 交流群 | 进"汽车基础软件群"请加微信号:ckc1087 备注信息:群名称 + 真实姓名 ...
- 从原理到应用落地,一文读懂推荐系统中的深度学习技术
作者丨gongyouliu.zandy 来源丨大数据与人工智能(ID:ai-big-data) 2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一时成为轰动全球的重 ...
- 精准医学中的深度学习和影像组学
影像科正在经历一种范式转变,即使用人工智能与机器集成以及深度学习与影像组学更好地定义组织特征,从而实现计算机科学与影像学的共生关系.研究的目标是使用集成的深度学习和具有影像学参数的影像组学来为患者进行 ...
- 深度多目标跟踪算法综述
其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 导言 基 ...
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- java会员卡的绑定和解绑_SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- 刚发布!开发者调查报告:机器学习/深度学习算法工程师急缺
近日,CSDN发布了<2019-2020中国开发者调查报告>,本报告从2004年开始针对一年一度的CSDN开发者大调查数据分析结果形成,是迄今为止覆盖国内各类开发者人群数量最多.辐射地域. ...
- python getopt使用_Python命令行参数解析模块getopt使用实例
这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...
最新文章
- 需要监控JanusGraph的一些指标
- 京东果然发福了:宣布涨薪两个月! 2 年内将员工平均薪资涨至 16 薪
- 每个程序员都必须知道的8种数据结构
- MPI学习存在的一些问题
- 模拟电梯控制软件设计c语言,模拟电梯控制系统设计.docx
- linux 文件名带特殊符号,Linux删除含有特殊符号文件名的文件
- hisicv200 exfat支持(转)
- linux .net环境变量,Linux编程 系统环境变量位置, 环境变量持久化
- 关于Sql Server2012(.net framework 3.5安装)安装问题
- 宾馆酒店客房管理系统java源码
- 打开chm文件提示“已取消到该网页的导航”
- 算法入门到进阶(二)——STL和基本数据结构(vector和栈)
- “恐怖”的阿里一面,我究竟想问什么
- layui上传图片需携带额外参数
- Building Worlds In Unreal 学习笔记——07-11 岩石树落木灌木绘制/溪水着色器/潮湿与焦散贴花/后处理
- PDF可以通过OCR图文识别软件转换为JPEG图像吗
- 什么是通信协议?什么是互操作性?
- 赴日本留学的基本条件
- python describe 分位数设置_Python Pandas – 如何通过describe函数计算25百分位数
- CRC (Cyclic redundancy check) java 实现