关于双目立体视觉的一些总结(一)

article/2025/10/9 16:18:33

由于项目和毕设的需要,最近在做一些立体视觉的东西,总算是把立体视觉建立起来了,中途查了很多相关资料,这里做一个总结。

1.简介:

双目视觉是模拟人类视觉原理,使用计算机被动感知距离的方法。从两个或者多个点观察一个物体,获取在不同视角下的图像,根据图像之间像素的匹配关系,通过三角测量原理计算出像素之间的偏移来获取物体的三维信息。得到了物体的景深信息,就可以计算出物体与相机之间的实际距离,物体3维大小,两点之间实际距离。

2.建立立体视觉

为了精确地求得某个点在三维空间里的深度信息,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx;
为了获得某个点的X坐标和Y坐标,还需要知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。
因此我们需要进行下列三个步骤:相机标定,图像校正,立体匹配。

相机标定

  • 标定目的:获取相机的内参(焦距,图像中心,畸变系数等)和外参(R(旋转)矩阵T(平移)矩阵)
    相机标定需要采集标定数据,通常使用打印棋盘格的纸作为特制的标定参照物,摄像头获取该物体的图像,并由此计算摄像头的内外参数。
  • 相机标定有两种方法:
    方法一:Bouguet的Matlab标定工具箱(http://www.vision.caltech.edu/bouguetj/calib_doc/);有比较详细的介绍和使用方法,用起来还是比较方便的,只不过做完标定要继续的话要把标定结果存入xml导入OpenCV再进行。
    方法二:OpenCV的cvStereoCalibrate;在《学习OpenCV》第11,12章有比较详细的介绍。12章后有相关程序代码。

双目图像校正

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

校正反映到图像上就是要把消除畸变后的两幅图像严格地行对应,使得两幅图像的对极线恰好在同一水平线上,这样一幅图像上任意一点与其在另一幅图像上的对应点就必然具有相同的行号,只需在该行进行一维搜索即可匹配到对应点。下图来自于Stefano Mattoccia
“Stereo vision: algorithms and applications”http://vision.deis.unibo.it/~smatt/Seminars/StereoVision.pdf
(这个ppt对立体视觉做了一个很详尽的讲述,读了可以对立体视觉方面有一个比较好的了解)

我在这部分用的是OpenCV中的cvStereoRectify,得出校准参数之后用cvRemap来校准输入的左右图像。这里要提一下cvRemap这个函数src与dst大小格式通道必须一致,所以在使用之前要先对左右图像做处理。

立体匹配

立体匹配主要是通过找出每对图像间的对应关系,根据三角测量原理,得到视差图;在获得了视差信息后,根据投影模型很容易地可以得到原始图像的深度信息和三维信息。
立体匹配是建立立体视觉中最重要的一环,立体匹配的效果直接影响得到的三维信息。
由于现在只是使用了OpenCV的BM方法和SGBM方法,并没有做深入的了解,所以关于这方面后续会再写篇博客讨论一下这方面的问题。
BM方法:

CvStereoBMState *BMState = cvCreateStereoBMState();
assert(BMState != 0);BMState->preFilterSize=41;
BMState->preFilterCap=31;
BMState->SADWindowSize=41;
BMState->minDisparity=-64;
BMState->numberOfDisparities=128;
BMState->textureThreshold=10;
BMState->uniquenessRatio=10;

SGBM方法:

cv::StereoSGBM sgbm;
sgbm.preFilterCap = 63;
int SADWindowSize=11;
int cn = 1;
sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;
sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
sgbm.minDisparity = 0;
sgbm.numberOfDisparities = 32;
sgbm.uniquenessRatio = 10;
sgbm.speckleWindowSize = 100;
sgbm.speckleRange = 32;
sgbm.disp12MaxDiff = 1;

立体匹配后得到视差图后获取三维信息的方式(世界坐标系是以左相机光心为原点,光轴为Z轴,基线为X轴的右手系)
这里有一点要注意,立体匹配得出的视差结果是以16位符号数的形式的存储的,出于精度需要,所有的视差在输出时都扩大了16倍(2^4),因此,在实际求距离时,cvReprojectTo3D出来的X/W,Y/W,Z/W都要乘以16 (也就是W除以16),才能得到正确的三维坐标信息。
一个简单的输出某个像素点三维信息的例子:

cvReprojectImageTo3D(disp,depth,&_Qtest);//_Qtest是双目校正得到的Q矩阵
Point p;
p.x = 400;
p.y = 300;Mat tempDepth = Mat(depth);
cout << "in world coordinate: " << tempDepth.at<Vec3f>(p)*16 << endl;


待续


http://chatgpt.dhexx.cn/article/ZYVwUGy3.shtml

相关文章

双目视觉定位方案设计

双目视觉定位总体方案设计 主要步骤说明&#xff1a; 1&#xff09;双目相机标定&#xff0c;获取左右摄像头内参、外参&#xff0c;得到图像坐标到世界坐标的映射模型。 2&#xff09;图像预处理&#xff0c;根据标定得到畸变参数对采集到的图像去畸变&#xff0c;根据测试图…

双目立体视觉概述

导读 为什么非得用双目相机才能得到深度&#xff1f; 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理 理想双目相机成像模型 极线约束 图像矫正技术 基于滑动窗口的图像匹配 基于能量优化的图像匹配 双目立体视觉深度相机的优缺点 ------------------------…

白学立体视觉(1): 双目视觉

文章目录 前言什么是双目视觉&#xff1f;双目视觉的应用总结 前言 小伙伴们&#xff0c;大家好&#xff0c;以前学习了新的知识&#xff0c;一段时间之后便忘得差不多了&#xff0c;经常被他人嘲讽&#xff1a; 你真是白学xxx了&#xff01;。是啊&#xff0c;我确实是白学了…

(一) 双目立体视觉介绍

文章目录 1 针孔相机模型2.双目相机模型3.立体校正(共面行对准、极线校正)3.1极线约束3.2Bouguet算法3.3OpenCV API 介绍 4. 立体匹配与视差图5.深度图5.1 基础介绍5.2OpenCV API 6.双目测距精度分析7.总结 1 针孔相机模型 如基本相机模型及参数中介绍的&#xff0c;首先回忆一…

【技术流派】教你提高双目立体视觉系统的精度!

开源代码免费获取&#xff0c;欢迎关注我的GitHub&#xff1a; https://github.com/ethan-li-coding 双目立体视觉&#xff08;Binocular Stereo Vision&#xff09;是机器视觉的一种重要形式&#xff0c;它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像&am…

来聊聊双目视觉的基础知识(视察深度、标定、立体匹配)

点击上方“AI算法修炼营”&#xff0c;选择“星标”公众号 精选作品&#xff0c;第一时间送达 1 双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&am…

双目视觉(三)立体匹配算法

系列文章&#xff1a; 双目视觉&#xff08;一&#xff09;双目视觉系统双目视觉&#xff08;二&#xff09;双目匹配的困难和评判标准双目视觉&#xff08;三&#xff09;立体匹配算法双目视觉&#xff08;四&#xff09;匹配代价双目视觉&#xff08;五&#xff09;立体匹配…

双目视觉 1 双目视觉的原理

首先我们讲解一下双目视觉中&#xff0c;我们只有两张二维的图片&#xff0c;我们的目的就是通过这两张二位的图片来构建出一个三维的模型&#xff0c;这就要求我们要通过两张图&#xff0c;推算出来一个图片没有展示出来的深度。深度的计算的原理如下 图片中C1和C2分别对应着我…

单目视觉>双目视觉>RGBD比较

目前&#xff0c;视觉SLAM&#xff08;SLAM是“Simultaneous Localization And Mapping”的缩写&#xff0c;可译为同步定位与建图&#xff09;可分为单目、双目(多目)、RGBD这三类&#xff0c;另还有鱼眼、全景等特殊相机&#xff0c;但目前在研究和产品中还属于少数。从实现难…

双目视觉原理(万字总结,包含Halcon代码)

双目视觉原理 1. 双目视觉的视差与深度1.1 总览2. 视差原理 2. 双目相机的坐标系2.1 针孔相机的模型2.2 四大坐标系1 像素坐标系&#xff08;单位&#xff1a;像素&#xff08;pixel&#xff09;&#xff09;2 图像坐标系&#xff08;单位&#xff1a;mm&#xff09;3 相机坐标…

来聊聊双目视觉的基础知识(视觉深度、标定、立体匹配)

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 1 双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&#xff0c;双目视觉就是通过…

单目视觉技术、双目视觉技术、多目视觉技术

计算机视觉、人工智能 视觉的研究过程&#xff1a;感知、认知、和控制 车载摄像头的要求&#xff1a; 看得远&#xff1a;提供了更充足的反应时间&#xff0c;直接提升了安全性。需要长焦距&#xff08;D大&#xff0c;欲保持其他地方不变&#xff0c;就需要F增大&#xff09;…

【双目视觉】双目立体匹配

一、双目立体匹配算法 在opencv中用的比较多的双目立体匹配算法有两种&#xff1a;BM和SGBM。SGBM是BM立体匹配算法的优化版&#xff0c;属于半全局匹配&#xff0c;相对于BM花的时间要更多&#xff0c;但效果优于BM。本文使用的是SGBM半全局匹配方式。 步骤&#xff1a; 1.打…

双目视觉原理及流程概述

双目原理 双目视觉是利用视差原理的一种视觉方法。 如图所示为空间中一点P在左右相机中的成像点Pleft=(Xleft,Yleft),Pright=(Xright,Yright)。将两相机固定在同一平面上,则点P在Y方向的坐标是相同的,即Yleft = Yright =Y。根据三角原理,可得: 视差被定义为相同点在左…

双目视觉(一)双目视觉系统

系列文章&#xff1a; 双目视觉&#xff08;一&#xff09;双目视觉系统双目视觉&#xff08;二&#xff09;双目匹配的困难和评判标准双目视觉&#xff08;三&#xff09;立体匹配算法双目视觉&#xff08;四&#xff09;匹配代价双目视觉&#xff08;五&#xff09;立体匹配…

双目视觉简介

hi 小伙伴们&#xff0c;人啊&#xff0c;很容易有惰性&#xff0c;很久不跟新了&#xff0c;不做笔记了&#xff0c;如今“良心发现”&#xff0c;毕业之后第一次更新博客。当然还是学习&#xff0c;整合分享给更多的人&#xff01; 相信关注我博客和微信公众号的人很多都是做…

机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)

1、双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&#xff0c;双目视觉就是通过两个摄像头获得图像信息&#xff0c;计算出视差&#xff0c;从而使…

双目立体视觉(一) 基本原理和步骤

目录 一、双目立体视觉系统的四个基本步骤 二、各步骤原理 1、相机标定 2、立体校正 3、立体匹配 一、双目立体视觉系统的四个基本步骤 相机标定主要包含两部分内容: 单相机的内参标定和双目相机的外参标定&#xff0c;前者可以获得每个相机的焦距、光心、畸变系数等参数…

长连接和短链接的区别

长连接意味着进行一次数据传输后&#xff0c;不关闭连接&#xff0c;长期保持连通状态。如果两个应用程序之间有新的数据需要传输&#xff0c;则直接复用这个连接&#xff0c;无需再建立一个新的连接。就像下图这样。 它的优势是在多次通信中可以省去连接建立和关闭连接的开销…

springboot 实现长链接转短链接

实现结果&#xff1a; 转换短链接api&#xff1a; 接口&#xff1a;http://127.0.0.1/api?urlurlencode(要缩短的网址) 例如&#xff1a;http://127.0.0.1/api?urlhttp%3a%2f%2fwww.baidu.com 返回&#xff1a;http://127.0.0.1/baidu 访问短链接即可还原原url&#xff1b;…