远距离双目视觉测量系统纵深方向测量精度较低原因分析
创始人
2024-03-01 16:46:44
0次

两台相机基线距离约1200mm,对20m外的一个LED发光点进行持续观测,效果如下视频所示:

可见ZZZ方向的重复性精度比较差,波动量甚至多于2mm了,而以10mm导轨基准距离为基准,精度测试结果也比较差,如下图所示:

现对这种情况进行分析。双目视觉测量过程中,在进行完立体矫正后,左侧相机的成像模型可简化为遵循如下图所示的几何关系:

在这里插入图片描述其中,fff表示焦距,x0x_0x0​表示物点在左相机像面距离主点在uuu方向的距离值,dxd_xdx​表示由于像点质心提取的误差,ddd代表像点距离基线中点的距离,L1L_1L1​表示物点距离基线中点之间的距离,L2L_2L2​表示像点产生dxd_xdx​误差对应的虚拟物点相对于基线中点之间的距离。根据简单的相似三角形原理,有如下公式成立:

L1f=dx+dx0\frac{L_1}{f}= \frac{d_x+d}{x_0} fL1​​=x0​dx​+d​,
L2f=dx0+dx\frac{L_2}{f}= \frac{d}{x_0+d_x} fL2​​=x0​+dx​d​
根据这两个公式,可知由于像面uuu方向坐标分量发生变化引起的纵深方向误差为L1−L2L_1-L_2L1​−L2​,则将上述两个公式带入L1−L2L_1-L_2L1​−L2​,可以得到如下等式:
L1−L2=fdx+dx0−fdx0+dxL_1-L_2=f\frac{d_x+d}{x_0}-f\frac{d}{x_0+d_x} L1​−L2​=fx0​dx​+d​−fx0​+dx​d​
整理得:
L1−L2=fdxx0+fd(1x0−1x0+dx)L_1-L_2=\frac{fd_x}{x_0}+fd(\frac{1}{x_0}-\frac{1}{x_0+d_x}) L1​−L2​=x0​fdx​​+fd(x0​1​−x0​+dx​1​)
从这个师资可以看出来,如果想让纵深方向的误差
L1−L2L_1-L_2L1​−L2​尽可能小,需要保证x0x_0x0​尽可能大,也就是左相机光斑位置在水平方向尽可能距离图像中心远一些,让dxd_xdx​尽可能小,也就是质心识别精度尽可能高。但是这个模型中d、x0、fd、x_0、fd、x0​、f三者之间存在着一定的耦合关系。对这个问题进行仿真,代码如下:

import numpy as np
import cv2
import math# 左相机内参矩阵
mtx_l = np.array([[10015.2812383159, 0.00000000e+00, 659.197479841463, 0],[0.00000000e+00, 10014.0958495599, 470.925014875954, 0],[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 0]])# 右相机内参矩阵
mtx_r = np.array([[10051.5363357765, 0.00000000e+00, 697.234956187232, 0],[0.00000000e+00, 10050.409518322, 424.52423603342, 0],[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 0]])# 两个相机之间的旋转矩阵R_lr和平移矩阵T_lr
R_lr = np.array([[0.999943847448837, 0.008365705276491, 0.006505145997198],[-0.008395292001614, 0.999954478671489, 0.004534275800987],[-0.006466917459317, -0.004588633789993, 0.999968561215059]])
T_lr = np.array([[-896.678233796519],[-23.2722512628781],[39.3967835788876]])# 通过相机内参计算实际的左相机焦距
f_l = mtx_l[0][0] * 0.0053# 设置光斑质心u方向的偏移量,质心偏移量的单位是像素,进行相似三角形比例计算时需要将单位转换为mm。
d_x = 0.1 * 0.0053# 输入左相机采集到的光斑质心坐标
l0 = np.array([1050.5, 751.134])# 计算x_0,为质心坐标的u与相机内参中u_0的差值:(u-u_0),将单位统一为mm。
x_0 = (l0[0] - mtx_l[0][2]) * 0.0053# 计算d,在模型中为基线长度D的1/2减去x_0和像素坐标偏移量:(D/2-x_0-d_x),计算时需要将单位统一为mm。
d = math.sqrt(T_lr[0] * T_lr[0] + T_lr[1] * T_lr[1] + T_lr[2] * T_lr[2]) / 2 - x_0 - d_x# 根据针孔相机成像模型和相似三角形公式推导,计算不同像素偏移量u对空间点三维坐标的解算影响,用解算增加质心偏移量前后三维点坐标之间的距离z表示。
z = (f_l * d_x) / x_0 + f_l * d * (1 / x_0 - 1 / (x_0 + d_x))
print(z)

和实测实验数据进行联合半物理仿真,数据如下图所示:
在这里插入图片描述
可以看出仿真误差和实际误差累积趋势相同,实际误差大于仿真误差,证明了:远距离双目视觉测量系统中,如果被测目标的质心在水平uuu方向存在0.1像素的误差,目标点纵深方向的坐标会波动约2mm。所以可以得到如下两点结论:

  • 双目视觉测量系统不适合执行远距离测量任务;
  • 水平方向的质心提取误差会引起被观测点空间三维坐标纵深方向分量较大的不确定度。

实测场景如下图所示:
在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...