SemanticKITTI:Development Kit的学习记录-可视化源码阅读

探索SemLaserScan: Python中点云的语义标签映射与可视化
本文详细解读了visualize.py中的SemLaserScan类,介绍了如何通过命令行参数处理、配置文件加载,以及如何使用标签映射实现点云的语义和实例色彩渲染。核心内容涉及点云文件处理、标签读取与投影,以及LaserScanVis类中的可视化功能。

目的:通过阅读源码了解标签映射方法

重点应该是第八部分和第九部分

主函数文件visualize.py

/====================/
代码第一部分
if name == ‘main’: (含义:如果我直接用./visualize.py 运行visualize.py 那么运行该部分内的代码,如果visualize.py 被另一个xxx.py 文件导入,我运行xxx.py文件 那么就不运行该部分代码)

parser = argparse.ArgumentParser(“./visualize.py”) (这个函数是命令行解析函数,通过该函数可以在终端向程序输入参数,或者从配置文件中读取参数)
比如 visualize.py 的运行命令 ./visualize.py --sequence 11 --dataset /media/pf/Elements/DATA/Snowy_Data/Open_dataset/WADS/11_20211109T212945Z_001/
–sequence 代表要读的序列号 该序列号文件下 存放 两个文件 labels velodyne
–dataset 代表序列号文件所在的路径 如 在/media/pf/Elements/DATA/Snowy_Data/Open_dataset/WADS/11_20211109T212945Z_001/ 这个路径下有一个 文件名为11(序列号)的文件,这个文件下放着标签文件夹和点云bin文件夹

就可视化来说 只需用到该部分中的–sequence --dataset

该部分最后
FLAGS, unparsed = parser.parse_known_args()(这个函数就算将传入的参数保存起来并传给FLAGS,没用到的参数就传给unparsed)

/========================/

第二部分是参数的打印
有效的参数就两个
print(“Dataset”, FLAGS.dataset)
print(“Sequence”, FLAGS.sequence)

/====================/
第三部分 读取配置文件
CFG = yaml.safe_load(open(FLAGS.config, ‘r’)) //semantic-kitti.yaml
疑问:配置文件中的content 是如何获得的。
降雪点 对应 标签 0 : “unlabeled” 0 : [0, 0, 0]黑色

/====================/
第四部分 固定序列名,判断序列文件下的点云文件夹是否存在
FLAGS.sequence = ‘{0:02d}’.format(int(FLAGS.sequence)) (‘{:02d}’.format(i)表示将i变为两位十进制数字的字符串,不够两位用0填充。)

scan_paths = os.path.join(FLAGS.dataset, “sequences”,
FLAGS.sequence, “velodyne”) (含义:/media/pf/Elements/DATA/Snowy_Data/Open_dataset/WADS/11_20211109T212945Z_001/ sequences/11/velodyne)
if os.path.isdir(scan_paths):

/========================/
第五部分 将点云所有bin文件名 填充到一个列表中
os.walk通过在目录树中游走输出在目录中的文件名,向上或者向下。
scan_names.sort()将文件名按顺序排列(由小到大)

//
第六部分获取对应的标签labels文件名
if not FLAGS.ignore_semantics: (ignore_semantics 默认为 false if not 返回true)
if FLAGS.predictions is not None:(FLAGS.predictions 默认为 FALSE 条件返回 false ,因此获取手工标签所在路径;如果FLAGS.predictions是 true 就读取预测后获得标签的路径)
label_paths = os.path.join(FLAGS.dataset, “sequences”,
FLAGS.sequence, “labels”)
判断标签路径是否存在
label_names = [os.path.join(dp, f) for dp, dn, fn in os.walk(
os.path.expanduser(label_paths)) for f in fn]
label_names.sort() (读取和数据集文件并列的手动标注的标签,并排序)
/
/
第七部分 检查标签文件数与bin文件数是否一致
if not FLAGS.ignore_safety:
assert(len(label_names) == len(scan_names))

//
第八部分 判断是否需要语义 不需要则直接投影 // 需要则加载配置文件中的BGR配置 再投影
if FLAGS.ignore_semantics:
scan = LaserScan(project=True) # project all opened scans to spheric proj
else:
color_dict = CFG[“color_map”]
nclasses = len(color_dict)
scan = SemLaserScan(nclasses, color_dict, project=True)
重点要学习SemLaserScan这个函数,它实现了投影功能,scan 是SemLaserScan实例化后的一个对象
/
/
第九部分 创建可视化
需要语义 semantics = true

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值