【计算机视觉】 opencv双目视觉 立体视觉 三维重建 之理论篇
转载 双目视觉三维重建 作者tiemaxiaosu
http://blog.csdn.net/tiemaxiaosu/article/details/51734667
一、三维重建概述
三维重建主要是研究如何从得到的匹配点中计算出相机的投影矩阵(如果是外部标定的话,就是求出相机的外部参数)以及如何计算出匹配点的三维坐标。
目前研究的进展与之还相差较远。研究人员为了能够表达三维空间信息,目前较多地采用三维矢量图形来替代三维位图。主要的重构方法有如下几种:
(1)、空间点的重建
这是三维重构中的最基本的方法。空间任一点在两个摄像机中分别成像,得到该点在两个图像中的对应坐标,在知道两摄像机的参数矩阵的条件下,通过建立以该点的世界坐标为未知数的 4 个线性方程,可以用最小二乘法求解得该点的世界坐标。有一种简化计算的办法,选取两个内部参数完全相同的摄像机,将他们平行配置,使他们的光轴相互平行。这种方法计算相当简单,不需要进行外部参数标定。但一般情况下,两个摄像机的内部参数完全相同(包括两摄像机的拍摄状态也相同)是很难选到。摄像机安装时无法看到光轴和成像平面,故难以实施。
(2)、空间直线、空间二次曲线的重建
空间直线和空间曲线也是组成空间图形的主要基元。根据空间直线射影变换前后仍是直线的性质,以此来分析空间直线与图像中的直线之间的关系。空间直线在CCD上的成像可以这样认为,空间直线与摄像机光心构成的平面与成像平面的交线,两台摄像机有两个这样的平面,这两个平面的交线就是空间直线。空间二次曲线是空间二次曲面与平面的交线,因此二次曲线的平面曲线,在CCD上的成像可以认为是由空间二次曲线与光心组成的锥面与成像平面的交线。两台摄像机有两个这样的锥面,求这两个空间锥面的交线,就是空间曲线。
(3)、全像素的三维重建
对图像中的每个像素都进行三维重建,这当然是最理想的情况,目前要实施这种重构,需要相当严格的测量条件,且仅限于对某一具体对象,但效果并不理想。对此人们正在进行大量的研究,还有待于进一步的努力。
二、空间点的三维重建
1、基本模型
空间点三维重建的基本模型如图(4.1)所示,对于空间物体表面任意一点P,如果用C1摄像机观察,看到它在C1摄像机的图像点位于p1,但他们无法由p1得知P的三维位置,事实上,在O1P(O1为C1摄像机的光心)连线上任意一点P’的图像点都是p1,因此,由p1点的位置,我们只知道空间点位于O1P1与O2P2两条直线的交点,即它们的三维位置是唯一确定的。
假如我们能够得到物体表面上所有点的三维坐标,则三维物体的形状与位置就是唯一确定的,在某些简单场合,例如三维物体时一个多面体,我们只需要知道它的各个顶点的三维坐标与相邻关系,则该多面体的形状与位置是唯一确定的。因此,用立体视觉的方法获取三维点的坐标是十分基础的。
2、最小二乘法求解三维坐标值
下面我们来具体介绍求解三维点坐标的算法。在进行讨论之前,我们要明确一下几点基本假设:空间任意点P在两个摄像机C1与C2上的图像点平p1与p2已经从两个图像中分别检测出来。即已知p1与p2为空间同一点P的对应点。至于对应点是如何找到的,这属于图像配准问题。还有一个假设就是,摄像机C1与C2已标定,他们的投影矩阵分别为M1与M2,于是有:
其中,(u1,v1,1)与(u2,v2,1)分别为P1与P2点在各自图像中的图像齐次坐标;(X,y,Z,1)为P点在世界坐标系下的齐次坐标;mijk为Mk的第i行第j列元素。式(4.1)与式(4.2)消去Zc1与Zc2得到关于X,Y,Z的四个线性方程:
由于空间点P是O1p1与O2p2的交点,它必然同时满足式(4.3),式(4.4),我们可以联立这四个式子,从而求出P点的坐标(X,Y,Z)。四个方程,三个未知数,也就是说这个方程组只有三个独立的方程,这是因为我们已经假设P1与P2点是空间同一点P的对应点,因此已经假设了直线O1p1与O2p2一定相交,或者说,这四个方程必定有解,而且解是唯一的。而实际应用中,由于数据总是有噪声的,我们可以用最小二乘法求出P的三维点坐标(X,Y,Z)。
3、视差测距法
以上我们介绍了空间点三维重建的一般方法,为了更清楚的了解上述过程的物理意义,下面我们讨论在一种简单的摄像机配置下的空间点重建方法,视差测距法。此方法要求选用两个内部参数完全相同的摄像机,将它们平行放置,使它们的光轴相互平行,另有一对坐标轴共线,两个成像平面共面,两摄像机的光心有一个固定的距离d,这样求解图像点的世界坐标时只涉及摄像机内参数。原理如图(4.2)所示:
在上述特殊摄像机配置下,假设C1坐标系为O1x1y1z1,C2坐标系为O2x2y2z2,焦距为f,摄像机间距为d,任何空间点P的坐标在C1下为(x1,y1,z1),在C2坐标系下为(x2,y2,z2),在左摄像机中的图像点左边为(u1,v1),在右摄像机中的图像点坐标为(u2,v2)。
根据式(4.5),式(4.6)的摄影比例关系,对于左右摄像机有如下关系:
世界坐标系与摄像机坐标系的关系可表述如下:
联立上两式可得:
进而可得:
由式(4.5)和式(4.8)可计算的空间点的三维坐标:
式(4.9)即为双目立体视觉重构三维空间点的方法,可见,通过图像对视差和像点坐标就可以恢复出物体的三维坐标。但是由于对设备配置的要求比较苛刻,只是被应用在一些简单的视觉系统。本文采用的还是针对一般摄像机参数的三维重建方法,这样大大扩展了带云台的摄像机的视野范围,从而增强了移动机器人视觉系统的灵活性。
。
【计算机视觉】 opencv双目视觉 立体视觉 三维重建 之理论篇相关推荐
- 视频|立体视觉之立体匹配理论与实战
主讲嘉宾: 武汉大学摄影测量学博士,现为某科技公司算法主管与技术合伙人,主要研究基于影像的立体匹配和三维重建,包括立体匹配.点云融合.网格构建.网格处理等,「3D视觉从入门到精通」星球嘉宾 课程大纲: ...
- 重磅直播|立体视觉之立体匹配理论与实践
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...
- 手撕 CNN 经典网络之 VGGNet(理论篇)
2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司一起研发了新的卷积神经网络,并命名为VGGNet.VGGNet是比AlexNet更深的 ...
- 检测单击鼠标左键并拖动的消息_计算机视觉OpenCV学习笔记(四):关于鼠标的相关事件函数...
(7)把鼠标当画笔 本篇目标: 学会使用OpenCV中的鼠标处理的相关事件,事件回调函数怎么去定义,参数有哪些,以及如何注册鼠标监听事件. 7.1 .1 回调函数的定义: 1 def name(eve ...
- C++图像处理OpenCV之屠龙宝刀第11篇 —— opencv_contrib(OpenCV贡献库)
C++图像处理OpenCV之屠龙宝刀第11篇 -- opencv_contrib(OpenCV贡献库) 一.opencv_contrib仓库简介 OpenCV的核心库,就是通常所说的OpenCV. 在 ...
- matlab 立体双目,correl sp matlab 实现双目视觉的三维重建 利用两张图片 信息 276万源代码下载- www.pudn.com...
文件名称: correlCorresp下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 759 KB 上传时间: 2015-05-26 下载次数: 67 提 ...
- 我是如何转型走上计算机视觉OpenCV开发之路的
我是如何转型走上计算机视觉OpenCV开发之路的 2004年我大学毕业,学的是软件工程专业,第一份工作是在一家日资外包企业,无法忍受学习日语,忍无可忍无须再忍,干了八个月就跳槽啦,来到了第二家公司还是 ...
- 【计算机视觉OpenCV基础】实验四 尺寸测量
实验四 尺寸测量 计算机视觉OpenCV基础实验合辑(实验1234+扩展) 资源下载地址: https://download.csdn.net/download/weixin_53403301 合辑: ...
- C++图像处理OpenCV之屠龙宝刀第12篇 —— 将 3D 输入转换为 2D 表示形式的模棱两可之处?
C++图像处理OpenCV之屠龙宝刀第12篇 -- 将 3D 输入转换为 2D 表示形式的模棱两可之处? 问题: 描述将 3D 输入转换为 2D 表示形式至少三个模棱两可的方面.你将如何克服这些模棱两 ...
- 艾伟_转载:学习 ASP.NET MVC (第五回)理论篇
本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回) ...
最新文章
- 初识Typescript及vscode环境配置
- 腾讯大数据星火计划--Angel技术沙龙 对外报名正式启动!
- Windows Server 2012 R2 虚拟机迁移 出错 21502 0x80070490 解决
- 在Linux系统下, 可以用一个命令很容易批量删除.svn的文件夹
- VMware vSphere、 ESXi、Vcenter、vSphere Client关系
- java 多文字水印_Java 如何给Word文档添加多行文字水印
- 人工智能(10)---机器学习知识体系篇(初级篇,中级篇,高级篇)
- 人脸识别智能会议签到系统
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- 十六位顶尖专家齐聚,解密阿里云最新核心技术竞争力!
- 本地虚拟机部署java项目(tomcat8 ,jdk8,VMWare)
- 使用JMH做Java微基准测试(三)测试参数状态State
- CNDS-markdowm使用方法(^ _ ^)
- python网上在线编程_在线python编程
- 关于举办“2019 年全国传智杯 IT 技能大赛”的通知
- 卸载已有的navicat for mysql,安装破解版navicat for mysql
- 手把手教你Magisk安装
- 多款iPhone遭遇中国禁售令!福建法院判决高通胜诉苹果
- AndroidQ(十)Android Q功能和API
- AD软件repeat功能实践详解