Open3D kitti数据集bin与pcd的相互转换

news2024/11/8 15:37:42

目录

一、Kitti数据集简介

1.1数据集内容

1.2数据集结构

二、代码实现

2.1bin转pcd

2.2pcd转bin

三、实现效果


一、Kitti数据集简介

        KITTI 数据集是由德国卡尔斯鲁厄理工学院(KIT)和丰田美国技术研究院(Toyota Technological Institute at Chicago, TTI-C)联合发布的,主要用于自动驾驶和计算机视觉领域的研究。KITTI 数据集包含了多种传感器采集的数据,包括激光雷达点云、图像、GPS/IMU 传感器数据等。该数据集被广泛用于研究和开发三维物体检测、跟踪、立体视觉、SLAM、光流估计等任务。

1.1数据集内容

KITTI 数据集包含以下几类主要数据:

原始传感器数据:

    • 图像数据:包括前置摄像头、左右立体相机的图像,分辨率为 1242x375 或 1226x370。
    • 激光雷达点云:来自 Velodyne HDL-64E 激光雷达,每帧包含超过 10 万个点。
    • GPS/IMU 数据:提供精确的位置信息和姿态数据。

处理后的数据:

    • 标注的物体检测框:包括3D和2D边界框,用于检测和识别不同类型的物体(如车辆、行人、骑车人等)。
    • 道路和车道标注:用于道路检测和车道线检测。
    • 光流数据:用于光流估计任务。
    • 深度图:用于立体匹配和深度估计任务。

1.2数据集结构

数据集按照不同的任务进行划分,主要包括:

Object Detection and Tracking:

  • 包含约 15 万个3D物体标注和约 8 万个2D物体标注。
  • 提供 21 个训练序列和 29 个测试序列。

Odometry:

  • 提供 22 个序列,其中 11 个序列提供了 ground truth 位姿信息,用于评估视觉里程计和 SLAM 算法。

Raw Data:

  • 提供完整的原始传感器数据,包括图像、点云、GPS/IMU 数据等。
  • 适合于多任务学习和自定义处理。

二、代码实现

2.1bin转pcd

import open3d as o3d
import numpy as np

# 假设 KITTI 点云数据
point_cloud_file = '000000.bin'

# 读取二进制点云文件
def read_kitti_point_cloud(file):
    point_cloud = np.fromfile(file, dtype=np.float32).reshape(-1, 4)
    return point_cloud[:, :3]  # 只保留x, y, z坐标

# 将点云数据转换为 Open3D 格式
points = read_kitti_point_cloud(point_cloud_file)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)

# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="KITTI Point Cloud")

2.2pcd转bin

import open3d as o3d
import numpy as np

def pcd_to_bin(pcd_file, bin_file):
    # 读取PCD文件
    pcd = o3d.io.read_point_cloud(pcd_file)

    # 获取点云的xyz坐标
    points = np.asarray(pcd.points, dtype=np.float32)

    # 如果需要,可以添加额外的强度信息
    # 这里假设强度信息为1(可以根据实际需求进行调整)
    intensities = np.ones((points.shape[0], 1), dtype=np.float32)

    # 将坐标和强度信息组合在一起
    points_with_intensity = np.hstack((points, intensities))

    # 将点云数据保存为bin文件
    points_with_intensity.tofile(bin_file)
    print(f"Successfully saved {bin_file}")

# 示例用法
pcd_file = "test.pcd"  # 输入的PCD文件路径
bin_file = "test.bin"  # 输出的BIN文件路径
pcd_to_bin(pcd_file, bin_file)

三、实现效果

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

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

相关文章

昇思25天学习打卡营第2天|快速入门

使用MindSpore实现简单的深度学习模型 环境配置 第一步当然是装包: !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.d…

深入了解MySQL的哈希索引

深入了解MySQL的哈希索引 哈希索引是一种基于哈希表的数据结构,通过对索引键值进行哈希运算,直接定位存储位置,从而实现快速数据访问。哈希索引在等值查询中表现尤为出色,但不适用于范围查询。虽然哈希索引在某些场景下可以显著提…

从特斯拉视角,看智能驾驶研究框架

第一章:回顾历史,智能驾驶的核心主线是算法的演进史,从2017年至今在感知侧规控侧实现算法从规则为主走向端到端。算法方面,2017-2022年,特斯拉在感知侧走向端到端,实现BEVTransformerOccupancy。2021-2023年&#xff0…

Python深度学习技术

原文链接:Python深度学习技术 近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。Transformer模型(BERT、GPT-…

2024年最新中级会计职称考试题库。

46.甲将一汇票背书转让给乙,但该汇票上未记载乙的名称。其后,乙在该汇票被背书人栏内记载了自己的名称。根据《票据法》的规定,下列有关该汇票背书与记载效力的表述中,正确的是()。 A.甲的背书无效&#x…

C语言:sprintf与snprintf

C语言提供了强大的格式化输出的接口,可以输出到不同的文件或者字符串等,以sprintf和snprintf为例介绍一下 sprintf 格式化输出到字符串 函数签名 int sprintf(char *str, const char *format, ...);与printf相比就是多了前面的char*参数,…

创新降重工具助力学术写作:提升论文独创性

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下,延毕的威胁可能就在眼前。对于即将告别校园的学子们,这无疑是个噩梦。四年磨一剑,谁也不想在最后关头功亏一篑。 查重率过高,无非以下两种原因。要么是作为“…

【激光雷达使用记录】—— 如何在ubuntu中利用ros自带的rviz工具实时可视化雷达点云的数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、查看雷达数据的 frame_id1. 查看雷达数据的话题2. 查看数据的frame_id 二、可视化雷达数据总结 前言 RViz(ROS Visualization)是机…

华为面试题及答案——机器学习(二)

21. 如何评价分类模型的优劣? (1)模型性能指标 准确率(Accuracy): 定义:正确分类的样本数与总样本数之比。适用:当各类样本的数量相对均衡时。精确率(Precision): 定义:预测为正类的样本中实际为正类的比例。适用:当关注假阳性错误的成本较高时(例如垃圾邮件检测…

超细毛搭配超宽设计,一款更呵护牙龈的牙刷

牙龈敏感的时候,刷牙特别难受,最近试了试惠百施(EBISU)65孔宽头软毛牙刷,感觉它的口腔护理体验很不错。这款牙刷的设计独特,采用宽头设计,一次就能刷两排牙齿,极大地提高了清洁效率。…

2024广东省职业技能大赛云计算赛项实战——集群部署GitLab

集群部署GitLab 前言 题目是这样的: 在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密…

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候,可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意:用sysprep修改SID之后,系统会自动重启,之前配置好的网络、修改过的机器名会重置。所以&#xff…

机器学习之函数式自动微分

前言 神经网络的训练主要使用反向传播算法,通过损失函数计算模型预测值与正确标签的差异,并进行反向传播计算梯度,最终更新模型参数。自动微分能够计算可导函数在某点处的导数值,是反向传播算法的一般化,主要解决了复…

Python:浅谈迭代器、生成器与协程的演化路径

“人生苦短,我用Python”,虽然说大量数学和统计分析库是一个重要优势,但是归根结底,Python的最大优势就是三点: 但是通常一般来讲,当扯到并发的时候,无论是多服务器、多进程、多线程、还是协程&…

《黑神话悟空》电脑配置要求

《黑神话:悟空》这款国内优秀的3A游戏大作,拥有顶级的特效与故事剧情,自公布以来便备受玩家期待,其精美的画面与流畅的战斗体验,对玩家的电脑配置提出一定要求。那么这款优秀的游戏需要什么样的电脑配置,才…

boost asio异步服务器(4)处理粘包问题tlv

粘包的产生 当客户端发送多个数据包给服务器时,服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。这种情况的产生通常是服务器端处理数据的速率不如客户端的发送速率的情况。比如:客户端1s内连续发送了两个hello world!,服务器过了2s才接…

一份简单的海外问卷,改变经济现状

在许多人看来,赚钱似乎总是与资金和技术密切相关。然而,即使没有丰富的资金和高超的技术,仍然有机会赚取可观的收入。 首先,需要明确的是,赚钱并非完全依赖于物质资本和技术能力。在这个充满机遇的时代,选…

鸿蒙开发网络管理:【@ohos.net.webSocket (WebSocket连接)】

WebSocket连接 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocket]方法创建[WebSocket]对象,然后通…

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列(可迭代类型的一种) 2 语法 语法1: range(num) 获取一个从0开始,到num结束的数字序列(不含num本身) 如range(5)取得的数据是:[0, 1, 2, 3, 4…