github 视觉测量_教你如何提高双目立体视觉系统的精度
作者:李迎松
来源:公众号 @3D视觉工坊
链接:教你如何提高双目立体视觉系统的精度
开源代码免费获取,欢迎关注作者的GitHub:https://github.com/ethan-li-coding
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法1。
精度,是双目立体视觉至关重要的指标。
双目立体视觉系统,不谈精度几许,未免显得业余!
精度不行?
“来,小同志往边上让一让,下一个!”
精度很高?
“小伙子你们设备多少钱!能打个折不!”
做过双目研究的伙伴们,肯定是经常和精度打交道的,大部分人也肯定知道,双目立体视觉的精度主要看的是深度方向的精度!深度图是很多双目设备的输出数据,通过深度图以及相机参数,可以算出三维点云的空间坐标,公式如下:
可知深度D的角色感很强,把深度估计准了,那三维点也就准了。(什么,相机标定也不准?当我没说!)
所以,如何让深度精度更高?
我们再来看一个经典公式:
这可再熟悉不过了,D是深度,B是基线,f是焦距(像素单位),d是视差。咱们一分为二看这个公式,右边分母部分是像素视差值,和算法相关;分子部分是系统硬件参数,和硬件相关。
可知深度精度是由算法和硬件综合决定。
研发:“哥们,你们硬件做的不行啊!”
硬件:“屁,是你们算法不行!”
老板:“都是废物!”
对各参数不太清楚的同学可以看下图:
1 算法因素
咱们先分析算法对精度的影响。那么硬件参数B和f就假设是已知且恒定的了。假设视差偏差为Δd,则计算视差偏差Δd下的深度偏差ΔD:
B和f已知且恒定,如果我们把D也恒定,也就是在同一个深度距离下评判精度,由公式(1)可知d也就恒定。此时容易发现,Δd越小,ΔD越小。说明:
(一)视差偏差越小,深度偏差越小;换言之,算法的视差精度越高,深度精度越高,深度精度和视差精度成正比。所以更高精度的视差估计算法,自然能带来更高的深度精度。
2 硬件因素
上面分析算法对精度的影响,所以固定了硬件参数B和f。现在我们来分析视差精度恒定的情况下,硬件参数如何影响精度。还是基于上面三个公式,但是做一些修改,把公式(1)代入到(3)中,如下:
同样,我们把D恒定,也就是在同一个深度距离下评判精度,因为视差精度恒定(也就是视差估计算法定了,精度差不多固定了),因此Δd也恒定。不难发现,B和f对D有相同的影响关系,B越大、f越大,ΔD越小。说明:
(二)基线越大、焦距(像素单位)越长,深度精度越高。深度精度和基线、焦距成正比。
从公式中我们看到,影响ΔD的实际是基线和焦距的乘积,所以若两个一起增大,那深度精度必然增大,若一个增大一个减小,那么深度精度可能增大也可能减小。另一个需要说明的是,f是焦距的像素单位,它和焦距的空间尺寸和像素大小有关,设焦距的空间尺寸为f0,像素大小为s,则f的计算公式为:
显然,s越小,f越大。我们知道s的大小是相机传感器尺寸决定的,而焦距是镜头决定的。所以选相机的时候要了解第三个知识:
(三)像素大小越小,同样的物理尺寸焦距有更长的像素尺寸焦距,深度精度就越高。
3 深度范围
上面我们分析了算法参数和硬件参数对深度精度的影响,但还有一个重要的因素,它即非硬件相关也非算法相关,它就是深度本身的大小,也即深度范围。简单的说,目标离镜头的距离不同,精度是不一样的。对上一节的公式(3)再多做一步推导:
这里讨论深度范围,所以假设B、f和Δd都恒定。显然可以发现,D越小,ΔD越小。所以我们得出第四个结论:
(四)测量目标离系统越近,深度精度越高。
4 总结我想大家其实在实际应用中都会有一些直观的理解,比如(1)算法越好,精度越高,明摆着嘛!(2)相机分辨率越高,精度越高,这不废话嘛!(3)基线越长,精度越高,显而易见嘛!本文的目的就是通过公式推导来严格证明,以让大家更加清晰的明白各因素影响精度的本质,从而更科学的指导双目系统的设计。再来汇总一下上面的四条结论:
(一)视差偏差越小,深度偏差越小;换言之,算法的视差精度越高,深度精度越高,深度精度和视差精度成正比。.
(二)基线越大、焦距(像素单位)越长,深度精度越高。深度精度和基线、焦距成正比。(三)像素大小越小,同样的物理尺寸焦距有更长的像素尺寸焦距,深度精度就越高。
(四)测量目标离系统越近,深度精度越高。所以同学们你们现在知道怎么设计双目系统能提高精度了吗?
1、选高精度视差估计算法
2、在应用场景允许、结构稳定性满足需求的情况下,尽可能延长基线
3、在视场范围、景深满足需求的情况下,尽可能选择长焦镜头
4、在算力允许的情况下,选择高分辨率相机(本质上应该是像素尺寸小的相机,有的相机提高了分辨率,只是提升了视域,但像素尺寸不变,那精度也不变)
5、测量距离适当拉近(这点往往是场景需求决定的)
备注:本文作者松博在哔哩哔哩做的立体匹配直播视频:
知乎视频www.zhihu.com
本文作者在CSDN上首发,大家也可以前往CSDN阅读。
本文仅做学术分享,如有侵权,请联系删文。
往期干货资源:
汇总 | 国内最全的3D视觉学习资源,涉及计算机视觉、SLAM、三维重建、点云处理、姿态估计、深度估计、3D检测、自动驾驶、深度学习(3D+2D)、图像处理、立体视觉、结构光等方向!
汇总 | 3D目标检测(基于点云、双目、单目)
汇总 | 6D姿态估计算法(基于点云、单目、投票方式)
汇总 | 三维重建算法实战(单目重建、立体视觉、多视图几何)
汇总 | 3D点云后处理算法(匹配、检索、滤波、识别)
汇总 | SLAM算法(视觉里程计、后端优化、回环检测)
汇总 | 深度学习&自动驾驶前沿算法研究(检测、分割、多传感器融合)
汇总 | 相机标定算法
汇总 | 事件相机原理
汇总 | 结构光经典算法
汇总 | 缺陷检测常用算法与实战技巧
github 视觉测量_教你如何提高双目立体视觉系统的精度相关推荐
- 双目视觉焦距_教你如何提高双目立体视觉系统的精度
双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维 ...
- 教你如何提高双目立体视觉系统的精度
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源:https://blog.csdn.net/rs_lys/article/details/107 ...
- 双目估计方法_教你提高双目立体视觉系统的精度!
这里开源了一些经典的立体匹配算法,你可能会感兴趣: https://github.com/ethan-li-codinggithub.com 双目立体视觉(Binocular Stereo Visi ...
- 双目视觉焦距_教你提高双目立体视觉系统的精度!
这里开源了一些经典的立体匹配算法,你可能会感兴趣:https://github.com/ethan-li-codinggithub.com 双目立体视觉(Binocular Stereo Visio ...
- 【技术流派】教你提高双目立体视觉系统的精度!
开源代码免费获取,欢迎关注我的GitHub: https://github.com/ethan-li-coding 双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形 ...
- github 视觉测量_计算机视觉八大任务全概述:PaddlePaddle工程师详解热门视觉模型...
来自百度的深度学习工程师,围绕计算机视觉领域的八大任务,包括:图像分类.目标检测.图像语义分割.场景文字识别.图像生成.人体关键点检测.视频分类.度量学习等,进行了较为详细的综述并形成此文. 这篇综述 ...
- github 视觉测量_计算机视觉资源推荐:多人实时关键点(脸、手、足)检测库...
本项目是卡耐基梅隆大学实验室项目 OpenPose represents the first real-time multi-person system to jointly detect human ...
- 双目立体视觉案例源代码 基于HALCCN的双目立体视觉系统实现 基于openev的双目测距 双目测距-opency 通用化视堂系线板架 Halcon视觉例子程序
双目立体视觉案例源代码 双目测距 双目摄像头图像获取 标定代码 1.Halcoa 10三椎视党 2.Halcon视觉例子程序 wa2013 3.OpenCV+OpencL.双目立体视觉三幢重建 vs2 ...
- 光盘显示0字节可用_教你怎么用光盘重装系统
怎么用光盘重装系统?很多小伙伴只会系统光盘安装系统的方法,除了系统光盘重装系统,还有硬盘安装.一键重装.U盘重装.Ghost重装系统等等方法,下面除了教你怎么用光盘重装系统之外,还给你介绍下一键重装系 ...
最新文章
- TypeKit ,use online fonts
- python中字典dict的中的copy和deepcopy
- 独家 | 谷歌医学AI在生活中的精确度(附链接)
- 首个卡车全栈自动驾驶系统发布:嬴彻轩辕!年内量产上路
- java中字符流 字节流_理解Java中字符流与字节流的区别
- Silverlight 项目开发准则参考
- 【转】IT名企面试:腾讯笔试题(2)
- forward_list容器
- java会被rust替代吗_Rust 未来会成为主流的编程语言吗?
- matlab中gama,matlab积分结果中的gamma()函数参数问题,急求解答!!!
- 程序中变量分布的区域总结 堆 栈 字符常量区 全局数据区 静态存储区
- 在网页中嵌入任意字体(特殊字体/自定义字体)的解决方案
- ThreadLocal到底是什么,尚硅谷docker高级
- visibility和hidden
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- 实用的两个网页小技巧(复制文本、下载文档)
- Halo博客搭建及配套小程序使用教程
- 可以退税吗_个人所得税APP详细操作步骤来了!你成功“退税”了吗?
- 谈谈软件人的职业规划
- python列表修改元素_python修改list中所有元素类型的三种方法
热门文章
- iOS9应用隐私控制-外部调用
- html中#include file的使用方法
- ubuntu 下利用ndiswrapper安装无线网卡驱动
- 机器学习01-定义、线性回归、梯度下降
- CV00-04-卷积
- framer x使用教程_如何使用Framer Motion将交互式动画和页面过渡添加到Next.js Web应用程序
- 如何使用JavaScript Math.floor生成范围内的随机整数-已解决
- 定制开发软件所有权_职业所有权软件开发人员指南
- scrum项目管理_Scrum,用于初创企业(或针对该项目的任何项目)
- 项目部署时网关怎么回事_使用Kubernetes部署聊天网关(或技术按预期运行时)...