热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

立体视觉双目相机立体校正(Bouguet算法)

双目相机立体校正(Bouguet算法)在双目立体视觉的三维重建过程中,需要通过立体匹配算法来进行视差图的计算得到左右两幅图像的视差值&#

双目相机立体校正(Bouguet算法)

在双目立体视觉的三维重建过程中,需要通过立体匹配算法来进行视差图的计算得到左右两幅图像的视差值,进而来计算深度来恢复场景的三维信息。

计算三维场景中目标点在左右两个视图上形成的视差,首先要把该点在左右视图上两个对应的像点匹配起来。然而,在二维空间上匹配对应点是非常耗时的,为了减少匹配搜索范围,需要进行双目相机的立体校正,将二维上的匹配搜索降低到一维。

立体校正:把消除畸变后的两幅图像严格地行对应,利用极线约束使得两幅图像的对极线恰好在同一水平线上,这样一幅图像上任意一点与其在另一幅图像上的对应点就必然具有相同的行号,只需在该行进行一维搜索即可匹配到对应点。

在这里插入图片描述

双目校正:是根据摄像头定标后获得的单目内参数据(焦距、成像原点、畸变系数)和双目相对位置关系(旋转矩阵和平移向量),分别对左右视图进行消除畸变和行对准,使得左右视图的成像原点坐标一致、两摄像头光轴平行、左右成像平面共面、对极线行对齐。

在这里插入图片描述


  • Bouguet立体校正算法

假设通过双目相机的立体标定得到的相机外参为R(向量形式)和T,如下图所示:
在这里插入图片描述
则:(其中:P_l和P_r为同一个世界点分别在左右相机坐标系的三维坐标)

P_l = R*P_r + T;

Bouguet双目立体校正首先是:
1、左相机坐标系沿旋转向量R的正方向旋转一半的R(向量),记该旋转为R_h1(矩阵);
2、右相机坐标系沿旋转向量R的反方向旋转一半的R(向量),记该旋转为R_h2(矩阵),如下图所示:

在这里插入图片描述
最终得到下图所示:
在这里插入图片描述
经过左右相机一半的旋转后,左相机坐标系和右相机坐标系平行但不共面。即,左右相机的x轴、y轴和z轴分别平行,但是左右相机的xoy平面不共面。此时,有:

P_l = P_r + R_h2*T;

令:t = R_h2*T

然后是:
将平行但不共面的左右相机坐标系旋转(R_rect)至与矫正坐标系(O_rect-X_rect Y_rect Z_rect)平行,使左右相机坐标系平行且共面,如下图所示:

在这里插入图片描述
1、矫正坐标系 的 OX 轴 与 左右相机坐标系 原点连线 O_LO_R 平行,其正方向由O_L指向O_R;
2、矫正坐标系 的 XOZ 平面 与 平面 Z_LO_LO_RZ_R 平行,矫正坐标系 的 OY 轴垂直该平面。
3、矫正矩阵 R_rect 的每一列分别对应相机坐标系基轴(单位向量)在矫正坐标系中的投影;而矫正矩阵 R_rect 的每一行分别对应矫正坐标系基轴(单位向量)在相机坐标系中的投影。


  • 构造旋转矩阵R_rect
    使得基线与成像平面平行。构造的方法是通过右相机相对于左相机的偏移矩阵T完成的。

1、平移向量t = R_h2*T(单位化后)就是矫正坐标系(O-XYZ)的 OX 轴在相机坐标系中的投影:

r1 = t/||t||;

2、相机坐标系的 O_LZ_L 轴与矫正坐标系的平面 XOZ 平行,矫正坐标系 OY 轴在相机坐标系中的投影为:

r2 = [(0; 0; 1)×t]/||(0;0;1)||;

3、矫正坐标系 OZ 轴在相机坐标系中的投影为:

r3 = (r1×r2)/||r1×r2||;

所以,矫正矩阵为:

R_rect = (r1'; r2'; r3');

最终得到左右相机的旋转矩阵为:

R_L = R_rect*R_h1;
R_R = R_rect*R_h2;

得到左右相机的旋转矩阵之后,即可进行立体校正步骤。


  • 立体校正步骤

1、分别将两个图像的像素坐标系通过共同的内参矩阵转换到相机坐标系;
2、分别对两个相机坐标系进行旋转得到新的相机坐标系,通过左乘旋转矩阵R_L逆和R_R逆;(极线约束)
3、针对新的相机坐标分别进行左、右相机的去畸变操作;(畸变校正)
4、去畸变操作结束后,分别用左、右相机的内参矩阵将左、右两个相机坐标系重新转换到左、右图像像素坐标系;
5、并分别用左、右源图像的像素值对新左、右图像的像素点进行插值。

还有一些其他的校正方法,具体在这个链接里面


  • Matlab编程代码校正结果

在这里插入图片描述


推荐阅读
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
author-avatar
吉翠芙_899
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有