本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!