本篇是比较简单的基础概念,刚入门的朋友可能是需要的。

视差图 三维点云

首先,我们要介绍下这三个概念。

视差(disparity)

视差 ddd 等于同名点对在左视图的列坐标减去在右视图上的列坐标,是像素单位
d=xl−xrd=x_l-x_rd=xl​−xr​立体视觉里,视差概念在极线校正后的像对里使用。

深度(depth)

深度D等于像素在该视图相机坐标系下ZZZ坐标,是空间单位。深度并不特在校正后的图像对里使用,而是任意图像都可获取深度图。

视差图(disparity map)

视差图指存储立体校正后单视图所有像素视差值的二维图像。

  1. 视差图是一张二维图像,和原图等大小
  2. 视差图每个位置保存的以像素为单位的该位置像素的视差值
  3. 以左视图视差图为例,在像素位置p的视差值等于该像素在右图上的匹配点的列坐标减去其在左图上的列坐标

深度图(depth map)

深度图指存储单视图所有像素的深度值的二维图像,是空间单位,比如毫米。

  1. 深度图是一张二维图像,和原图等大小,也就和视差图等大小
  2. 深度图每个位置保存的是该位置像素的深度值
  3. 深度值就是相机坐标系下的Z坐标值

点云(point cloud)

点云指三维空间的三维点集合,坐标属性(X,Y,ZX,Y,ZX,Y,Z),法线属性(Nx,Ny,NzN_x,N_y,N_zNx​,Ny​,Nz​)(可选),颜色属性(R,G,BR,G,BR,G,B)(可选)

其次,为什么会有视差图和深度图呢?

我们知道,立体匹配一般是指逐像素的稠密匹配,这意味着每个像素都会得到一个视差值(包括无效值),如何存储这些视差值呢,显然以二维图的方式存储是很合适的,最大的两点优势是一方面可以通过像素坐标快速的在二维图中找到对应位置的视差值,而且和图像一样是有序的,邻域检索、视差滤波等将会变得非常方便;另一方面是可以直观的通过观察视差图和原图的对比,对视差图的质量有初步的判定。

而深度图的意义则是以更少的存储空间、有序的表达图像匹配的三维成果。更少的存储空间是因为只保存了一个深度值,而不是三维点云的三个坐标值,而深度值是可以结合像素坐标计算三维点坐标值的。有序是因为深度图和原图像素是一一对应的,所以原图的邻域信息完全继承到了深度图里。

这就是视差图和深度图的意义,视差图是立体匹配算法的产出,而深度图则是立体匹配到点云生成的中间桥梁。

视差图和深度图中间,有着一对一的转换公式:
D=Bfd+(x0r−x0l)D=\frac {Bf}{d+(x_{0r}-x_{0l})}D=d+(x0r​−x0l​)Bf​
其中,DDD为深度,ddd为视差,BBB为基线长度,fff为焦距(像素单位),x0lx_{0l}x0l​和x0rx_{0r}x0r​分别为左右视图主点的列坐标。,另一个较为熟知的公式是
D=BfdD=\frac {Bf}{d}D=dBf​
这是在左右视图主点的列坐标相同的特殊情况,比如主点都在中心。

深度图计算相机坐标系下的点云,也有着简单的公式:
Z=DX=D(x−x0l)fY=D(y−y0l)f\begin{aligned} Z &= D\\ X &= \frac {D(x-x_{0l})}{f}\\ Y &= \frac {D(y-y_{0l})}{f} \end{aligned}ZXY​=D=fD(x−x0l​)​=fD(y−y0l​)​​
其中,x,yx,yx,y为像素的列坐标和行坐标,x0lx_{0l}x0l​和y0ly_{0l}y0l​为主点的像素坐标。

常见问答:
问:为什么我从.png格式的视差图里读取到的视差值和真实值有很大差异?
答: 我们要先搞清楚,视差图是如何存储的。通常而言,我们是把二维视差图以图像格式存储,常见的格式有png、tif、pfm等,但这些图像格式存储的数据类型是有区别的,其中png只能存储整数,而tif和pfm则可以存储小数。而显然准确的视差值必然是浮点型的小数,所以存储为tif和pfm可以原值无损存储,而存储为png必然会损失精度,所以有的代码比如opencv会把得到的浮点型视差值乘以16倍取整,存储到png里,这样存储视差值的精度变为1/16,对于这种情况我们在读取png后要先除以16才是真实视差值,且视差会有阶梯分层现象。

那有同学就问,既然这样为什么要存储png呢?是因为目前主流的图像软件,不支持直接看浮点格式的tif和pfm,存储为png可以更好的观看视差图,当然要是实际生产使用,是必然不建议存储为png的,用来查看视差结果是可以的。

还有人会直接把视差值拉伸或者压缩到0~255,存储到png或bmp等存储整数的格式中,这样的视差图只能用来观看视差效果,没有其他作用,比如我的代码里的存储方式。

问:极线像对下的深度图和原图的深度图是一样的吗?如何转换?
答: 不一样,因为深度图是在视图所在的相机坐标系下的,所以和相机坐标系强挂钩,极限校正后的左视图和原始的左视图是不一样的相机坐标系,所以它们的深度图是不一样的。

  1. 对于极线像对左视图某像素ppp,通过单应变换 HHH 转换到原左视图上,得到原图上的像素坐标 qqq。
  2. 将ppp的相机坐标系坐标通过一个旋转 RRR 变换到原左视图的相机坐标系坐标,得到 qqq 的深度。
  3. HHH和RRR在极线校正步骤可以获取(极线校正的必然产出)。

立体匹配入门指南(8):视差图、深度图、点云相关推荐

  1. 双目立体视觉建立深度图_计算机视觉实验五 双目立体匹配获得视差图,深度图...

    完整源码链接 https://github.com/LamyaLi/cvLab 文章目录 一. 立体匹配的研究背景及意义 二. 立体匹配算法的基本实现思想 1.误差能量函数 2.基于最小平均误差能量的 ...

  2. visio studio json工具_《产品经理入门指南》彩蛋2:别技淫原型图!你的Visio和Balsamiq Mockup入门了吗?...

    温馨提示: 如果你有关于产品经理方面的任何问题,欢迎关注我的微信公众号与我互动.最新的免费系统的产品经理课程<老司机带你做产品>已经推出,请关注微信公众号:iamliuwenzhi 很多产 ...

  3. 2019-9-29 opencv摄像机标定与三维重构4-Depth Map from Stereo Images立体图像中的深度图(视差图)

    官网参见https://docs.opencv.org/3.4.1/dd/d53/tutorial_py_depthmap.html 上一节中,我们学习了极线约束的概念和相关术语.主要包含:如果我们有 ...

  4. android 地铁地图api,入门指南-地铁图 JS API | 高德地图API

    入门指南将带您迅速了解地铁图 JS API的基本使用,学习如何以easy模式创建地铁简易图,使您在最短时间内创建一个地铁图页面. 准备页面 在正式开始开发地图应用之前,您需要做如下几步: 申请JS A ...

  5. 视差图转换为深度图公司_视差刻录:使用SVG将照片从2D转换为3D

    视差图转换为深度图公司 Last week we talked about ZorroSVG, a tool for converting your chunky transparent PNG-32 ...

  6. openMVS深度图计算:DenseReconstruction Estimate之EVTEstimateDepthMap之视差图初始化

    视差图初始化 1 对图像下采样 2 TriangulatePoints2DepthMap(对稀疏点三角化.栅格化.对depthMap进行插值) 3 三角网格栅格化 本文讲的是TSGM的视差图初始化,采 ...

  7. 双目立体匹配入门【一】(理论)

    文章目录 参考文章 1 专有名词 2 双目视觉基础 1 针孔摄像机模型 2 双目交会 3 立体测量的基本原理:三角化 4 极线约束 5 极线校正/立体校正 6 立体匹配难点 7 立体匹配方法分类 8 ...

  8. 一文详解如何在真实场景的双目立体匹配(Stereo Matching)获取深度图

    来源:博客园 作者:一度逍遥 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左.右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图.而深度图的应用范围非常广泛,由于其能够记录 ...

  9. 博士大佬为机器学习总结的人工智能入门指南!

    今天给大家推荐一位认识的好朋友:top985高校AI博士(本硕博985),CSDN博客专家,其开源了周志华西瓜书<机器学习>纯手推笔记!荣登趋势榜,标星600+ Github | 博士大佬 ...

最新文章

  1. SQL笛卡尔积结合前后行数据的统计案例
  2. SSAS : 使用.NET为SSAS编写自定义程序集(四)
  3. Python测试开发django4.templates模板配置
  4. gprMax 3.1.5 安装以及在pycharm或VScode中运行的方法
  5. iOS---UICollectlionView 的使用
  6. idea通过Ctrl+鼠标滚轮放大/缩小字体
  7. python中特殊符号怎么输入_python中怎么输入引号
  8. 《Linux内核修炼之道》——2.2 编译内核
  9. win8下Oracle 12c 创建新用户并分配表空间
  10. iview2.0 bug之+8 区的 DatePicker
  11. 分别用精密星历和广播星历计算卫星坐标 -- 对 GNSS 第一次编程的总结
  12. 马上2023年了,终于发现一款颜值爆表的记账软件
  13. 三、JavaSE_集合(Set)
  14. 得帆创始人张桐:《华为数字化转型之道》系列解读之三
  15. php mysql某小型汽车维修店信息管理系统zjyY3
  16. (1)Unity使物体去掉影子
  17. VB中Byval和byref的区别
  18. vc60.pdb打不开怎么办
  19. java 生成 checksum
  20. 数据仓库 pdf 电子书大全

热门文章

  1. JavaWeb数据交互前后台[Java+JSP+MySql+tomcat] 仿12306购票系统前台和后台(一)项目介绍以及需求分析
  2. linux删除的相关命令
  3. 使用uuid作为数据库主键,被技术总监怼了一顿!
  4. 3d量测怎么学距离_零基础学习3D建模用这几种方法,学习效率提升没毛病
  5. 华为云-云耀云服务器之CentOS安装宝塔面板
  6. python 数据分析 实际案例-Python数据分析案例实战
  7. 京东获得店铺的所有商品 API 返回值说明
  8. 新游发布:《Don't touch the color》
  9. Linux笔记之浅析关闭防火墙和selinux
  10. java后台怎么获取系统时间_Java 后台获取当前时间