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

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

机器视觉学习笔记(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,也就是其执行期间其…

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

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

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

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

工业相机的选择方法

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

socket编程初级

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

OpenCV—基本数据结构与示例

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

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

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

SVM

from:https://blog.csdn.net/liugan528/article/details/79448379 SVM 1. 基本概念 支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学…

LoadRunner常用术语

1.场景 2.负载发生器 3.虚拟用户 4.虚拟用户脚本 5.事务 6.思考时间 7.集合点 8.事务响应时间 转载于:https://www.cnblogs.com/Andy-Lv/p/5263707.html

跟我学Shiro目录贴

2019独角兽企业重金招聘Python工程师标准>>> http://jinnianshilongnian.iteye.com/blog/2018398 转载于:https://my.oschina.net/zhanggongming/blog/714844

【WinForm-无边框窗体】实现Panel移动窗体,没有边框的窗体

没有边框的窗体怎么移动?其实方法有很多,下面介绍一种用控件来移动窗体,Panel或PictureBox都可。主要设置控件的MouseDowm和MouseLeave事件。 第一步:窗体设计 窗体最上面是一个panel1 窗体最下面是一个Panel3,只显示最…

\Grokking Algorithms\简介与作者采访

\关键点\这本书目的是告诉读者解决问题的新方法。 \这本书试图通过插图来让大家更容易掌握主题,避免部分读者觉得太费解。 \这本书不仅适合没有接触过算法的人,也适合刚从计算机专业毕业的学生。 \这本书提供了非常多的例子和简单练习。 \这并不是一本参…

ZedGraph使用经验

开源的统计图控件中基本常用的是OpenFlashChar和ZedGraph,今天就先来讲讲ZedGraph的使用。 ZedGraph资源 ZedGraph来源:http://sourceforge.net/project/showfiles.php?group_id114675ZedGraph相关例子资源:http://zedgraph.org/wiki/index.…

机器学习实战之SVM

一引言:支持向量机这部分确实很多,想要真正的去理解它,不仅仅知道理论,还要进行相关的代码编写和测试,二者想和结合,才能更好的帮助我们理解SVM这一非常优秀的分类算法支持向量机是一种二类分类算法&#x…

mysql 时间类型 datetime,timestamp

2019独角兽企业重金招聘Python工程师标准>>> CURRENT_TIMESTAMP 的 timestamp 意思是 根据 mysql 的当前时间,使用mysql 的当前时间。 参考地址:http://blog.sina.com.cn/s/blog_67cc6e7d0100nrwk.html datetime 和 timestamp 都是保存时间格…

机器学习中的交叉验证(cross-validation)

from:https://blog.csdn.net/lhx878619717/article/details/49079785 交叉验证(Cross validation),交叉验证用于防止模型过于复杂而引起的过拟合. 有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子…

轻松谈话:谈话的力量

如何与她人搭话?? 第一:给别人一个好印象 1、环境:通过共同环境来激发兴趣,比如:在球场,你觉得谁会赢。 2、对方:多数人喜欢谈论自己。 3、自己:主动表明意图,要真诚。 第…

libSVM介绍(二)

from:https://blog.csdn.net/carson2005/article/details/6539192 鉴于libSVM中的readme文件有点长,而且,都是采用英文书写,这里,我把其中重要的内容提炼出来,并给出相应的例子来说明其用法,大家…