视差Disparity与深度图

视差Disparity与深度图转自:http://www.elecfans.com/d/863829.html双目立体视觉,在百度百科里的解释是这样解释的:双目立体视觉(BinocularStereoVision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。一、视差Disparity与深度图提到双目视觉就不得不提视差图:双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对

大家好,又见面了,我是你们的朋友全栈君。

转自:http://www.elecfans.com/d/863829.html

双目立体视觉,在百度百科里的解释是这样解释的:双目立体视觉(BinocularStereoVision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。

一、视差Disparity与深度图

提到双目视觉就不得不提视差图:双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来,这个差别,我们称作视差(Disparity)图像。

对于视差的理解自己可以体验一下:将手指头放在离眼睛不同距离的位置,并轮换睁、闭左右眼,可以发现手指在不同距离的位置,视觉差也不同,且距离越近,视差越大。

那么提到视差图,就有深度图,深度图像也叫距离影像,是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像。获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法。

那么这里引申一下深度图与点云的区别,点云:当一束激光照射到物体表面时,所反射的激光会携带方位、距离等信息。若将激光束按照某种轨迹进行扫描,便会边扫描边记录到反射的激光点信息,由于扫描极为精细,则能够得到大量的激光点,因而就可形成激光点云。

深度图像经过坐标转换可以计算为点云数据;有规则及必要信息的点云数据可以反算为深度图像。两者在一定条件下是可以相互转化的,之前的博客里,有使用PCL库实现过点云提取深度图,当然给出相机参数也是可以由深度图转为点云的。截图一个深度图:

视差Disparity与深度图

所以深度与视差的关系如下

视差Disparity与深度图

比如绝对差值法绝对差值图的计算方法如下:

D=|L-R|

式中,L、R和D分别代表左视图、右视图和对应的绝对差值图的亮度值。绝对差值图并不是严格意义上的视差图,但是它的计算方法最为简单,速度快,它给出的结果可以作为参考

那么我们知道视差又有另外一个概念就是UV-disparitymapping,简单的给个图表示:

视差Disparity与深度图

是怎么得到这个结果的呢?原来是统计统计视差的个数,比如V-disparityMap中的第一行分别统计视差为0,1,2,3,4,5的个数,所以得到了V-disparityMap的第一行分别为

0,2,0,1,1,1,那么在真实的图喜爱那个中得到的结果如下:

视差Disparity与深度图

那么利用视差可以做很多有用的功能,比如列举一篇文章

UVdisparitybasedobstacledetectionandpedestrianclassificationinurbantrafficscenarios

二Rays

ray就是连接图像上一点到光心形成的一条射线。这个也是之后的对极约束的基础。

视差Disparity与深度图

视差Disparity与深度图

那么建立世界坐标系,我们的两条rays是相交的。如下图所示,接下来就是利用rays的相交关系,来解释対极几何(Epipolargeometry)了。

视差Disparity与深度图

视差Disparity与深度图

以上的图文说明明了对极几何(EpipolarGeometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅试图之间的的相对姿态。

有以下几种概念

1.基线(baseline):直线Oc-Oc’为基线。

2.对极平面束(epipolarpencil):以基线为轴的平面束。

3.对极平面(epipolarplane):任何包含基线的平面都称为对极平面。

4.对极点(epipole):摄像机的基线与每幅图像的交点。比如,上图中的点e和e’。

5.对极线(epipolarline):对极平面与图像的交线。比如,上图中的直线l和l’。

6.5点共面:点x,x’,摄像机中心OcOc’,空间点X是5点共面的。

7.极线约束:两极线上点的对应关系。

说明:

直线l是对应于点x’的极线,直线l’是对应于点x的极线。极线约束是指点x’一定在对应于x的极线l’上,点x一定在对应于x’的极线l上。

根据以上原理就得出了基础矩阵F和本质矩阵E等,网上有很多资料的

这里直接将推导公式贴出来就好了

视差Disparity与深度图

本质矩阵E的基本性质:秩为2,且仅依赖于外部参数R和T。其中,P表示世界坐标点矢量,p表示像素点矢量

那么基础矩阵求法:由于本质矩阵E并不包含相机内参信息,且E是面向相机坐标系的。实际上,我们更感兴趣的是在像素坐标系上去研究一个像素点在另一视图上的对极线,这就需要用到相机内参信息将相机坐标系和像素坐标系联系起来。假设Pl和Pr是世界坐标值,其对应的像素坐标值为Ql和Qr

相机内参矩阵为M,那么

视差Disparity与深度图

根据

视差Disparity与深度图

那么

视差Disparity与深度图

令基础矩阵

视差Disparity与深度图

那么

视差Disparity与深度图

也就是我们在下图的第一幅图找到一个特征点,通过以上対极几何的知识推导出,该点在第二幅图位于图喜的哪个位置

视差Disparity与深度图

举个例子,比如kinect

视差Disparity与深度图

视差Disparity与深度图

无论是双目还是kinect都是类似的原理

视差Disparity与深度图

f=Focallength

b=Baseline

d=Disparityvalue

ps=Pixelsize

D=Depth

视差Disparity与深度图

Focallength

视差Disparity与深度图

Baseline

视差Disparity与深度图

Pixelsize

视差Disparity与深度图

Disparity

备注:

(Pixelsize)像素大小是图像传感器中单个像素的大小。像素大小用微米表示。由于立体视觉系统使用两个摄像机,图像传感器的像素大小必须相同。随着像素尺寸的减小,系统的深度范围增大。

(Disparityvalue)视差是指在两个摄像机图像之间的像素位置的差异。假设立体视觉相机中的左图像在位置(1,30)具有像素,并且相同的像素在右图像中的位置(4,30)存在,视差值或差值为(4-1)=3。视差值与上述公式的深度成反比。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129922.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • zencart免费模板下载

    zencart免费模板下载最近工作比较忙,没有时间专门来制作这个免费的包包模板。趁国庆放假有时间,顺便就把这个免费模板制作完了。今天特别提供出来给大家下载使用。考虑到很难满足所有有的要求,所以这个模板在一些地方基本没有修改原有模板的布局,只是简单的修改CSS。不过经过修改的这个模板也还算漂亮,大体上的布局已经设置好。我们没有那么多的时间去美化一个这样的模板,俗话说:授人鱼不如授人渔。如果有兴趣做二次开发的朋友可以继续修

    2022年7月27日
  • 谷歌的技术_探究GNSS技术在

    谷歌的技术_探究GNSS技术在文章目录引言TrueTime事务读写事务快照读只读事务总结引言Spanner是一个全球分布式的数据库,从数据模型来看Spanner很像BigTable,都是类似于key对应着一行数据,但是却并不一样,Spanner中衍生出了“目录”的概念(把两张表合并存储)。这并不是重点,Spanner的重是它是第一个在全球范围内传递数据且保证外部一致的分布式事务的系统,且支持几种特定的事务,这显然是一个很困难的问题,我们会在文章中加以描述,这篇文章主要对Spanner的事务以及实现事务所使用的TrueTimeAP

    2022年11月2日
  • Warmup预热学习率「建议收藏」

    Warmup预热学习率「建议收藏」学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种(一)什么是Warmup?Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习率来进行训练.(二)为什么使用Warmup?由于刚开始…

    2022年6月11日
  • linux如何安装nodejs_js 循环里面结束整个方法

    linux如何安装nodejs_js 循环里面结束整个方法方法一:源码包安装官网下载centos下载最新版10.9https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xzmkdir/opt/software/&&cd/opt/software/tar-xvfnode-v10.9.0-linux-x64.tar.xzmvnode-v10.9.0-linux-x64nodejs建立软连接,变为全局①ln-s/opt/software……

    2022年8月31日
  • Centos7:修改IP出现Job for network.service failed because the control process exited with error code问题

    Centos7:修改IP出现Job for network.service failed because the control process exited with error code问题centos7克隆之后,发现无ip。因为是克隆的,首先修改一些配置文件。vim /etc/sysconfig/network-scripts/ifcfg-xxxIPADDR=192.168.135.131GATEWAY=192.168.135.2NETMASK=255.255.255.0DNS1=192.168.135.2排查:1、查看mac地址是否冲突2…

    2022年6月13日
  • 自定义UIView重写touchesBegan无法响应点击事件的解决方法

    自定义UIView重写touchesBegan无法响应点击事件的解决方法定义一个UIView的子类重写touchesBegan响应点击事件问题是无法响应点击事件解决办法:在didFinishLaunchingWithOptions方法中先设置窗口可见再添加subView

    2022年7月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号