【立体视觉】双目立体标定与立体校正

from:https://blog.csdn.net/u011574296/article/details/73826420

参考:

机器视觉学习笔记(6)——双目摄像机标定参数说明 
机器视觉学习笔记(8)——基于OpenCV的Bouguet立体校正 
双摄像头立体成像(三)-畸变矫正与立体校正

人类可以看到3维立体的世界,是因为人的两只眼睛,从不同的方向看世界,两只眼睛中的图像的视差,让我们可以看到3维立体的世界。类似的,要想让计算机“看到”3维世界,就需要使用两个摄像头构成双目立体视觉系统。

想要让双目视觉系统知道视差,首先应该知道双目视觉系统中两个摄像头之间的相对位置关系。。任意两个坐标系之间的相对位置关系,都可以通过两个矩阵来描述:旋转矩阵R和平移矩阵T。

我们可以同时对两个摄像头进行标定,分别得到二者相对同一坐标系的旋转矩阵和平移矩阵,然后就可以获得两个摄像头之间的相对位置关系,这就是双目标定!

一、双目立体标定

双目摄像机需要标定的参数:摄像机内参数矩阵,畸变系数矩阵,本征矩阵,基础矩阵,旋转矩阵以及平移矩阵(其中摄像机内参数矩阵和畸变系数矩阵可以通过单目标定的方法标定出来)

双目摄像机标定和单目摄像机标定最主要的区别就是双目摄像机需要标定出左右摄像机坐标系之间的相对关系

我们用旋转矩阵R和平移矩阵T来描述左右两个摄像机坐标系的相对关系,具体为:将左摄像机下的坐标转换到右摄像机下的坐标。

假设空间中有一点P,其在世界坐标系下的坐标为PWPW,其在左右摄像机坐标系下的坐标可以表示为:

Pl=RlPW+Tl
Pr=RrPW+Tr
其中 PlPl PrPr 又有如下的关系: 
Pr=RPl+T
注:双目摄像机分析中往往以左摄像机为主坐标系,但是R和T却是左相机向右相机转换,所以Tx为负数

综合上式,可以推得: 

R=RrRTl
T=TrRTl


l
Rl
Tl为左摄像头经过单目标定得到的相对标定物的旋转矩阵和平移向量,RrTr为右摄像头经过单目标定得到的相对标定物的旋转矩阵和平移向量 
左右相机分别进行单目标定,就可以分别得到RlTlRrTr,带入上式就可以求出左右相机之间的旋转矩阵R和平移T。

求得的R和T就是立体标定要得到的结果。

单目摄像机需要标定的参数,双目都需要标定,双目摄像机比单目摄像机多标定的参数:R和T,主要是描述两个摄像机相对位置关系的参数,这些参数在立体校正和对极几何中用处很大

那么得到了立体标定的结果,下一步我们该做什么呢? 
答案是:立体校正。

二、立体校正

在介绍立体校正的具体方法之前,让我们来看一下,为什么要进行立体校正?

双目摄像机系统主要的任务就是测距,而视差求距离公式是在双目系统处于理想情况下推导的,但是在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。立体校正的目的就是,把实际中非共面行对准的两幅图像,校正成共面行对准。(共面行对准:两摄像机图像平面在同一平面上,且同一点投影到两个摄像机图像平面时,应该在两个像素坐标系的同一行),将实际的双目系统校正为理想的双目系统。

理想双目系统:两摄像机图像平面平行,光轴和图像平面垂直,极点处于无线远处,此时点(x0,y0)对应的级线就是y=y0

立体校正前:

这里写图片描述

立体校正后:

这里写图片描述

Bouguet校正原理

校正过程中两个图像平面均旋转一半的R,这样可以使重投影畸变最小,此时两个摄像机图像平面共面(畸变校正后光轴也平行),但是行不对准 
极点是两个相机坐标系原点的连线和图像平面的交点,要想使得极点处于无穷远处(即行对准),就必须两个摄像机的图像平面和两个相机坐标系原点的连线平行 
可以计算RrectRrect矩阵使得极点处于无穷远处: 

Rrect=eT1eT2eT3
由于图像平面最终和相机坐标系原点连线平行,所以 
e1=TT
其中 T=[TxTyTz]TT=[TxTyTz]T ,e2和e1正交,选择主光轴方向(0,0,1)与e1叉积 
e2=[TyTx0]TT2x+T2y
e3与e1和e2正交,可得: 
e3=e1×e2e3=e1×e2

RrectRrect 左乘到R分解后作用于左右相机坐标系的矩阵,即可得到最终的立体校正矩阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap .col-md-6 文字居中问题处理

转载于:https://www.cnblogs.com/benbenfishfish/p/5672520.html

使用jd-gui+javassist修改已编译好的class文件

1.原因:因为公司代码管理不当导致源码丢失,只好已编译好的class文件进行修改 2.首先先在myeclipse中新建java项目并导入javassist 3.将需要修改的文件放到指定文件夹下 4..在项目中添加以下代码 package dtj;import javassist.ClassPool; import javassi…

机器视觉学习笔记(4)——单目摄像机标定参数说明

from:https://blog.csdn.net/xuelabizp/article/details/50314633机器视觉学习笔记(4)——单目摄像机标定参数说明 标签: 机器视觉1.针孔摄像机模型 在介绍摄像机标定参数之前,需要先简单说一下针孔摄像机的原理。投影…

mysql 5.6 binlog组提交

mysql 5.6 binlog组提交实现原理http://blog.itpub.net/15480802/viewspace-1411356 Redo组提交 Redo提交流程大致如下 lock log->mutex write redo log buffer to disk unlock log->mutex fsync Fsync写磁盘耗时较长且不占用log->mutex,也就是其执行期间其…

python基础(正则表达式)

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 转载于:https://www.cnblogs.com/wanderingzj/p/5253325.html

LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份

功能介绍:该脚本用于定期(结合crontab一起使用)将本地目录通过rsyncssh传输到远程服务器,每次执行都生成一个带有以时间命名的目录,并且当前最新版本的数据链接到一个名字叫current的符号链接上,便于查找和…

张正友相机标定Opencv实现以及标定流程标定结果评价图像矫正流程解析(附标定程序和棋盘图)

from:https://blog.csdn.net/dcrmg/article/details/52939318使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些?相机标定的目的:获…

软件测试技术 homework2

Code 1 1.fault是迭代的条件应该是 i > 0 而不是 i > 0 2.当测试用例是 [3,2,1],1 时。 3.当测试用例是 [2,3,4],1 。 4.当测试用例是 [2],1 。 Code 2 1.fault是应该逆序迭代,正确为for(int i x.length-1;i>0;i--) 2.当测试用例是[0,1&#x…

header的安全配置指南

0x00 背景 在统计了Alexa top 100万网站的header安全分析之后(2012年11月 - 2013年3月 - 2013年11月),我们发现其实如何正确的设置一个header并不是一件容易的事情。尽管有数不胜数的网站会使用大量有关安全方面的header,但 并没有…

opencv双目视觉标定、匹配和测量 (附代码)

from:https://blog.csdn.net/bcj296050240/article/details/52778741双目视觉原理方面参照《学习Opencv》和大牛博客 http://blog.csdn.net/chenyusiyuan/article/details/5970799中16-19系列博客。本文主要记录我自己在双目视觉标定,立体匹配&#xff0…

dom内容区域的滚动overflow,scroll

去掉手机上点击点中的默认高亮效果 -webkit-tap-highlight-color: rgba(0,0,0,0); ios手动启动一下监听touch事件以响应css伪类: document.addEventListener("touchstart", function(){}, true) 传统 pc 端中,子容器高度超出父容器高度,通常使…

工业相机的选择方法

信号  工业相机的信号类型有模拟信号和数字信号两种。模拟相机必须有图像采集卡,标准的模拟相机分辨率很低,采集到的是模拟信号,经数字采集卡转换为数字信号进行传输存储。工业数字相机采集到的是数字信号,数字信号不受电噪声影…

atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc...

atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1.1. 破解基本原则有两种,一种是绕过验证码。一种是拦截1 2. 手机 短信 验证…

SpringMvc整合Quartz实现定时任务项目源码

项目中一直使用Quartz做定时任务,但是一直没有去仔细阅读详细参数配置说明以及它源码,最近花了一点时间做了一个整理。系统的看了一下源码实现并顺手做了一个简单的Demo。 一、说明 spring版本4.0.5、Quartz版本2.2.2 注意定时任务的配置需要spring-cont…

工业相机基本参数以及选型

from: https://blog.csdn.net/dcrmg/article/details/52851913工业相机基础知识(一) CCD与CMOS 工业相机按照图像的传感器元件的不同分为CCD(Charge Coupled Device,电荷耦合元件)和CMOS(金属氧化物半导体元件&#xf…

读《我是一只IT小小鸟》有感

学期刚开始老师就在课堂上给我们这些未来的IT行业工作者推荐了这本《我是一只IT小小鸟》。其实在这之前我对这本书是早有耳闻的,许多人的推荐足以证明它是一本好书,然而那时的我并未能料到自己会成为软件工程专业的学生,也对这个专业一无所知…

socket编程初级

什么是socket定义socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件…

OpenCV—基本数据结构与示例

OpenCV的基本数据结构及示例OpenCV中强大的Mat类型大家已经比较熟悉了。这里梳理一些在工程中其他经常用到的几种基本数据类型。包括:VecScalarPointSizeRectRotatedRect1. Vec类1.1 基本概念Vec是一个模板类,主要用于存储数值向量。1.2 用法&#xff08…

使用var声明的变量 和 直接赋值并未声明的变量的区别

在看JS高级程序设计时忽然想到这个问题,众所周知,直接赋值一个变量而为声明,会产生一个全局变量(或者说是全局对象的属性),但用var声明的变量 和 直接赋值而并未声明的变量 都有哪些区别呢,这是…

转载-程序员编程技术迅速提高的终极攻略

2019独角兽企业重金招聘Python工程师标准>>> 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都…