双目立体视觉空间坐标精度分析
参考链接:https://zhuanlan.zhihu.com/p/362718946
本文主要参考链接博主的理论推导,并按照自己的理解作分析和修正
一、考虑问题:
双目立体视觉系统的精度由那些因素决定?
X/Y/Z三个方向的精度都是一样的吗?如果不是一样,哪个方向精度更好呢?
最常见的情况下,双目立体视觉的最终输出是左相机坐标系下的XYZ坐标,本篇便以这三个分量为精度分析对象。
首先,做一些变量的定义:
b :基线长度,单位mm
f :焦距
x, y :像点坐标(以像主点为原点)
X, Y, Z :相机坐标系下的坐标,单位mm
d :视差
我们先看这三个分量的求解公式:
Z=bfd,X=Zfx,Y=ZfyZ = \frac{bf}{d},\ \ X = \frac{Z}{f}x,\ \ Y = \frac{Z}{f}yZ=dbf, X=fZx, Y=fZy
从公式可知,在硬件参数 b, f 固定的情况下, XYZ 的值和像点坐标值直接相关,XYZ 的精度实际上是像点精度下的空间偏差值,因此我们以像点精度为基本(最小)精度单位。
二、对博主的推导作修正:
当变量定义如下
像素x代表的是尺寸大小,单位mm
焦距f代表物理尺寸,单位mm
视差d代表物理尺寸,单位mm
才能使用博主的推导公式,下面对Z方向的精度推导作解释。
假设像点 x,y 的精度(像素尺寸)为 sx,sys_{x},\ s_{y}sx, sy ,视差 d 的精度为 sds_{d}sd 。通常认为 x,y 的精度是相同的,即sx=sy=ss_{x} = s_{y} = ssx=sy=s ,而视差的精度一般来说可以用公式
sd=sx2s_{d} = \frac{s_{x}}{\sqrt{2}}sd=2sx
Z方向精度
首先对于 Z ,自变量是 d ,我们对 d 求偏导,可得
∂Z∂d=−bfd2=−Z2bf\frac{\partial Z}{\partial d} = - \frac{bf}{d^{2}} = - \frac{Z^{2}}{bf}∂d∂Z=−d2bf=−bfZ2
∂Z/∂d\partial Z/\partial d∂Z/∂d
的单位是mm/mm,物理意义为每毫米视差值代表的空间距离大小,需要再乘以视差精度 sds_{d}sd,才能得出单个视差精度代表的空间距离大小,单位mm/pix
可得:
sZ=ZbZfsd=ZbZfsx2s_{Z} = \frac{Z}{b}\frac{Z}{f}s_{d} = \ \frac{Z}{b}\ \frac{Z}{f}\ \frac{s_{x}}{\sqrt{2}}sZ=bZfZsd= bZ fZ 2sx
可知 Z 方向精度和 Z 的平方正相关,即和物体离相机的距离的平方正相关(严格来说是 Z
方向距离)。
假设q=Zb,m=Zfq = \frac{Z}{b},m = \frac{Z}{f}q=bZ,m=fZ ,则 q
是我们所熟知的基高比的倒数, m 是影像的尺度(即GSD,一个像素代表的空间尺寸),这个公式显示,基高比和GSD对 Z 方向精度起着关键作用,更大的基高(1/q)和更小的GSD (m)有助于提高 Z 方向精度。这可以用于指导双目立体视觉系统的设计。
同理参考博主的推导过程,可得出XY方向精度。
三、推导简化
上述的推导需要知道相机的像素和焦距的实际尺寸,比较麻烦。
通常情况下,标定文件中的内参数据都是以pix为单位,下面以像素pix为单位作推导
当变量定义如下
像素x代表的是像素坐标,单位pix
焦距f代表像素比值,单位pix
视差d代表像素比值,单位pix
Z方向精度
首先对于 Z ,自变量是 d ,我们对 d 求偏导,可得
∂Z∂d=−bfd2=−Z2bf\frac{\partial Z}{\partial d} = - \frac{bf}{d^{2}} = - \frac{Z^{2}}{bf}∂d∂Z=−d2bf=−bfZ2
此时 ∂Z/∂d\partial Z/\partial d∂Z/∂d
的单位是mm/pix,物理意义为单个像素pix代表的空间距离大小,需要再除以2\sqrt{2}2,才能得出单个视差精度代表的空间距离大小
可得:
sZ=12ZbZfs_{Z} = \frac{1}{\sqrt{2}}\frac{Z}{b}\frac{Z}{f}\ sZ=21bZfZ
可知 Z 方向精度和 Z
的平方正相关,即和物体离相机的距离的平方正相关(严格来说是 Z
方向距离)。
XY方向精度
同理,对于 X ,自变量是 Z 和 x ,我们对 Z 和 x 求偏导,可得
∂X∂Z=xf,∂X∂x=Zf\frac{\partial X}{\partial Z} = \frac{x}{f},\ \ \frac{\partial X}{\partial x} = \frac{Z}{f}∂Z∂X=fx, ∂x∂X=fZ
X 方向精度可表示为
sX=(xfsZ)2+(Zf)2s_{X} = \sqrt{{(\frac{x}{f}s_{Z})}^{2} + {(\frac{Z}{f})}^{2}}sX=(fxsZ)2+(fZ)2
同理, Y 方向精度可表示为
sY=(yfsZ)2+(Zf)2s_{Y} = \sqrt{{(\frac{y}{f}s_{Z})}^{2} + {(\frac{Z}{f})}^{2}}sY=(fysZ)2+(fZ)2
把sZ=Z22bf,X=Zfx,Y=Zfys_{Z} = \frac{Z^{2}}{\sqrt{2}bf},\ \ X = \frac{Z}{f}x,\ \ Y = \frac{Z}{f}ysZ=2bfZ2, X=fZx, Y=fZy代入公式,可得
sX=Zf1+(xZ2fb)2=Zf1+(X2b)2s_{X} = \frac{Z}{f}\sqrt{1 + {(\frac{xZ}{\sqrt{2}fb})}^{2}}\ = \frac{Z}{f}\sqrt{1 + {(\frac{X}{\sqrt{2}b})}^{2}}\ sX=fZ1+(2fbxZ)2 =fZ1+(2bX)2
sY=Zf1+(yZ2fb)2=Zf1+(Y2b)2s_{Y} = \frac{Z}{f}\sqrt{1 + {(\frac{yZ}{\sqrt{2}fb})}^{2}}\ = \frac{Z}{f}\sqrt{1 + {(\frac{Y}{\sqrt{2}b})}^{2}}\ sY=fZ1+(2fbyZ)2 =fZ1+(2bY)2
可以看出,X,Y方向的精度不仅跟Z的距离正相关,还跟各自的X,Y方向距离正相关。
Y/Z精度曲线
为了更清晰的观察Y/Z方向精度随着 Z 值变化的趋势,我们来做一个仿真,计算并绘制 Z 和 Y 方向(Y 方向和X方向等尺度,趋势一致)的精度曲线。
根据实际案例参数数据分析
案例一:
Y = 58 mm, Y方向58毫米处的精度
f = 275 pix
b = 32 mm
绘制的精度曲线如下:
案例二:
Y = 580 mm,Y方向580毫米处的精度
f = 275 pix
b = 32 mm
从精度计算的结果和趋势图可以看出,精度数值随着 Z 的增加而变大(意味着精度越来越差),且当 Z 值较大时,
Z方向精度比Y方向精度要差,随着 Z 的增加,差距更加明显。
从仿真数据看,Z方向距离1000mm时,精度值高达80mm,即8%的精度误差。实际上并没有这么大,这与双目立体视觉算法有关。算法的后处理做了子像素拟合,精度为subpix代表的空间大小,因此,实际精度可能只有仿真数据的几分之一。
Y方向的精度不仅跟Z值相关,还跟本身的Y值正相关,Y越大,Y方向的精度越差。
双目立体视觉空间坐标精度分析相关推荐
- 双目立体视觉系统精度分析
from:http://blog.csdn.net/xuyuhua1985/article/details/50151269 <双目立体视觉系统精度分析> 链接 在一个三维测量项目中,如果 ...
- github 视觉测量_教你如何提高双目立体视觉系统的精度
作者:李迎松 来源:公众号 @3D视觉工坊 链接:教你如何提高双目立体视觉系统的精度 开源代码免费获取,欢迎关注作者的GitHub:https://github.com/ethan-li-coding ...
- 关于双目立体视觉的三大基本算法及发展现状的总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热 ...
- 教你如何提高双目立体视觉系统的精度
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源:https://blog.csdn.net/rs_lys/article/details/107 ...
- 双目立体视觉建立深度图_双目立体视觉测量系统应用
双目立体视觉是计算机视觉的一个重要分支,利用计算机技术模拟人类视觉原理,使用计算机被动感知距离的方法,从两个或者多个点观察同一个物体的场景,获取在不同视角下的图像. 根据图像之间像素的匹配关系,通过三 ...
- 双目估计方法_教你提高双目立体视觉系统的精度!
这里开源了一些经典的立体匹配算法,你可能会感兴趣: https://github.com/ethan-li-codinggithub.com 双目立体视觉(Binocular Stereo Visi ...
- python双目视觉三维重建代码_双目立体视觉的三维重建方法与流程
本发明为双目立体视觉的三维重建方法,属于图像处理与机器视觉领域,涉及halcon软件,具体涉及空间场景的三维重建. 背景技术: 三维重建技术作为计算机视觉领域的一个重要分支,在人工智能.虚拟现实.非接 ...
- 双目立体视觉建立深度图_从单幅图像到双目立体视觉的3D目标检测算法
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明 ...
- 双目立体视觉简单介绍
1. 什么是视觉 视觉是一个古老的研究课题,同时又是人类观察世界.认知世界的重要功能和手段.人类从外界获得的信息约有75%来自视觉系统,用机器模拟人类的视觉功能是人们多年的梦想.视觉神经生理学,视觉心 ...
最新文章
- Python DAG—归简法—拓扑排序
- delphi 窗体透明详解TransparentColorValue,窗体透明控件不透明
- python中matplotlib.pyplot的使用示例
- abap dec和curr的区别
- 打印出重复的姓名和重复的次数,并按重复次数排序:
- 使用深度学习TensorFlow框架进行图片识别
- 信息学奥赛C++语言:单词转换
- mysql数据迁移到es_实战ES跨版本数据迁移
- 结构化编程:不确定迭代循环控制do while
- Linux rpm命令详解
- 巴赛尔协议与贷款产品利率解析
- 只有得到祝福才是好婚姻
- matlab2c使用c++实现matlab函数开发配置全解
- 【转】C# 中@符号在字符串中的作用
- python跨平台处理绝对路径和相对路径,open,with
- ShowDoc v2.4.8 发布,IT团队的在线 API 文档工具
- [管理员手册](五)Ubuntu desktop 20.04系统安装显卡驱动NVIDIA cuda pytorch向日葵sunlogin安装
- 苹果系统摩尔庄园是什么服务器,摩尔庄园手游iOS
- 用python将九九乘法口诀表打印在Excel中
- 快速对齐word中目录的页码|容易上手的方法
热门文章
- 利用vpython的单摆运动模拟
- 4人组合蓝牙对讲耳机
- Lumerical官方案例、FDTD时域有限差分法仿真学习(十)——光栅耦合器(Grating coupler)
- 115200波特率-串口基本知识
- 2022最新版本开运网运势测算网站数据node.js版接口数据H5网站算命接口
- Process Monitor的基本使用方法
- 【数学建模笔记】【第七讲】多元线性回归分析(一): 回归分析的定义、对于线性的理解以及内生性问题的探究
- revit学习-图元属性
- php聊天工具下载,online_chat PHP聊天软件
- Crack the fySystem.dll