ZED使用指南(八)Depth Sensing

news2024/11/27 0:42:21

ZED立体相机再现了人类双目视觉的工作方式。通过比较左眼和右眼看到的两种视图,不仅可以推断深度,还可以推断空间中的3D运动。

ZED立体相机可以捕捉到场景的高分辨率3D视频,通过比较左右图像之间的像素位移可以估计深度和运动。

深度感知

深度感知是指确定物体之间的距离,以三维的角度看世界。到目前为止,深度传感器仅限于近距离和室内的深度感知,限制了其在手势控制和身体跟踪方面的应用。ZED是第一个使用立体视觉的通用深度传感器:

深度可以达到20米;

深度捕捉的帧率可以达到100FPS;

视野可以达到110度(H)x70度(V);

可以在室内和室外工作。

深度图

ZED捕获的深度图为图像中的每个像素(X,Y)存储距离值(Z)。距离以公制单位表示(例如米),并计算从相机左镜头后到场景对象的距离。

因为深度图是32位编码的所以不能直接显示。要显示灰度图,可以用在[0,255]之间的8位单色(灰度)值表示,255表示最近的深度近似值,0表示最远的深度近似值。

3D点云

另一种表示深度信息的常用方法是3D点云。点云可以看作是三维的深度图。深度图只包含每个像素的距离或Z信息,而点云代表场景外表面的3D点(X,Y,Z)的集合,可以包含颜色信息。 

 一、深度设置

ZED SDK提供了两种深度感知模式:STANDARD和FILL。

1、STANDARD模式

STANDARD模式是ZED的默认深度感知模式。该模式保存了距离测量和形状,运行速度比FILL模式快,但是由于视觉遮挡和过滤,它会包含孔洞。这些洞在深度图中用黑色区域表示。使用STANDARD模式的应用包括自主导航,障碍物检测,3D地图,人员检测和跟踪。

在STANDARD模式下,孔洞(黑色像素)根据其类型有不同的值:
NAN 称为OCCLUSION_VALUE。像素的深度无法估计,因为被遮挡或者是异常值。

-INFINITY 称为TOO_CLOSE。像素的深度无法估计,因为太靠近相机。

INFINITY 称为TOO_FAR。像素的深度无法估计,因为离相机太远了。

可以用isValidMeasure()检查有效的深度值。

2、FILL模式

FILL模式为左侧图像中的每个像素(X,Y)提供了一个具有Z值的完全密集深度图。FILL模式填充深度图中的孔洞和遮挡,并添加了一个过滤阶段,能够提高边缘和时间稳定性,但会改变场景中物体的实际距离。

该模式推荐应用于混合现实捕获和视觉效果等。FILL模式比STANDARD模式需要更多的资源,并且以更低的FPS运行。

如果要将深度感知设置为FILL模式,在“RuntimeParameters”中设置“SENSING_MODE_FILL"。

# Set depth mode in ULTRA
init_parameters = sl.InitParameters()
init_parameters.depth_mode = sl.DEPTH_MODE.ULTRA

二、深度模式

这些设置可以调整精度水平,范围和深度传感模块的计算性能。从更好到更快的排列如下:

NEURAL:通过AI技术把深度感知提升到了一个新的水平。即使在最具有挑战性的情况下也是准确和平稳的。

ULTRA:为基于计算机视觉的技术提供了最高的深度范围和更好的Z精度。

QUALITY:具有使表面光滑的强大的过滤阶段。

PERFORMANCE:设计得很光滑,可能会漏掉一些细节。

一般来说,建议对桌面和嵌入式应用都使用ULTRA模式。如果应用需要大量资源,切换到PERFORMANCE模式。

# Set depth mode in ULTRA
init_parameters = sl.InitParameters()
init_parameters.depth_mode = sl.DEPTH_MODE.ULTRA

三、深度范围

深度范围对应于可以估计物体深度的最小和最大距离。

1、最小范围

最小范围可以使用InitParameters中的depth_minimum_distance设置从默认值降低。

init_params = sl.InitParameters()
init_parameters.coordinate_units = sl.UNIT.METER
init_parameters.depth_minimum_distance = 0.15 # Set the minimum depth perception distance to 15cm

将最小范围降低到非常小的值可以显著增加内存需求并降低FPS。增加这个值可以提高性能。 

对于需要远距离深度感知的应用,建议将depth_minimum_distancee设置为1m或更大以提高性能。 

2、最大范围

最大范围可以用sl.InitParameters中的depth_maximum_distance增加。

init_params = sl.InitParameters()
init_parameters.depth_mode = sl.DEPTH_MODE.ULTRA  # Set the depth mode to ULTRA
init_parameters.coordinate_units = UNIT.METER
init_parameters.depth_maximum_distance = 40       # Set the maximum depth perception distance to 40m

建议使用ULTRA深度模式来提高远距离的深度精度。

最大深度范围一定程度上可以缩小到一定距离以上的钳制值,这对于减少远距离的深度抖动很有用。

增大最大范围对内存和FPS没有影响。

四、深度稳定

深度稳定是一种暂时融合和过滤几帧深度图的功能。这样可以减少抖动并提高静态对象的深度精度。即使当相机是通过使用ZED SDK的位置跟踪能力移动时,深度稳定也在运行。它还可以检测运动物体,以避免融合动态区域的深度。
默认情况下,深度稳定是启用的。由于它在后台启用位置跟踪,可以使用init_parameters.depth_stabilization = false来禁用深度稳定,以提高计算性能。

对于固定相机,建议在使用深度稳定时启用PositionalTrackingParameters::set_as_static。这可以让深度稳定模块知道相机是静态的,因此它可以禁用视觉跟踪并减少计算负载。

五、深度准确性

立体视觉使用三角测量从视差图像中估计深度,下面的公式描述了深度分辨率在立体相机范围内的变化情况:

Dr=Z^2*alpha,其中Dr为深度分辨率,Z为距离,alpha为常数。

深度精度随z-距离呈二次递减,近距离立体深度精度为距离的1%,远距离立体深度精度为距离的9%。在均匀和无纹理表面(如白墙、绿色屏幕和镜面区域)上的异常值测量也会影响深度精度。这些表面通常在深度测量中产生暂时的不稳定。

六、最佳实践

所有来自Stereolabs的相机都可以在室内和室外远距离(可达20米)使用。提供最佳深度精度的配置是将相机放置在距离场景30厘米至1米的工作距离处。要捕捉快速运动,请使用相机的高速模式(HD720 @ 60 FPS或VGA @ 100 FPS)。

避免在光线非常弱的环境中使用相机,因为相机使用彩色图像进行深度感知。但是可以通过将相机帧速率降低到15FPS来改善弱光性能。

可以使用USB 3.0扩展线将USB线的距离扩展到15m,使用光纤USB 3.0扩展器将USB线缆的距扩展到100m。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTFHub-ctfhub-Git泄露-Log

CTFHub-ctfhub-Git泄露-Log 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题 1、dirsearch扫描 github上下载dirsearch-master 命令F…

SpringMVC第二阶段:@RequestMapping注解详解

RequestMapping注解详解 RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序,在web.xml中配置了访问地址之后,它们之间就有一个访问映射关系。 1、value属性 value 属性用于配置方法对应的访问地址. /*** RequestMapping 可以配…

JavaScript实现背景图像切换3D动画效果

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! &am…

Flask全套知识点从入门到精通,学完可直接做项目

目录 Flask入门 运行方式 URL与函数的映射(动态路由) PostMan的使用 查询参数的获取 上传文件 其它参数 url_for 函数 响应-重定向 响应-响应内容 响应-自定义响应 Flask模板 模板介绍 模板的使用 模板-传参 模板使用url_for函数 过滤器介绍 Jinja模板自带过滤器 流程…

DTFT和DFT有何区别?一文为你讲解清楚

很多人在开始学习数字信号处理的时候,对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚,IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT和DFT的区别吧。 DTFT, DFT 的区别是含义不同、性质不同、用途…

Elasticsearch集群搭建与相关知识点整理

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch集群的搭建,以及Elasticsearch集群相关知识点整理。 如果文章有什么需要改进的地方还请大佬不吝赐教&am…

C++刷题--选择题4

1, 在()情况下适宜采用 inline 定义内联函数 A 函数体含有循环语句 B 函数体含有递归语句 C 函数代码少、频繁调用 D 函数代码多,不常调用 解析 C,以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方…

SpringSecurity实现角色权限控制(SpringBoot+SpringSecurity+JWT)

文章目录 一、项目介绍二、SpringSecurity简介SpringSecurity中的几个重要组件:1.SecurityContextHolder(class)2.SecurityContext(Interface)3.Authentication(Interface)4.AuthenticationMana…

c++项目环境搭建(VMware+linux+ubantu+vscode+cmake)

想运行一个c项目,但是环境怎么整呢?b站走起!!! 本文需要的安装包 链接:https://pan.baidu.com/s/1XJbR2F1boQ-CqV8P71UOqw 提取码:swin 一、在虚拟机中安装ubantu 八分钟完成VMware和ubunt…

Git命令大全,涵盖Git全部分类,非常值得收藏!

Git是一个分布式版本控制系统,可以让开发者在不同的平台和环境中协作开发项目。Git有很多命令,可以用来管理项目的状态、历史、分支、合并、冲突等。本文将介绍一些Git常用的命令,并给出示例和分类。 配置命令 配置命令可以用来设置Git的全局…

算法设计与分析:贪心法

目录 第一关:贪心法 任务描述: 相关知识: 贪心法的优缺点: 例题: 解题分析: 程序实现: 关键代码: 编程要求: 测试说明: 第二关:最小生成…

体验了下科大讯飞版ChatGPT,厉害了!

前几天科大讯飞的星火认知大模型发布了,我刚好有朋友在科大讯飞工作,于是就第一时间体验了一波。 一番体验下来确实比我预想的效果要好,没想到国产模型的效果还不错,我试了很多方面,比如通用常识功能、写作功能、学习…

【论文阅读】基于鲁棒强化学习的无人机能量采集可重构智能表面

只做学习记录,侵删原文链接 article{peng2023energy, title{Energy Harvesting Reconfigurable Intelligent Surface for UAV Based on Robust Deep Reinforcement Learning}, author{Peng, Haoran and Wang, Li-Chun}, journal{IEEE Transactions on Wireless Comm…

今日不足——学习目标做了但是没执行

今天复习概率论的时候我发现我复习数值计算方法的时候没有严格按照步骤来,如果按照步骤来我的最小二乘本来可以不用错的。我在复习时候的步骤之间就是抛开书本然后之间进入应用然后遇到不会的回头复习概念虽然缺失能做题目了但是不了解每个知识点的原理和思想&#…

el-drawer 被遮罩层覆盖 显示异常

这是由于元素的一些层级设置不同导致的&#xff0c;所以蒙层被放在了最顶端。解决方法就是加上如下2行代码: <el-drawer title"我是标题" :visible.sync"showDrawer" :direction"ltr" :append-to-body"true":modal-append-to-body&…

【C++ STL】 list 模拟实现

文章目录 &#x1f4cd;前言&#x1f308;STL之list的模拟实现&#x1f388;list_node节点的定义&#x1f388;iterator迭代器&#x1f56f;️构造函数&#x1f56f;️*it&#x1f56f;️->&#x1f56f;️it/it&#x1f56f;️it--/--it&#x1f56f;️! / &#x1f388;l…

Web开发介绍

Web开发介绍 1 什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如下图所示的网站&#xff1a;淘宝&#xff0c;京东等等 那么我们…

如何使用sbvadmin进行私有化部署的代码开发

前言 本文主要讲述如何使用sbvadmin进行私有化部署的代码开发&#xff0c;这里我们用的私有化仓库是gitee&#xff0c;当然你也可以用自己搭建的gitlab来做&#xff0c;原理差不多。 一、新建仓库 1.后端api 导入后端仓库&#xff1a;https://github.com/billyshen26/sbvadmi…

08- 算法解读 Mask R-CNN (目标检测)

要点&#xff1a; Mask R-CNN 解读 参考资料&#xff1a;vision/references/detection at main pytorch/vision GitHub 四 Mask R-CNN 基本信息 4.1 环境配置 Python3.6/3.7/3.8Pytorch1.10或以上pycocotools(Linux:pip install pycocotools; Windows:pip install pycoco…

Zigbee物联网应用与开发复习汇总(附某高校期末真题试卷)

文章目录 一、知识梳理二、编程实战三、高校真题A卷B卷 一、知识梳理 1. Zigbee、蓝牙、IEEE802.11b&#xff08;WiFi&#xff09;标准都是工作在2.4G频段的无线通信标准&#xff1b;Zigbee主要用在短距离无线控制系统&#xff0c;传输少量的控制信息&#xff1b; 2. 短距离无…