草庐IT

3D相机初步

hao540137644 2023-04-08 原文

1 概述

使用普通2D相机对物体进行拍摄,实际上是将真实三维世界中的物体向相机二维成像平面做映射。这个过程是一个信息失真的过程。如果我们只想了解物体某个方面的形状、大小、纹理、位置等信息,2D摄像机就可以满足需求。但如果我们想对物体进行更全面立体的了解,我们就需要知道物体的深度信息,也就是在平面之上增加一个感知维度,这时我们就需要3D相机。

随着人工智能技术的快速发展,人们对人工智能体的要求也在不断提高,而更高的智能化水平也意味着要采集、处理更全面丰富的环境信息。在这种情况下,3D相机相比于传统2D相机更能满足技术的发展和落地。近年来,得益于无人驾驶和元宇宙产业的蓬勃发展,3D视觉技术得到了前所未有的关注,越来越多的公司进入了3D相机研发的领域。

根据相机获取其所拍摄物体深度信息的原理,3D相机可分为双目相机和深度相机两大类。其中,双目相机是在平行的两个普通RGB摄像头拍摄的图像基础上,利用两个摄像头之间的基线距离进行几何计算实现对深度图的获取;而深度相机是采用不同于一般摄像头的被动成像原理,在相机中加入能投射特定光束的光学发射器,并根据摄像头采集到的光束反射信息实现对物体深度信息的计算或获取,根据技术原理的不同,深度相机又分为结构光和TOF两种。

2 双目相机

2.1 视差图

如前所述,双目相机是通过平行的两个普通摄像头采集到的图像信息来计算深度图的,这和人使用双眼来观察世界的原理相同。双目相机的两个RGB摄像头由于其所处位置的微小差异导致采集到的图像信息也存在差异,基于这种差异我们可以使用立体匹配算法得到视差图(disparity map)。立体匹配算法又有稀疏立体匹配和稠密立体匹配两类。

2.2 深度图

基于视差图,再根据平行双目视觉的几何关系可以计算3D图像的深度图(即以相机到所拍摄各实际点距离为像素值的图通道),公式如下:
d e p t h = ( f ∗ b a s e l i n e ) / d i s p . depth = (f*baseline)/disp. depth=(fbaseline)/disp.
其中,depth表示深度图,f表示归一化后的焦距,baseline为基线距离(即双目相机两个摄像头光心之间的距离),disp表示视差图。

2.3 双目相机的特点

双目相机的视觉传感器为普通RGB摄像头,这使得其拍摄图像的分辨率可以达到很高;但同时其图像质量十分依赖于拍摄场景,如光学环境、物体颜色和纹理等,这导致双目相机的使用存在很多局限,如在夜间、尘雾等场景效果很差。此外,由于双目相机深度图的计算与其基线距离直接相关,因此测量精度会随拍摄距离增加而降低,有效测量范围一般不大。

3 深度相机

针对双目相机受拍摄场景局限的问题,深度相机从底层硬件出发,在相机中加入能投射结构光或激光的光学发射器,并利用摄像头采集到反射回来的投射光信息计算物体的深度信息。根据发射光学信号和深度信息获取原理的不同,双目相机可分为结构光相机和TOF相机两种。

3.1 结构光(structured light)

结构光是一种带有特定结构信息的光信号。结构光相机就是通过主动投射带有已知图案结构的光信号,再由摄像头采集其照射物体反射回来的结构光信息,根据后者的畸变计算物体的深度信息。计算方法基于光学三角测量原理。光学发射器的投射光束模式有:点结构光模式、线结构光模式、多线结构光模式、面结构光模式、相位法等。

3.2 TOF(Time Of Flight)

TOF相机是通过测量调制激光从发射器发出到反射回摄像头的时间差,并利用已知的调制激光光速和波长计算物体的深度信息。激光调制方式有脉冲调制和连续波调制两种。

由于TOF相机对时间测量精度的依赖很强,因而在短距离场景时,TOF相机的测量精度较低,但TOF相机可以通过调节发射激光脉冲的频率改变其测量范围,而且其测量精度不会随测量距离的增加而降低,在其有效测量范围内,测量误差可控,抗干扰能力强。

4 3D图像数据类型

3D图像数据有两种类型,一种是增加深度图通道的深度图像,一种是点云数据。前者来源主要是双目相机,后者来源主要是深度相机、激光雷达等。

深度图像经过坐标转换可以转化为点云数据,点云数据在一定条件下也可以转化为深度图像。

5 3D相机对比

3D相机类型双目相机结构光相机TOF相机
测量方式被动式主动式主动式
测量原理双目立体匹配 三角测量法结构光特征匹配 三角测量法时间差计算
图像分辨率高,可达2K适中,可达1080×720低,一般低于640×480
帧率一般30FPS一般30FPS较高,可达上百帧
测量范围和基线距离成正比,一般在2m内0.1m-10m0.1m-100m
测量精度2m内5mm,与测量距离正相关0.01~1mm近距离误差较大,远距离误差可达厘米级
软件复杂度非常高
适用场景前背景差异明显中低光照远距离
功耗算法功耗较大适中较大
价格千元千元至十万,依测量精度不同千元至百万,依测量范围、帧率不同
应用场景实验室,商用场景较少机器人,手机(人脸解锁、支付、美颜等)无人驾驶、机器人、AR

参考文章

  1. https://blog.csdn.net/m0_57171062/article/details/121040555?spm=1001.2014.3001.5506
  2. https://blog.csdn.net/qq_42759162/article/details/123519276?spm=1001.2014.3001.5506
  3. https://www.cnblogs.com/riddick/p/8486223.html

有关3D相机初步的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  3. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  4. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  5. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  6. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  7. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  8. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

  9. Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别 - 2

    目录一、世界坐标系与本地坐标系二、srcGameObject.transform.TransformPoint(Vector3 vec)三、srcGameObject.transform.TransformVector(Vector3 vec)四、srcGameObject.transform.TransformDirection(Vector3 vec)五:示例一、世界坐标系与本地坐标系    世界坐标很好理解,就是模型的transform.position,通常在无父物体的情况下,创建出来的模型默认位置就是世界坐标系的原点。    每个物体都有自身的坐标系,此坐标系就是本地坐标系。本地坐标

  10. 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定 - 2

    俯拍相机中心和吸嘴中心的标定文章目录俯拍相机中心和吸嘴中心的标定前言适用模型如下:一、使用一个标定片进行标定1.关键注意:2.标定步骤:二、使用一个L型的工件1.关键注意:2.标定步骤:总结前言在自动化设备领域,使用相机进行定位是很普遍存在的,而使用相机定位就必定会用到标定,本文介绍两种关于吸嘴上方的俯拍相机和吸嘴中心的标定方法(前提是带有仰拍相机和俯拍相机)。【还有很多相机的使用场景的标定方法将在以后的文章中进行阐述】适用模型如下:一、使用一个标定片进行标定1.关键注意:关键是使用两个相机的中心和识别偏差,得到两个相机的中心固定偏差。注:后续俯拍相机拍物料识别得到的偏差以吸嘴中心在俯拍相机中

随机推荐