首页 > 编程语言 >4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)

时间:2023-05-04 17:36:54浏览次数:56  
标签:VOD mat Python 数据 frame radar MATLAB data

公众号【调皮连续波】

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)_公众号

【正文】


编辑 |  调皮哥的小助理        审核 | 调皮哥

1、引言

4D成像雷达开源数据集,其实好用的并不多,VOD数据集我个人感觉还可以。这其实也在之前分享过,但是为了更加清楚地展示这个数据集如何使用,本期文章就简单做个分享。

在MATLAB环境下可以得到以下的效果:


2、数据集介绍和格式

见链接:https://github.com/tudelft-iv/view-of-delft-dataset#annotation

以及文章:雷达开源数据集 | 代尔夫特数据集(VOD),4D雷达、激光雷达和相机数据

3、数据集解析步骤

本数据集的内容有很多,本文仅作为抛砖引玉,剩余诸多内容留待读者自行探索,本文所涉及的脚本为调皮哥自己在工作之余编写,如有疑问,请在【雷达技术交流群】中交流,全职工作比较繁忙,尽量减少私信。

下面开始解析数据:

本次解析数据,主要就是Bin转mat,然后读取mat数据进行播放,没有什么特殊的地方。然后Python主要实现功能是Bin转mat,当然熟练Python的读者也完全可以用它进行其他的开发,而不需要再转为mat,比如目标识别、雷达或者激光点云处理、雷视融合等等。

MATLAB主要实现的功能是读取mat,然后播放,同理MATLAB也能完成Python能够完成的事情。

关于Python和MATLAB,我个人感觉MATLAB更加适合于工程开发和算法验证,但是缺点就是需要许可证,Python的好处就是开源,库比较多。我喜欢MATLAB,Python也可以上手,萝卜白菜,各有所爱。

(1)Python

Python脚本比较方便,同时可以基于原来数据集提供的脚本和库函数下,有的读者可能喜欢Matlab,因此我把数据集也转成了.mat。

Bin的文件名最大数字是"09930",但文件数量只有8682多个,因此我们需要for循环9930次,一次读取所有文件,如果遇到读不到的文件夹,则continue。

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)_数据集_02

部分脚本如下:

读者需要修改文件路径,切不可上来就用。

软件版本:PyCharm Community Edition 2022.2.2

同时还需要下载代码:https://github.com/tudelft-iv/view-of-delft-dataset#annotation

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)_公众号_03

数据转换脚本:

# 这个脚本的目的是讲VOD数据的Bin格式转为.mat格式
from vod.configuration import KittiLocations
from vod.frame import FrameDataLoader
from vod.visualization import Visualization2D
import os
import matplotlib.pyplot as plt
from scipy.io import savemat
from vod.frame import FrameTransformMatrix


plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False


kitti_locations = KittiLocations(
    root_dir="E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC",
    output_dir="E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC",
)
# 循环读取Bin文件
for frame in range(0, 1, 1):
    frame_name = str(frame).zfill(5)
# 预先寻找
    current_path = "E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC/radar/training/velodyne/"


    flag = os.path.exists(current_path + frame_name + '.bin')
if not flag:
continue


    frame_data = FrameDataLoader(kitti_locations=kitti_locations, frame_number=frame_name)
    transforms = FrameTransformMatrix(frame_data)
    vis2d = Visualization2D(frame_data)


    radar_data = frame_data.radar_data
    lidar_data = frame_data.lidar_data
    savemat('E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/matlab/radar/' + frame_name + '.mat',
            {'score_of_tom': radar_data})
    savemat('E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/matlab/lidar/' + frame_name + '.mat',
            {'score_of_tom': lidar_data})


需要等待20几分钟,然后全部数据就转好了,这个时候不要着急。如果无法确保自己的程序是否运行正确,可以再开始的时候选择2帧数据进行验证,正确了再执行所有。

完成之后是这个样子的:

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)_公众号_04

好了,如果不出意外的话,现在要该MATLAB上场了。

(2)MATLAB

版本:MATLAB 2022b,可千万要注意,有的老版本不支持新函数。数据读取与绘图脚本如下所示:

clc;
 close all;
 clear all;
 %%
 addpath('E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\view_of_delft_PUBLIC\lidar\training\image_2\');
 addpath('E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\view_of_delft_PUBLIC\lidar\training\calib\');
for index  =1650:9930
    tic


    file_name =  num2str(index,'%05d'); %字符扩展


    %判断文件是否存在
    flag = exist([file_name,'.mat'],'file');


if flag ==0
continue;
    end


    %读取传感器数据
    radar_data = importdata(['E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\matlab\radar\',file_name,'.mat']);
    camera = imread([file_name,'.jpg']);
    lidar_data = importdata(['E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\matlab\lidar\',file_name,'.mat']);


    %校准


    %绘图显示
    figure(1);
    subplot(1,3,1);
set(gca,'Units','normalized','Position',[0.02,0.1,0.3,0.8]);
    imshow(camera,[],'parent',gca);
    title(['实时相机 帧数',file_name]);


    subplot(1,3,2);
%     set(gca,'Units','normalized','Position',[0.1,0.2,0.3,0.8]);
    plot3(-lidar_data(:,2),lidar_data(:,1)-2.5,lidar_data(:,3)+1.18,'b.');
    hold on
    plot3(-radar_data(:,2),radar_data(:,1),radar_data(:,3),'r.');
    xlim([-20,20])
    ylim([-40,40])
    grid on
    view(2);
    title('激光+毫米波雷达点云数据');
    hold off


    subplot(1,3,3);
%     set(gca,'Units','normalized','Position',[0.02,0.1,0.3,0.8])
    plot3(-radar_data(:,2),radar_data(:,1),radar_data(:,3),'b.');
    xlim([-20,20])
    ylim([0,60])
    grid on
    view(2);
    title('4D成像雷达点云数据');


    hold off
    %%记得把横纵坐标加上,我忘记了,不想加了。


end

效果显示:

4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)_MATLAB_05

当然,这还需要数据集的支持,数据集的下载可以见官方的链接。

https://github.com/tudelft-iv/view-of-delft-dataset#annotation

5、剩余事项

好了,由于篇幅和时间有限,暂时就展示这些内容。剩余其实还有很多内容,需要读者自行丰富,比如聚类、跟踪、点云匹配、雷视融合、点云目标识别等。

上述代码和数据集是完全配合使用的,需要数据集、整套代码、实现辅导可以点这个链接联系调皮哥:雷达er入群指南,皮哥空闲之时可以交流。

【本期结束】



目前我的工作经验尚浅,还有很多内容需要学习,如果还有没有说到或者不全面的地方,还请指正,感谢大家。



标签:VOD,mat,Python,数据,frame,radar,MATLAB,data
From: https://blog.51cto.com/u_12413309/6243648

相关文章

  • python 魔术方法
    在Python中,魔术方法(也称为特殊方法或双下划线方法)是一组预定义的方法,它们被用于在类中实现特定的行为。这些方法以两个下划线开头和结尾,例如__init__()和__str__()。以下是几个常见的魔术方法及其作用:__init__():用于初始化类的实例。当创建类对象时,这个方法会自动调用。__st......
  • Python保留两位小数五种常用的方法!
    在Python中,保留两位小数是我们经常会碰到的问题,也是比较常见的需求之一。那么Python中如何保留两位小数?Python保留两位小数的方法有很多种,具体请看下文。1、使用字符串格式化大部分语言都可以使用字符串格式化的方法来实现保留两位小数,Python也不例外。a=12.345......
  • python 闭包、偏函数、数据锁定
    闭包(Closure)是指在一个函数内部定义另外一个函数,并且这个内部函数可以访问外部函数中的变量。通常情况下,当外部函数执行完毕后,局部变量会被销毁,但是闭包可以使得外部函数执行完毕后,其内部函数仍然可以访问外部函数的局部变量。比如下面这个例子:defouter(x):definner(y):......
  • python 多态
    在Python3中,多态是指同一个方法或者操作可以在不同的对象上产生不同的行为或结果。这意味着一个函数可以接受不同类型的参数,并且可以表现出不同的行为。生活中的例子如下:假设你想要买一台新电视机,你可能会去电器店看看有哪些电视可供选择。当你开始比较价格和功能时,你可能会发......
  • SDN Python编程创建多数据中心网络
    首先开启OpenDaylightcd/home/ubuntu/karaf-0.7.1/bin/./karaf新开一个终端执行以下操作在/home/ubuntu/mininet/examples目录下新建一个sdn4.py文件输入以下代码frommininet.topoimportTopoclassMyTopo(Topo):def__init__(self):Topo.__init......
  • python 迭代器和推导式的不同处
    迭代器和推导式都是在Python中用于处理可迭代对象的机制,但它们之间有一些关键区别。返回值类型不同:推导式返回一个新的数据结构(列表、集合、字典等),而迭代器返回一个迭代器对象。推导式生成的是一个新的序列或集合,而迭代器则是逐个生成元素。实现方式不同:推导式是一种高级语......
  • Python时间模块time
    时间模块-time#time()获取本地时间戳#ctime()获取本地时间字符串(参数是时间戳,默认当前)#localtime()获取本地时间元组(参数是时间戳,默认当前)#mktime()通过时间元组获取时间戳(参数是时间元组)#asctime()通过时间元组获取时......
  • python 推导式
    在Python中,列表推导式、字典推导式和集合推导式都是常见的推导式。它们可以让我们使用一种简洁而强大的语法来快速创建新的序列或映射数据类型。列表推导式列表推导式是最常见的一种推导式,用于通过对一个序列中的每个元素应用一个表达式来快速生成一个新的列表。列表推导式的......
  • python-Gradio 机器学习演示库
    python-GradioGradio是一个开源的Python库,用于构建机器学习和数据科学演示应用。有了Gradio,你可以围绕你的机器学习模型或数据科学工作流程快速创建一个简单漂亮的用户界面。Gradio适用于以下情况:为客户/合作者/用户/学生演示你的机器学习模型。通过自动共享链接快速部署你的......
  • python 列表拼接拓展
    #-*-coding:utf-8-*-#列表例存放字节类型数据bytes_list=[b'1',b'2',b'3']#列表里存放字符串类型数据str_list=['1','2','3']#列表里存放混合类型数据(字符串,字节,int)mix_list=[b'1','2','3&#......