首页 > 其他分享 >双目测距方案

双目测距方案

时间:2023-08-19 20:23:03浏览次数:35  
标签:方案 begin frac 双目 矩阵 disparity bmatrix end 测距

双目测距方案

Written On 2023-01-26.

双目测距方案流程为:

  1. 立体校正得出重投影矩阵
  2. 识别得到左右目中,待测物体的中心像素点坐标
  3. 计算距离(深度信息)

立体校正得出重投影矩阵

通过立体校正,可用求得重投影矩阵 \(Q\)。

重投影矩阵 \(Q\) 实现了世界坐标系到图像像素坐标系之间的转换。

\[Q = \begin{bmatrix} 1 & 0 & 0 & -c_x \\ 0 & 1 & 0 & -c_y \\ 0 & 0 & 0 & f \\ 0 & 0 & -1/T_x & (c_x - c^{'}_x)/T_x \end{bmatrix} \tag{1} \]

  • \(c_x​, c_y\):左相机主点在图像中的坐标
    • 相机主光轴与像平面的交点即是主点
  • \(f\):重投影后的焦距
  • \(T_x\):两台相机投影中心间的平移(负值)
  • \(c^{'}_x\):​是右相机主点在图像中的坐标
    • 因为经过校正后,每个像素点是行对齐的,也就是右相机主点在图像中的坐标与左相机的相等

\(T_x\) 相反数等于基线,即基线 \(b\):

\[ b = -T_x \tag{2} \]

识别得到左右目中,待测物体的中心像素点坐标

两个线程分别进行识别,获得在各自图像的中心点像素点坐标;
设待测物体在左目图像中,所识别到的为 \((x_l, y_l)\),在右目图像为 \((x_r, y_r)\);

同时,水平装载的双目相机,经过立体校正,左目图像中的任意像素点与其在右目图像中的像素点,行号是相同的;

那么基于左相机,视差 \(disparity\):

\[ disparity = x_l - x_r \tag{3} \]

\[\begin{cases} x = x_l \\ y = y_l = y_r \end{cases} \tag{4} \]

基于立体校正后的理想模型

\[ depth = \frac{fb}{disparity} = \frac{-f \cdot T_x}{disparity} \]

  • \(depth\):深度信息
  • \(f\):相机焦距
  • \(b\):左、右目镜头中心之间的距离(基线)
  • \(disparity\):视差

上式与 \((2)(3)\) 联立,即可求得 \(depth\)。

基于重投影矩阵

重投影矩阵计算深度信息过程

重投影矩阵 \(Q\) 对于世界坐标系到图像像素坐标系之间的转换,其关系为:

\[Q \begin{bmatrix} x \\ y \\ disparity \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & -c_x \\ 0 & 1 & 0 & -c_y \\ 0 & 0 & 0 & f \\ 0 & 0 & -\frac{1}{T_x} & \frac{c_x - c^{'}_x}{T_x} \end{bmatrix}\begin{bmatrix} x \\ y \\ disparity \\ 1 \end{bmatrix} = \begin{bmatrix} x - c_x \\ y - c_y \\ f \\ (-disparity + c_x - c^{'}_x)/T_x \end{bmatrix} = \begin{bmatrix} X \\ Y \\ Z \\ W \end{bmatrix} \]

  • \(x,y\):左目相机中,待测物体中心的像素点坐标
  • \(disparity\):视差

根据此转换关系,可以得到待测物体中心的三维坐标为 \((\frac{X}{W}, \frac{Y}{W}, \frac{Z}{W})\)

展开矩阵可得三维坐标为:

\[\begin{cases} \frac{X}{W} = \frac{x - c_x}{-disparity + c_x - c^{'}_x}T_x\\ \frac{Y}{W} = \frac{y - c_y}{-disparity + c_x - c^{'}_x}T_x\\ \frac{Z}{W} = \frac{f}{-disparity + c_x - c^{'}_x}T_x\\ \end{cases} \]

当立体校正正确时,有 \(c_x = c^{'}_x\);
立体校正正确时,上式转化为:

\[\begin{cases} \frac{X}{W} = \frac{c_x - x}{disparity}T_x\\ \frac{Y}{W} = \frac{c_y - y}{disparity}T_x\\ \frac{Z}{W} = \frac{-f}{disparity}T_x\\ \end{cases} \]

取得深度信息

设所需求得的深度信息为\(depth\)。

可用直接利用矩阵乘法,代码表达形式比较简单:

\[Q \begin{bmatrix} x \\ y \\ disparity \\ 1 \end{bmatrix} = \begin{bmatrix} X \\ Y \\ Z \\ W \end{bmatrix} \tag{5} \]

  • \(Q\):重投影矩阵,由立体校正得来
  • \(x,y\):左目相机中,待测物体中心的像素点坐标
  • \(disparity\):视差

根据此转换关系,可以得到待测物体中心的三维坐标为 \((\frac{X}{W}, \frac{Y}{W}, \frac{Z}{W})\),其中 \(\frac{Z}{W}\) 即为我们需要的深度信息

\[ depth = \frac{Z}{W} \]

上式与 \((1)(3)(4)\) 联立,即可求得 \(depth\)。

也可通过获取重投影矩阵 \(Q\) 的元素,运算比矩阵乘法少了几次:

\[Q = \begin{bmatrix} 1 & 0 & 0 & -c_x \\ 0 & 1 & 0 & -c_y \\ 0 & 0 & 0 & f \\ 0 & 0 & -1/T_x & (c_x - c^{'}_x)/T_x \end{bmatrix} \]

\[ depth = \frac{Z}{W} = \frac{f \cdot T_x}{-disparity + c_x - c^{'}_x} = \frac{Q[2][3]}{disparity \cdot Q[3][2] + Q[3][3]} \]

上式与 \((1)(3)\) 联立,即可求得 \(depth\)。

总的来说,上面提到了的三种计算 \(depth\)的方法,本质上都是一样的;
能不能一样,取决于立体校正是否正确。

方案选择

双目测距方案选择为两个线程识别立体校正后的装甲板,取得识别得到的装甲板中心的像素坐标,进行计算视差,再而通过重投影矩阵,根据上述的三种方法计算距离(深度信息);
因为是静态单一目标,识别计划使用传统视觉。

正常的双目测距来说,需要进行立体匹配计算视差,但那是在计算图像的所有像素点的视差,运算量巨大,使得帧率低;

立体匹配的最终结果也是取得视差,再通过重投影矩阵计算全图的深度信息。即便是击打目标为静态,帧率要求不高,但两个线程识别装甲板所消耗的资源,很明显是比立体匹配单线程计算全图视差要小的;更何况在击打远距离装甲板的场景下,不需要全图的视差信息。

标签:方案,begin,frac,双目,矩阵,disparity,bmatrix,end,测距
From: https://www.cnblogs.com/champrin/p/17643025.html

相关文章

  • OpenCV双目视觉
    OpenCV双目视觉参考资料:[双目立体视觉:标定和校正双目立体视觉:标定和校正双目立体视觉:块匹配视差图计算教你如何提高双目立体视觉系统的精度立体标定cv::stereoCalibrate()flagsCV_CALIB_FIX_INTRINSIC:K和D个矩阵是固定的。这是默认标志。如果你校准好你的相机,你可......
  • 今天玩虚拟机突然xshell连不上了,解决方案如下
    之前配置的集群一点事都没有,当时正巧我的idea就跟吃了屎一样,maven一直连不上,当时把C盘的Host文件前两行注释解掉,后来发现hadoop集群也用不了了,然后我也是头铁,硬找了俩小时错,强迫症犯了,最后再网上找了一份方案。我是把ens-33。bak这个备份文件删了就行了。当时可能就是因为host回环......
  • 【补充】文件存储方案
    【补充】视频托管在处理静态文件(如视频、图片、压缩文件等)时通常的做法是将这些文件从项目的媒体文件夹(mediafolder)中分离出来以避免项目变得庞大且难以管理。取而代之的是使用第三方的文件托管平台来存储这些文件。以下是一些常见的第三方文件存储平台选项:七牛云:......
  • Spring循环依赖即解决方案
    本文会回答什么是循环依赖,Spring怎么解决循环依赖,Spring对于循环依赖无法解决的场景三个问题1.什么是循环依赖?循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相......
  • 2023年度知识付费平台排名揭晓:兔知云课堂领跑私域场景解决方案
     随着数字化时代的来临,知识付费平台成为了知识传播和变现的重要途径。2023年度,知识付费领域呈现出热火朝天的态势,许多平台在竞争中脱颖而出。以下是2023年度排名前十的知识付费平台: 第10名:混沌混沌作为知识付费领域的一员,不仅提供了丰富的知识内容,还致力于满足用户多元化的......
  • wsl2 下输出重定向至 clip.exe 出现中文乱码问题解决方案
    背景win10系统在wls2下安装neovim后希望与windows剪切板通信。按教程添加如下配置。--系统剪切板ifvim.fn.has('wsl')then vim.g.clipboard={ name='WslClipboard', copy={ ['+']='clip.exe', ['*']='clip.exe'......
  • 会员提现秒到自动到账的技术方案
    很多电商平台,分享平台,任务平台,商业模式项目平台,用户的获得佣金和奖励是在平台的余额里面,用户想要把余额提现到自己的银行卡账户里,是需要在财务中心发起提现申请,然后平台看到申请信息后,手动打款给当前提现账户,然后再修改当前提现申请为成功,如果账户信息错误,打款失败,再次手动选择当前......
  • 女包直播活动策划方案
    活动时间:       晚上20:00-24:00活动参与方:产品方:        回力维派专卖店产品方负责人:   ATSTUDIO女包执行方:        运营团队执行方负责人:   李小东联络人:        白小美活动地点:      直播......
  • 隧道代理被识别?爬虫编程的应对策略与解决方案
    没有遇到使用了隧道代理后,还是被网站识别到的问题?别急,今天我来分享一些解决识别问题的妙招!这些方法简单易行,让你的爬虫工作顺利进行,快来跟我一起看看吧!先了解一下,为什么爬虫使用隧道代理后仍然被识别?隧道代理是一种通过在本地计算机和目标服务器之间建立一个安全的隧道来隐藏真实IP......
  • 携手为绿色可持续发展赋能,海康机器人提供新方案
    绿色可持续发展已成为企业发展的重要关注内容,这不仅对企业未来发展有一定的好处,对整个生态的长远发展也是非常有益的,这也是全社会都在关注绿色可持续发展的重要原因。为推动绿色发展,贡献自己的一份力量,海康机器人携手百年企业本特勒,共同为探索绿色智能而努力。本特勒作为一......