KITTI 原始無序點雲資料轉有序點雲資料

2021-08-17 10:21:03 字數 4413 閱讀 4788

kitti 點雲資料集是原始雷射雷達點雲經過了預處理之後的點雲,預處理包括:

- 將高度為2公尺以上點過濾(2公尺為估計,沒有考證)

- 噪點過濾

將垂直方向上的雷射束按照64個水平高度格仔進行分類

在每乙個水平高度上,按照水平角度解析度計算此排雷射束排序

根據水平面上的xy座標值進行排序

預期問題:

重要問題:

0: 0.0766167

1: 0.0766167

2: 0.0766167

3: 0.0791294

4: 0.0815647

5: 0.0740187

6: 0.0815647

7: 0.0766167

8: 0.0791294

9: 0.0766167

10: 0.0791294

11: 0.0815647

12: 0.0815647

13: 0.0815647

14: 0.0791294

15: 0.0766167

16: 0.0815647

17: 0.0791294

18: 0.0791294

19: 0.0791294

20: 0.0815647

21: 0.0815647

22: 0.0815647

23: 0.0791294

24: 0.0791294

25: 0.0740187

26: 0.0766167

27: 0.0766167

28: 0.0766167

29: 0.0766167

30: 0.0766167

31: 0.0766167

32: 0.068528

33: 0.0656106

34: 0.068528

35: 0.0740187

36: 0.0740187

37: 0.0740187

38: 0.0740187

39: 0.0713263

40: 0.0766167

41: 0.0713263

42: 0.0713263

43: 0.0740187

44: 0.0656106

45: 0.0656106

46: 0.0713263

47: 0.0740187

48: 0.0740187

49: 0.0713263

50: 0.0656106

51: 0.0656106

52: 0.0713263

53: 0.0713263

54: 0.0713263

55: 0.068528

56: 0.068528

57: 0.068528

58: 0.068528

59: 0.0656106

60: 0.0559529

61: 0.068528

62: 0.0625573

63: 0.0656106

同時,根據官方給定資料水平角解析度0.08°進行計算,得到最大點格仔數為:max col: 4499

因此,本文決定依據官方給定資料水平角解析度0.08°進行計算,結果得到每一束雷射掃瞄得到點個數為:

360° / 0.08° = 4500 (個)

bool initialkittiorganisecloud(const int &row_size, const int &col_size,pcl::pointcloud

>

::ptr

& in_cloud)

// 初始化變數函式

bool groundremove::initialkittiorganisecloud(const

int &row_size, const

int &col_size)

}return

true;

}//建構函式

groundremove::groundremove()

//後續函式

bool groundremove::arrangepointinorganise(std::vector

&in_cloud,

pointcloudxyzi::ptr &out_cloud)

else

if ( !out_cloud->isorganized() )

float angle = 0.0;

float distance = 0.0;

int col_num = 0;

int tmp_vec_point = 0;

for (int i = 0; i < in_cloud.size(); ++i)

}return

true;

}

當把initialkittiorganisecloud()函式放在建構函式中時,arrangepointinorganise()內在檢測會發生input point cloud is unorganised!輸出,而當把initialkittiorganisecloud()函式放在其他函式中時,該檢測會通過。

思路:

猜測與建構函式的機制有關,也有可能與pcl有關。

解決方法:

如果非要在建構函式中使用該函式,尚未找到解決辦法。記錄於此,待解決。

bool groundremove::arrangepointinorganise(std::vector

&in_cloud,

pointcloudxyzi::ptr &out_cloud)

else

if ( !out_cloud->isorganized() )

float angle = 0.0f;

float distance = 0.0f;

int col_num = 0;

int tmp_vec_point = 0;

for (int i = 0; i < in_cloud.size(); ++i)

tmp_vec_point += in_cloud[i].size();

}int tmp_pt_point = 0;

int tmp_nan_point = 0;

for (int k = 0; k < out_cloud->size(); ++k)

std::cout

<< "origin point size: "

<< origin_cloud_ptr_->size() << std::endl;

std::cout

<< "tmp_vec_point: "

<< tmp_vec_point << std::endl;

std::cout

<< "tmp_pt_point: "

<< tmp_pt_point << std::endl;

std::cout

<< "num diff: "

<< tmp_vec_point - tmp_pt_point << std::endl;

std::cout

<< "nan point: "

<< tmp_nan_point + tmp_pt_point << std::endl;

return

true;

}// 某一幀輸出

origin point size: 120805

tmp_vec_point: 120804

tmp_pt_point: 120482

num diff: 322

nan point: 288000

思路:

out_cloud->at(col_num,i) = in_cloud[i].at(j);這行**中,有這樣的邏輯:

只管填入點,不管out_cloud->at(col_num,i)此前是否已經有點,這就會導致點的損失。

解決方法:

這種情況無法避免,當同乙個格仔中時,只能選取更優的點,選取原則:格仔中距離雷達最近距離的點。

以上。

點雲的無序性 點雲規則化處理 一

點雲是無序且不規則的資料,無法用現有的卷積神經網路進行計算和訓練。所以自然就出現將規則化處理和卷積相結合,前面部分用規則化處理,後面部分接上一般的神經網路進行端對端的學習和訓練。2017年蘋果公司基於點雲的3d物體檢測 voxelnet end to end learning for point c...

點雲資料集

1 modelnet40 模型 沒有顏色資訊的飛機 杯子 椅子 吉他等40個模型。模型 沒有顏色資訊,有法線資訊的,帶有標註的飛機 杯子 帽子等16個類別的模型。模型 室內分割資料集,模型為每個房間共計271個,房間內有13類物體。4 城市場景的三維重建和語義網格標記 模型 建築物 5 標註過 3d...

點雲資料顯示 雷射雷達lidar與點雲資料

雷射雷達lidar與點雲資料 dem是分布和顯示數字地形的首個廣泛使用的機制。點雲是在空間中隨機放置的3d點的集合。感測器發出能量脈衝並乘以其返回行程 twtt,雙向行程時間 知道了感測器的位置以及脈衝的傳輸方向,就可以確定反射面的3d位置。感測器還可以測量回波的強度,以估計反射表面的表面幾何形狀和...