SemanticKITTI是一个基于KITTI数据集的扩展版本,其中提供了大规模3D点云数据的语义标签。在SemanticKITTI中,点云标签通常保存在单独的文件中,文件名与对应的点云数据文件相对应。在标签文件中,每行表示一个点云数据的语义标签。这些标签表示了每个点所属的对象类别,例如汽车、建筑、人、道路等。
SemanticKITTI数据集为每个语义类别都分配了一个独特的整数标签。在SemanticKITTI数据集中,每个点云点的标签都以32位无符号整数(uint32_t)的形式存储。文件中的标签顺序和点云数据中的点的顺序是相匹配的,也就是说,文件中的第一个标签对应于点云数据中的第一个点,文件中的第二个标签对应于点云数据中的第二个点,以此类推。这个标签可以分成两部分来看待:
-
0xFFFFFF00
部分是实例标签,用于标记物体的实例,如两辆不同的汽车,即使它们都属于"汽车"这一语义类别,它们的实例标签也会不同。实例标签可以用于区分同一语义类别中的不同物体。 -
0x000000FF
部分是语义标签,用于标记点云点的语义类别,如汽车、行人、道路等。语义标签用于描述点云点的物理意义。
读取lable的代码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm> // 引入算法库,提供 std::max_element
// 使用 uint32_t 来存储语义标签
typedef uint32_t LabelType;
std::vector<LabelType> readSemanticKittiLabelFile(const std::string& filename) {
std::vector<LabelType> labels;
std::ifstream file(filename, std::ios::binary);
if (file.is_open()) {
LabelType label;
while (file.read(reinterpret_cast<char*>(&label), sizeof(LabelType))) {
labels.push_back(label);
}
if (file.bad()) {
std::cerr << "Error occurred while reading the file." << std::endl;
}
file.close();
} else {
std::cerr << "Unable to open file " << filename << std::endl;
}
return labels;
}
int main() {
const std::string filename = "/home/fairlee/dataset/KITTI/sequences_kitti_00_21/00/labels/000000.label";
std::vector<LabelType> labels = readSemanticKittiLabelFile(filename);
// 打印读取到的标签数量
std::cout << "Number of labels: " << labels.size() << std::endl;
// 打印第一个标签,用于验证是否正确读取
if (!labels.empty()) {
std::cout << "First label (semantic part): " << (labels[0] & 0xFF) << std::endl;
std::cout << "First label (instance part): " << (labels[0] >> 8) << std::endl;
}
// 找出并打印最大的标签
if (!labels.empty()) {
LabelType max_label = *std::max_element(labels.begin(), labels.end());
std::cout << "Maximum label (semantic part): " << (max_label & 0xFF) << std::endl;
std::cout << "Maximum label (instance part): " << (max_label >> 8) << std::endl;
}
return 0;
}
数据集下载
所有数据集直接可以在semantickitti数据集官网
SemanticKITTI - A Dataset for LiDAR-based Semantic Scene Understanding下载。
依次点击Dataset->Download即可看到下载链接。
三个连接均需要下载(占得空间很大,建议放在硬盘),分别解压到当前文件夹。
文件夹组织结构
dataset
sequences
00
labels
velodyne
calib.txt
poses.txt
times.txt
01
labels
velodyne
calib.txt
poses.txt
times.txt
…