双目立体视觉Bouguet矫正算法详解
版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/u011574296/article/details/73826420 </div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css"><div id="content_views" class="markdown_views prism-atom-one-dark"><!-- flowchart 箭头图标 勿删 --><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><p>人类可以看到3维立体的世界,是因为人的两只眼睛,从不同的方向看世界,两只眼睛中的图像的视差,让我们可以看到3维立体的世界。类似的,想要让计算机“看到”3维世界,就需要使用两个摄像头构成双目立体视觉系统。</p>
想要让双目视觉系统知道视差,首先应该知道双目视觉系统中两个摄像头之间的相对位置关系。。任意两个坐标系之间的相对位置关系,都可以通过两个矩阵来描述:旋转矩阵R和平移矩阵T。
我们可以同时对两个摄像头进行标定,分别得到二者相对同一坐标系的旋转矩阵和平移矩阵,然后就可以获得两个摄像头之间的相对位置关系,这就是双目标定!
一、双目立体标定
双目摄像机需要标定的参数:摄像机内参数矩阵,畸变系数矩阵,本征矩阵,基础矩阵,旋转矩阵以及平移矩阵(其中摄像机内参数矩阵和畸变系数矩阵可以通过单目标定的方法标定出来)
双目摄像机标定和单目摄像机标定最主要的区别就是双目摄像机需要标定出左右摄像机坐标系之间的相对关系
我们用旋转矩阵R和平移矩阵T来描述左右两个摄像机坐标系的相对关系,具体为:将左摄像机下的坐标转换到右摄像机下的坐标。
假设空间中有一点P,其在世界坐标系下的坐标为PWPW,其在左右摄像机坐标系下的坐标可以表示为:
注:双目摄像机分析中往往以左摄像机为主坐标系,但是R和T却是左相机向右相机转换,所以Tx为负数
综合上式,可以推得:
RlRl,带入上式就可以求出左右相机之间的旋转矩阵R和平移T。
求得的R和T就是立体标定要得到的结果。
单目摄像机需要标定的参数,双目都需要标定,双目摄像机比单目摄像机多标定的参数:R和T,主要是描述两个摄像机相对位置关系的参数,这些参数在立体校正和对极几何中用处很大
那么得到了立体标定的结果,下一步我们该做什么呢?
答案是:立体校正。
二、立体校正
在介绍立体校正的具体方法之前,让我们来看一下,为什么要进行立体校正?
双目摄像机系统主要的任务就是测距,而视差求距离公式是在双目系统处于理想情况下推导的,但是在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。立体校正的目的就是,把实际中非共面行对准的两幅图像,校正成共面行对准。(共面行对准:两摄像机图像平面在同一平面上,且同一点投影到两个摄像机图像平面时,应该在两个像素坐标系的同一行),将实际的双目系统校正为理想的双目系统。
理想双目系统:两摄像机图像平面平行,光轴和图像平面垂直,极点处于无线远处,此时点(x0,y0)对应的级线就是y=y0
立体校正前:
立体校正后:
Bouguet校正原理
校正过程中两个图像平面均旋转一半的R,这样可以使重投影畸变最小,此时两个摄像机图像平面共面(畸变校正后光轴也平行),但是行不对准
极点是两个相机坐标系原点的连线和图像平面的交点,要想使得极点处于无穷远处(即行对准),就必须两个摄像机的图像平面和两个相机坐标系原点的连线平行
可以计算RrectRrect左乘到R分解后作用于左右相机坐标系的矩阵,即可得到最终的立体校正矩阵。
参考:
机器视觉学习笔记(6)——双目摄像机标定参数说明
机器视觉学习笔记(8)——基于OpenCV的Bouguet立体校正
双摄像头立体成像(三)-畸变矫正与立体校正
双目立体视觉Bouguet矫正算法详解相关推荐
- 2. IMU原理及姿态融合算法详解
文章目录 2. IMU原理及姿态融合算法详解 一.组合 二. 原理 a) 陀螺仪 b) 加速度计 c) 磁力计 三. 旋转的表达 a) 欧拉角 b) 旋转矩阵 c) 四元数 d) 李群 SO(3)\t ...
- JDA人脸检测算法详解
JDA人脸检测算法详解: 第一步: JDA算法原理详解: 作者建立了一个叫post classifier的分类器,方法如下: 1.样本准备:首先作者调用OpenCV的Viola-Jones分类器,将r ...
- 寻路算法——A*算法详解并附带实现代码
一.前言 前天看了一篇博客介绍A*算法,按照自己的理解记录一下A*算法. 二.应用场景 一副地图中有坐标A和B,需要找到一条路径(如果有的话)能从A到B,地图中可能有河流或墙壁不能直接穿过,我们需要怎 ...
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码
粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...
- 基础排序算法详解与优化
文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
最新文章
- 所有库在门不显示封装_奈雪和石库门在一起,太上头
- 数据库设计:关于枚举类型的表结构设计法,个人拙见
- win7 修改hosts 不起作用
- java Cast Exception
- linux系统上传代码到gitlab服务器
- 常见的误解:这会创建多少个对象?
- Tavas and Karafs 二分+结论
- [BZOJ 3028]食物(生成函数)
- 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
- eeglab基础学习
- 干掉 Jenkins?顶级 DevOps 工具链大盘点
- c语言多个大写变小写字母,c语言大写字母转换成小写字母
- ubuntu服务器系统卸载重装,双系统卸载和安装-及ubuntu配置
- 利用opencv剪切图片
- python屏蔽警告
- 打包错误:Entry name 'META-INF/ XXX ' collided
- OBS Classic经典版已经不再支持
- 人生的诗·335~339节
- 国企普通员工如何才能成为公务员,这三种途径可供参考
- 扫描pc端页面二维码,在手机上签名
热门文章
- 机器视觉——入门基础(一)—— 相机篇
- 道创峰会2020:伯克利学生分享会|快来线下碰一碰
- 计算机提示存储空间不足怎么办,电脑提示存储空间不足,无法处理此命令是什么原因?怎么解决?...
- 新税码不显示或者税码被人隐藏,发票校验不显示
- lotus-miner 元数据备份
- HTML5系列代码:框模型的大小
- 非常漂亮的一款html引导页导航网站旋转头像变幻背景单页源码
- js月份的计算公式_JS获取指定月份的天数几种方法
- 利用NATAPP隧道解决微信公众号开发之本地调试难题
- 基于Android的大学校园同学帮app