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

这篇具有很好参考价值的文章主要介绍了立体匹配入门指南(8):视差图、深度图、点云。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

视差图
立体匹配入门指南(8):视差图、深度图、点云
三维点云

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

视差(disparity)

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

深度(depth)

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

视差图(disparity map)

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

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

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

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

点云指三维空间的三维点集合,坐标属性( X , Y , Z X,Y,Z X,Y,Z),法线属性( N x , N y , N z N_x,N_y,N_z Nx,Ny,Nz)(可选),颜色属性( R , G , B R,G,B R,G,B)(可选)

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

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

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

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

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

深度图计算相机坐标系下的点云,也有着简单的公式:
Z = D X = D ( x − x 0 l ) f Y = D ( y − y 0 l ) f \begin{aligned} Z &= D\\ X &= \frac {D(x-x_{0l})}{f}\\ Y &= \frac {D(y-y_{0l})}{f} \end{aligned} ZXY=D=fD(xx0l)=fD(yy0l)
其中, x , y x,y x,y为像素的列坐标和行坐标, x 0 l x_{0l} x0l y 0 l y_{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等存储整数的格式中,这样的视差图只能用来观看视差效果,没有其他作用,比如我的代码里的存储方式。

问:极线像对下的深度图和原图的深度图是一样的吗?如何转换?
答: 不一样,因为深度图是在视图所在的相机坐标系下的,所以和相机坐标系强挂钩,极限校正后的左视图和原始的左视图是不一样的相机坐标系,所以它们的深度图是不一样的。文章来源地址https://www.toymoban.com/news/detail-401948.html

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

到了这里,关于立体匹配入门指南(8):视差图、深度图、点云的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年的深度学习入门指南(1) - 从chatgpt入手

    2012年,加拿大多伦多大学的Hinton教授带领他的两个学生Alex和Ilya一起用AlexNet撞开了深度学习的大门,从此人类走入了深度学习时代。 2015年,这个第二作者80后Ilya Sutskever参与创建了openai公司。现在Ilya是openai的首席科学家,带领工程师研发出了可能再次改变世界的chatgpt. 上图

    2024年02月01日
    浏览(56)
  • 2023年的深度学习入门指南(20) - LLaMA 2模型解析

    上一节我们把LLaMA 2的生成过程以及封装的过程的代码简单介绍了下。还差LLaMA 2的模型部分没有介绍。这一节我们就来介绍下LLaMA 2的模型部分。 这一部分需要一些深度神经网络的基础知识,不懂的话不用着急,后面的文章我们都会介绍到。 RMSNorm是一种改进的LayerNorm技术,

    2024年02月15日
    浏览(45)
  • 2023年的深度学习入门指南(19) - LLaMA 2源码解析

    上一节我们学习了LLaMA 2的补全和聊天两种API的使用方法。本节我们来看看LLaMA 2的源码。 上一节我们讲了LLaMA 2的编程方法。我们来复习一下: 我们先来看看text_completion函数的参数是什么意思,该函数的原型为: 我们来看下这些参数的含义: prompts:这是一个字符串列表,每

    2024年02月15日
    浏览(50)
  • 2023年的深度学习入门指南(2) - 给openai API写前端

    上一篇我们说了,目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实,人类犯的逻辑错误也是层出不穷。 比如,有人就认为要想学好chatgpt,就要先学好Python。 其隐含的推理过程可能是这样的: TensorFlow需要使用Python PyTorch需要使用Python Scikit-Learn需

    2023年04月08日
    浏览(45)
  • 2023年的深度学习入门指南(9) - SIMD和通用GPU编程

    深度学习从一开始就跟GPU有不解之缘,因为算力是深度学习不可或缺的一部分。 时至今日,虽然多任务编程早已经深入人心,但是很多同学还没有接触过CPU上的SIMD指令,更不用说GPGPU的编程。这一篇我们先给SIMD和GPU编程扫个盲,让大家以后用到的时候有个感性认识。 从多线

    2024年02月02日
    浏览(47)
  • 2023年的深度学习入门指南(6) - 在你的电脑上运行大模型

    上一篇我们介绍了大模型的基础,自注意力机制以及其实现Transformer模块。因为Transformer被PyTorch和TensorFlow等框架所支持,所以我们只要能够配置好框架的GPU或者其他加速硬件的支持,就可以运行起来了。 而想运行大模型,恐怕就没有这么容易了,很有可能你需要一台Linux电脑

    2024年02月16日
    浏览(47)
  • 2023年的深度学习入门指南(26) - 在自己电脑上运行通义千问7b模型

    通过量化,通义千问4位量化的模型大小为5.86G,可以在3060等小于16G的家用GPU上也可以运行起来。 通义千问7b提供了4位量化好的Qwen/Qwen-7B-Chat-Int4模型,我们直接调用就好。 首先安装依赖包: 如果你是Linux环境的话,可以安装下Flash-Attention来加速: Windows下暂时还用不了,这个

    2024年02月10日
    浏览(49)
  • 手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南

    B站:马上就更!!!_bilibili CSDN:手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南_百年后封笔-CSDN博客 Github:封笔 公众号:百年后封笔 你好,我是封笔! 如今深度学习技术的不断演进,我们的生活发生着翻天覆地的变化,无论是计算机视觉、自然语言处

    2024年02月08日
    浏览(82)
  • 从双目标定到立体匹配:pyton实践指南

    立体匹配是计算机视觉中的一个重要领域,旨在将从不同角度拍摄的图像匹配起来,以创建类似人类视觉的3D效果。实现立体匹配的过程需要涉及许多步骤,包括双目标定、立体校正、视差计算等。在这篇文章中,将介绍如何使用Python实现立体匹配的基本步骤和技巧。 下面的

    2024年02月11日
    浏览(45)
  • 数据结构入门指南:链表(新手避坑指南)

    目录 前言 1.链表 1.1链表的概念  1.2链表的分类 1.2.1单向或双向 1.2.2.带头或者不带头 1.2.33. 循环或者非循环 1.3链表的实现  定义链表 总结         前边我们学习了顺序表,顺序表是数据结构中最简单的一种线性数据结构,今天我们来学习链表,难度相较于顺序表会大幅增

    2024年02月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包