kitti 點雲資料集是原始雷射雷達點雲經過了預處理之後的點雲,預處理包括:
- 將高度為2公尺以上點過濾(2公尺為估計,沒有考證)
- 噪點過濾
將垂直方向上的雷射束按照64個水平高度格仔進行分類
在每乙個水平高度上,按照水平角度解析度計算此排雷射束排序
根據水平面上的x、y座標值進行排序
預期問題:
重要問題:
同時,根據官方給定資料水平角解析度0.08°進行計算,得到最大點格仔數為: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
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位置。感測器還可以測量回波的強度,以估計反射表面的表面幾何形狀和...