最近需要把kitti 的数据迁移到32线雷达的目标分类上去,所以特地做了一个把kitti 的64线数据降采样为32线的工作,做了才发现,kitti 数据集中存在的坑。
第一个坑就是kitti 数据集中的点云数据应该是和最开始的有较大的变动,网上所有的资料都说它的水平分辨率是0.08度,也就是一条扫描线的点数大约是4500个,但是实际上它现在的数据每行的点数大概只有2000个。
第二个坑就是由于它是无序数据,提取32根线的数据需要知道每个点在哪条线上,刚开始我采用了找转折点的思路来确定每个点的线归属,思路如下:
KITTI数据集存储是按照一束激光的所有扫描数据存储完之后再存储下一束激光的数据,所以标识可以通过计算点在水平面上的转角值之差来得到。
但是我用这样的方法得到的每行的点的个数结果却是这样的:
0 996
1 2034
2 2008
3 1985
4 1976
5 1989
6 1983
7 1998
8 2018
9 2014
10 2023
11 2063
12 2051
13 1990
14 1970
15 1944
16 1911
17 1933
18 1956
19 1958
20 1911
21 1921
22 1843
23 1965
24 1942
25 1855
26 1877
27 1856
28 1801
29 1789
30 1776
31 1844
32 1932
33 1972
34 1978
35 1941
36 1924
37 1963
38 1972
39 1956
40 1952
41 1953
42 1822
43 1813
44 1783
45 1782
46 1795
47 1770
48 1704
49 1714
50 1677
51 1585
52 1606
53 1416
54 1398
55 1438
56 1366
57 1243
58 1126
59 1056
60 999
61 955
62 975
63 807
64 557
说好的64线呢? 怎么跑出来65根线的结果了???
并且为什么前面 1 根线和最后几根线的数目和中间线的点数差别这么大??
把每根线的图画出来结果也不对,图如下:
为什么每根线都从中间断开了?? 看32线的结果可能会更加明显。
也就是说,它存储数据的时候根本就不是按照每条线存储完了再存储下一条线的顺序存储的,而是上一条线的一半 + 下一条线的一半;
这也解释了为什么最后的结果会有65条线,所以解决思路是我们需要把二个转折点的中点作为每条线的真正转折点。
抽取32线的代码如下:
def
最后得到的结果如下图:
之前的整个中间中断的现象已经消失了,但是在某些小的地方,仍然存在中断的现象,这是因为二个转折点的中点并不一定是真正的转折点导致,而这,我已经是无能为力了。
最后,仍然待解决的疑问是,为什么用它原始数据给出的转折点区间的点数据并不是一条线的呢? 想不明白。