利用lidar生成深度图

news/2024/4/28 1:08:09/文章来源:https://blog.csdn.net/ZauberC/article/details/137106409

前言

目前,深度图像的获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等。针对深度图像的研究重点主要集中在以下几个方面:深度图像的分割技术,深度图像的边缘检测技术,基于不同视点的多幅深度图像的配准技术,基于深度数据的三维重建技术,基于深度图像的三维目标检测技术,深度数据的多分辨率建模和几何压缩技术等。在PCL中深度图像与点云最主要的区别在于,其近邻的检索方式不同,并且可以互相转换。

RangeImage概念及相关算法

1.1 深度图像简介

深度图像(Depth Images),也被称为距离影像(Range Images),是指将图像采集器到场景中各点的距离(深度)值作为像素值的图像,它直接反映了景物可见表面的几何形状,利用它可以很方便的解决3D目标描述中的许多问题。深度图像经过坐标转换可以计算为点云数据,有规则及必要信息的点云数据也可以反算为深度图像数据。

从数学模型上看,深度图像可以看作是标量函数 在集合 上的离散采样,得到 ,其中 为二维网格(矩阵)的索引,
在这里插入图片描述

1.2 PCL中RangeImage的相关类

PCL中的range_image库包含两个表达深度图像和对深度图像进行操作的类,其依赖于pcl::common模块。深度图像(或距离图像)的像素值代表从传感器到物体的距离或者深度,如下图所示。深度图像是物体三维表示形式,一般通过立体相机或者ToF相机获取。如果知道相机的内标定参数,就可以将深度图像转化为点云。
在这里插入图片描述

pcl::RangeImage rangeImage;rangeImage.createFromPointCloud(pointCloud,angularResolution, maxAngleWidth,maxAngleHeight,sensorPose,coordinate_frame,noiseLevel,minRange,borderSize);
std::cout << rangeImage << "\n";

基于经典图像处理的方法

虽然基于CNN的方法已经霸榜了KITTI的Depth Completion,但是在小数据量情况下,基于经典图像处理的算法依旧有其优势。我们来看看几个常见的基于图像处理的深度图补全思路。

High-resolution LIDAR-based Depth Mapping using Bilateral Filter

这篇文章的直接在点云投影的深度图像上做补全,没有用到彩色图像信息,方法颇为平凡,可读之处在于实验,它把最常见的几个图像滤波方法做了非常细致的对比。它的输入是一个点云投影成的颇为稠密的深度图,尚未没有去除背景点。它的方法分为两步:第一步是背景点剔除,在局部区域用DBSCAN取剔除远处的cluster;第二步是用双边滤波器(Bilateral Filter)对深度图进行插值,以达补全的目的。

背景点剔除,在每一个局部区域内,用DBSCAN将有值的点聚类为几个类,距离函数是相对深度差 -neighborhood值为0.08,如果DBSCAN有超过两个类,根据类的大小取选择哪个类参与下一步插值,总体是偏向于靠近相机的类。

双线性插值,对每一个空白点 ,它的局部窗口内有值点集为 ,它的深度值为:在这里插入图片描述
最后的结果如上表所示。BF*为上述方法,毫无疑问效果最好。其他方法并未做遮挡检测,这个比较颇为不公平。BF方法没有做遮挡检测。NEA是取距离最近值。DEL是做Delaunay三角花后插值。MIN方法其实就是Z-buffer的方法,效果不赖。MED是中值滤波。IDW是线性插值,线性系数是Inverse Distance Weighting。KRI是Kriging Filter。AVE是均值滤波。MAX是最大值滤波。

这篇文章其实有四个问题:第一个问题是是速度,对每一个窗口做DBSCAN速度会极慢,可以改用点云渲染里面的技巧快速去除背景。第二个问题是在深度图像里面做插值有些不合理,我们应该在视差图中用重心坐标进行插值,这一点在我的另外一篇文章里描述了。第三个问题是它的输入深度图像其实非常稠密,它是由好几帧激光雷达点云拼接出来的,无法处理更为稀疏的图像。最后一个问题是这篇16年的文章的想法其实在其很多年之前的文章就有了,比如这篇08年的文章,这篇08年的文章甚至比这篇16年的文章提供了更为全面和深刻的分析。

详见:深度图像补全(Depth Map Completion) - 上
(3)聚类算法之DBSCAN算法

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的神奇bug2

今天测试出一个很诡异的bug&#xff0c; 这个错误还真的很难发现 测试1 a [1,10,100] for i in a:print(i)if(i10):a[20,30,-1]一般来说我们在进行迭代时&#xff0c;a这个值时不能改动的&#xff0c;但是现在的问题时如果我不小心给改动了呢&#xff0c;结果如下 也就是说…

文本文件操作

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 文件操作 程序运行时&#xff0c;产生的数据都是临时数据&#xff0c;程序一旦运行结束都会被释放。通过文件可以将数据持久化。 C中对文件进行操作需要包含头文件<fstream> 文件…

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…

【Redis面试题】Redis 的大 Key 对持久化有什么影响?

目录 大 Key 对 AOF 日志的影响大 Key 对 AOF 重写和 RDB 的影响总结 Redis 的持久化方式有两种&#xff1a;AOF 日志和 RDB 快照。 所以接下来&#xff0c;针对这两种持久化方式具体分析分析。 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 …

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

HarmonyOS 应用开发之UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本文将从如下场景…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

面试笔记——MyBatis(执行流程、延迟加载和缓存)

MyBatis 是一个持久层框架&#xff0c;用于简化 Java 应用程序与数据库之间的交互过程。具体而言&#xff0c;它提供了一种将数据库操作映射到 Java 方法的方式&#xff0c;通过 XML 文件或注解配置 SQL 语句与 Java 方法的映射关系。使用 MyBatis&#xff0c;开发人员可以通过…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

Docker-Container

Docker ①什么是容器②为什么需要容器③容器的生命周期容器 OOM容器异常退出容器暂停 ④容器命令清单总览docker createdocker rundocker psdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker container insp…

Elasticsearch从入门到精通-07ES底层原理学习

Elasticsearch从入门到精通-07ES底层原理和高级功能 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES底层原理包括集群原理、路由原理、分配控制、分配原理、文档分析原理、文档并发安全原理以及一些高…

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…

算法笔记~—位运算

目录 常见位运算&#xff1a; 1、基础位运算 2、对于一个数n。确定、修改这个数n二进制x位。 3、提取&#xff08;确定&#xff09;一个数n最右侧的1&#xff08;bit&#xff09;与干掉最右侧的1&#xff08;bit&#xff09; 4、异或运算律 5、位运算的优先级&#xff1a…

Qt扫盲-QAssisant 集成其他qch帮助文档

QAssisant 集成其他qch帮助文档 一、概述二、Cmake qch例子1. 下载 Cmake.qch2. 添加qch1. 直接放置于Qt 帮助的目录下2. 在 QAssisant中添加 一、概述 QAssisant是一个很好的帮助文档&#xff0c;他提供了供我们在外部添加新的 qch帮助文档的功能接口&#xff0c;一般有两中添…

百度智能云千帆,产业创新新引擎

本文整理自 3 月 21 日百度副总裁谢广军的主题演讲《百度智能云千帆&#xff0c;产业创新新引擎》。 各位领导、来宾、媒体朋友们&#xff0c;大家上午好。很高兴今天在石景山首钢园&#xff0c;和大家一起沟通和探讨大模型的发展趋势&#xff0c;以及百度最近一段时间的思考和…

为什么Python不适合写游戏?

知乎上有热门个问题&#xff1a;Python 能写游戏吗&#xff1f;有没有什么开源项目&#xff1f; Python可以开发游戏&#xff0c;但不是好的选择 Python作为脚本语言&#xff0c;一般很少用来开发游戏&#xff0c;但也有不少大型游戏有Python的身影&#xff0c;比如&#xff1…

sheng的学习笔记-AI-人脸识别

目录:sheng的学习笔记-AI目录-CSDN博客 需要学习卷机神经网络等知识&#xff0c;见ai目录 目录 基础知识&#xff1a; 人脸验证&#xff08;face verification&#xff09; 人脸识别&#xff08;face recognition&#xff09; One-Shot学习&#xff08;One-shot learning&…

PTA-练习8

目录 实验5-3 使用函数求Fibonacci数 实验5-4 输出每个月的天数 实验5-9 使用函数求余弦函数的近似值 实验5-11 空心的数字金字塔 实验6-6 使用函数验证哥德巴赫猜想 实验6-7 使用函数输出一个整数的逆序数 实验6-8 使用函数输出指定范围内的完数 实验8-1-7 数组循环右…

Transformer的前世今生 day11(Transformer的流程)

Transformer的流程 在机器翻译任务中&#xff0c;翻译第一个词&#xff0c;Transformer的流程为&#xff1a; 先将要翻译的句子&#xff0c;一个词一个词的转换为词向量送入编码器层&#xff0c;得到优化过的词向量以及K、V&#xff0c;将K、V送入解码器层&#xff0c;并跟解码…

halcon例程学习——ball.hdev

dev_update_window (off) dev_close_window () dev_open_window (0, 0, 728, 512, black, WindowID) read_image (Bond, die/die_03) dev_display (Bond) set_display_font (WindowID, 14, mono, true, false) *自带的 提示继续 disp_continue_message (WindowID, black, true)…