TUM数据集转为ElasticFusion的数据集格式.klg

2024-02-01 15:10

本文主要是介绍TUM数据集转为ElasticFusion的数据集格式.klg,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、TUM数据集转为klg格式并运行ElasticFusion

1、下载TUM数据集
下载地址:https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download
TUM数据集一共用了三个机器人,记成fr1, fr2, fr3。这三台相机的参数在这里: http://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats#intrinsic_camera_calibration_of_the_kinect
我下载的是’freiburg3_teddy’,所包含的文件如下:
在这里插入图片描述说明:
(1) rgb/ 和 depth/目录存放着采集到的 png 格式图像文件。彩色图像为八位三通道,深度图为 16 位单通道图像。图像以时间戳命名。
(2) rgb.txt 和 depth.txt 记录了各文件的采集时间和对应的文件名。
(3) groundtruth.txt 为外部运动捕捉系统采集到的相机位姿,格式为(time, t x , t y , t z , q x , q y , q z , q w ),各个数据分别是:时间(time),位置(x,y,z),姿态四元数(qx, qy, qz, qw)。
可以画个图来看看里面的内容:
创建一个draw_groundtruth.py文件,然后将下面的代码复制进去。

#!/usr/bin/env python
# coding=utf-8import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3df = open("./groundtruth.txt")
x = []
y = []
z = []
for line in f:if line[0] == '#':continuedata = line.split()x.append( float(data[1] ) )y.append( float(data[2] ) )z.append( float(data[3] ) )
ax = plt.subplot( 111, projection='3d')
ax.plot(x,y,z)
plt.show()

在终端运行:

python3 draw_groundtruth.py

看到轨迹图:
在这里插入图片描述
2、TUM数据集转为klg格式的代码地址:https://github.com/HTLife/png_to_klg
将代码下载下来:

git clone https://github.com/HTLife/png_to_klg.git

3、彩色图、深度图和标准轨迹的采集都是独立的,轨迹的采集频率比图像高很多。在使用数据之前,需要根据采集时间,对数据进行一次时间上的对齐,以便对彩色图和深度图进行配对。原则上,我们可以把采集时间相近于一个阈值的数据,看成是一对图像。并把相近时间的位姿,看作是该图像的真实采集位置。

将png_to_klg中的associate.py文件,复制到TUM数据集下,然后执行代码:

./associate.py depth.txt rgb.txt  > associations.txt

就完成了深度图和rgb图像的一一对应。
注意:如果你是python3,则会因为python版本高而报这样的错:AttributeError: ‘dict_keys’ object has no attribute ‘remove’
解决方法,将下面两行代码:

first_keys = first_list.keys()
second_keys = second_list.keys()

修改为:

first_keys = list(first_list)
second_keys = list(second_list)

4、编译png_to_klg文件

cd png_to_klg
mkdir build && cd build
cmake ..
make 

5、将TUM数据集转换为.klg格式

编译好后进入png_to_klg的build下,在终端执行下行代码:

./pngtoklg -w '/数据集存储路径/' -o '/生成的.klg文件存储路径/xxx.klg' -t #生成.klg文件

即可生成.klg文件。
6、运行ElasticFusion
进入ElasticFusion的build文件夹下,运行下行代码:

./ElasticFusion -l (此处填写生成的.klg文件的路径) 

显示结果:
在这里插入图片描述
执行结束后会在.klg所在的文件夹下生成xxx.klg.freiburg文件,即就是ElasticFusion估计的相机位姿,之后就可以使用TUM提供的工具了,比如evaluate_ate.py。

其他:因为外部那个运动捕捉装置的记录频率比较高,得到的轨迹点也比图像密集很多,所以查找每个图像的真实位置,可以同样用对齐的方式来匹配associations.txt和groundtruth.txt中的时间信息:

python associate.py associations.txt groundtruth.txt > associate_with_groundtruth.txt

这时,我们的新文件 associations_with_groundtruth.txt 中就含有每个帧的位姿信息了。

二、误差评测

(待完成)

这篇关于TUM数据集转为ElasticFusion的数据集格式.klg的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667627

相关文章

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数