问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

双目立体视觉问题的由来及实现步骤

创作时间:
作者:
@小白创作中心

双目立体视觉问题的由来及实现步骤

引用
CSDN
1.
https://blog.csdn.net/alawn123/article/details/136453154

双目立体视觉系统的主要流程通常包括以下几个关键步骤:

相机标定

首先,需要对每个相机进行单独的标定,以获取它们的内参(焦距、主点坐标、畸变系数)和外参(旋转矩阵和平移向量)。

  • 内参标定:确定每个相机的内部参数,如焦距、光心(主点)坐标、径向畸变和切向畸变系数。
  • 外参标定:确定双目相机之间的相对位置和姿态,包括基线长度、旋转矩阵和平移向量,使用从两个相机捕获的标定板图像中的匹配点来计算基础矩阵或本质矩阵。

立体校正

根据相机的标定的旋转矩阵和平移向量等,对两个相机捕获的原始图像进行校正,使得校正后的图像在同一平面上且互相平行。这样,图像的每行像素之间共线,简化了后续的立体匹配过程。

  • 立体校正的目的是调整图像,使得左图像和右图像的极线在水平方向上对齐(或者说相机光轴平行),从而简化立体匹配过程。
  • 校正过程通常涉及到对图像进行仿射变换或透视变换,以消除垂直视差,使得对应点的水平位置对齐。

图像重映射

根据校正后的参数,对图像进行重映射(remapping),生成新的校正后的图像。在这个过程中,图像的像素会被重新分配到新的位置上,以确保对应点的水平对齐。

立体匹配

在立体校正和图像重映射后的图像上进行像素点的匹配。这个过程涉及计算左图像中的像素点与右图像中相应位置的像素点之间的相似度,以找到最佳匹配点。

  • 匹配方法可以是基于区域的(如块匹配)、基于特征的(如SIFT、SURF)或基于深度学习的。
  • 一般基于极线约束:使用基础矩阵或本质矩阵,可以计算出每个像素点在另一个相机图像中的极线位置,匹配只在极线上进行,可以加快匹配速度和运算量。

深度计算

根据立体匹配得到的视差图(Disparity Map),计算每个像素对应的深度信息。视差是左图像和右图像中对应点之间的水平像素差异,与物体的深度成反比。

  • 深度计算通常涉及到三角测量,使用相机的内参和基线距离来计算物体的实际深度。

三维重建

使用深度信息,可以将二维图像中的点转换为三维空间中的坐标,从而重建场景的三维结构。

后处理

对深度图进行优化,包括去除错误匹配点、平滑处理、滤波等,以提高深度图的质量。

这些步骤共同作用,使得双目立体视觉系统能够从两个不同视角的图像中恢复出场景的三维信息。在实际应用中,这些步骤可能需要根据具体的系统设计和应用需求进行调整。

在实际应用中,可以使用计算机视觉库(如OpenCV)中的函数来辅助完成这些步骤。例如,OpenCV提供了cvStereoRectify函数来进行立体校正,以及cvInitUndistortRectifyMapcvRemap函数来生成校正映射并重映射图像。这些函数可以帮助开发者处理双目相机的校正问题,从而获得更准确的立体视觉结果。

补充:立体视觉的问题由来

上图从物理原理上展示了为什么单目相机不能测量深度值而双目可以的原因。我们看到红色线条上三个不同远近的黑色的点在下方相机上投影在同一个位置,因此单目相机无法分辨成的像到底是远的那个点还是近的那个点,但是它们在上方相机的投影却位于三个不同位置,因此通过两个相机的观察可以确定到底是哪一个点。

上图描述了左相机平面上的点x有可能是右相机平面上的点x',而x'是在所谓的极线上移动的。到底是在极线上的哪个位置怎么决定呢?答案是左右相机图像的特征匹配。一旦匹配则x'在右相机平面极线上位置则定了,x和x'共同确定X(第一幅图P)的位置。

上面是一个理想化的状态,比方假设相机光轴是平行的等。

实际上,左右相机图像的特征匹配需要找两张照片中的对应的点,如何在两张不同的照片中寻找相对应的两个点是有难度。给定P1的情况下,在另一张图片上遍历所有像素点搜索P2在计算上是有很大代价的。

幸运的是,我们可以用对极约束(epipolar constraint)将搜索问题简化到一维上。根据对极几何的知识,我们可以知道p的对应点一定是在另一张图片的对应极线上面的。

但是还有一个问题:因为大部分情况下极线是倾斜的(下图)使用图像块去匹配的时候,往往效率不高。我们希望的情况是能将极线与基线平行,即保持水平。因此我们需要进行上述步骤2所述的立体校正(Stereo Rectification)。

校正过程图示如下:

之后就可以使用上述步骤4立体匹配(Stereo Matching)找到对应的点以后,再通过步骤5深度计算(Depth Estimation)得到目标距离(相似三角形相关知识)。

本质矩阵和基础矩阵的区别是什么?

本质矩阵和基础矩阵的区别是什么?各自是个什么东西?用大白话或者非专业性的语言来解释。

(99+ 封私信 / 81 条消息) 本质矩阵和基础矩阵的区别是什么? - 知乎 (zhihu.com)

为本质矩阵,

为基础矩阵,

为相机内参矩阵。

利用本质矩阵和相机内参数矩阵相乘可以得到基础矩阵。

总结:

本质矩阵(Essentical Matrix):空间中的一点,在不同视角摄像机下摄像机坐标系中的表示之间的关系;

(可以理解为一个点P在左图像中的像点经过旋转R和平移T变为其在右图像中的像点,R和T就是本质矩阵E)实际上我们在求解坐标变换矩阵的时候,确实是先求解本质矩阵,然后再对本质矩阵进行分解来得到旋转和平移的变换矩阵。

本质矩阵使用的前提是已知相机内参矩阵(标定完成的基础上)。本质矩阵归一化图像坐标下的基本矩阵的特殊情况。基本矩阵把要求标定相机这样一个(非本质的)的基本假设去掉了。

E是两个标准相机相对关系的参数,换言之,给定两个已标定相机的相对位置关系,E即被确定。

本质矩阵由旋转和平移约束,由于平移和旋转都各有三个自由度,那么本质矩阵有6个自由度。但是由于尺度等价性,所以本质矩阵实际上只有5个自由度

基础矩阵(Fundamental Matrix):空间中的一点,在不同视角摄像机下图像坐标系中的关系表示之间的关系;

基础矩阵的引入是方便利用像素点的位置来求解位姿变换矩阵。

基本矩阵已包含相机内参矩阵参数。基本矩阵体现了两视图几何(对极几何,epipolar geometry)的内在射影几何(projective geometry)关系。

F是任意两个相机相对关系的参数,换言之,给定了两个相机的相对位置关系,F即被确定。

应矩阵(Homography matrix)

单应性(Homography)变换可以理解为描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。

此处给出单应性不严谨的定义:用 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性,可以用 [透视变换] 表示 。

单应性矩阵主要用来解决两个问题:

  • 一是表述真实世界中一个平面与对应它图像的透视变换
  • 二是从通过透视变换实现图像从一种视图变换到另外一种视图

内参矩阵取决于相机内部参数,外参矩阵取决于相机坐标系和世界坐标系的位置。而相机标定,就可以帮我们求解出内参矩阵和外参矩阵。

另外一种描述:

从单应矩阵定义式子来看,它同时包含了相机内参和外参。

因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以得到其单应矩阵H。然后由单应矩阵计算相机内参,进而结合相机内参再计算外参R和T。有了标定过程计算好的内外参数就可以进行上述步骤2所述的立体校正(Stereo Rectification)了。

文献“非常详细的相机标定原理”(三)和(四)详细描述了如何通过标定计算单应性矩阵,以及如何产生相机内参和外参的过程。

感谢魏川的图文。

感谢kokerf的图。

基本矩阵、本质矩阵和单应矩阵-CSDN博客

感谢wo_wuhao

双目立体视觉(双摄测距)_双目立体测量-CSDN博客

感谢知乎 文刀竹夭双目视觉之立体校正的过程是什么? 的图文。(99+ 封私信 / 81 条消息) 双目视觉之立体校正的过程是什么? - 知乎 (zhihu.com)

感谢翁和畅

三十三本质矩阵、基础矩阵、单应性矩阵的异同? - 知乎 (zhihu.com)

感谢惊鸿一博

三维重建笔记_相机标定(相机矩阵求解)基本概念汇总_相机标定 旋转矩阵-CSDN博客

感谢白裳

单应性Homography估计:从传统算法到深度学习 - 知乎 (zhihu.com)

感谢An efforter

非常详细的相机标定原理(三)(张正友相机标定法初见和单应性矩阵)_相机张氏标定法-CSDN博客

非常详细的相机标定原理(四)(张正友相机标定法数学推导求解)_张正有标定法 最少要几张图片-CSDN博客

感谢智星崛起

深度科普:一文搞懂相机标定 - 知乎 (zhihu.com)

感谢

感谢

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号