資源簡介
python_三維激光點云的地面分割,以及非地面點云數據的聚類,并且進行可視化。以某條道路區域的點云數據為樣本進行測試,文件中包含有測試數據,以及代碼運行聚類的效果圖。

代碼片段和文件信息
#?文件功能:
#?????1.?從數據集中加載點云數據
#?????2.?從點云數據中濾除地面點云
#?????3.?從剩余的點云中提取聚類
import?numpy?as?np
import?os
import?struct
from?sklearn?import?cluster?datasets?mixture
from?itertools?import?cycle?islice
import?matplotlib.pyplot?as?plt
from?RANSAC?import?*
import?open3d?as?o3d
import?open3d
from?pyntcloud?import?PyntCloud
from?pandas?import?Dataframe
import?sklearn.cluster
from?DBSCAN?import?*
from?mpl_toolkits.mplot3d?import?Axes3D
#?功能:從kitti的.bin格式點云文件中讀取點云
#?輸入:
#?????path:?文件路徑
#?輸出:
#?????點云數組
def?read_velodyne_bin(path):
????‘‘‘
????:param?path:
????:return:?homography?matrix?of?the?point?cloud?N*3
????‘‘‘
????pc_list?=?[]
????with?open(path?‘rb‘)?as?f:
????????content?=?f.read()
????????pc_iter?=?struct.iter_unpack(‘ffff‘?content)
????????for?idx?point?in?enumerate(pc_iter):
????????????pc_list.append([point[0]?point[1]?point[2]])
????return?np.asarray(pc_list?dtype=np.float32)
#?功能:從點云文件中濾除地面點
#?輸入:
#?????data:?一幀完整點云
#?輸出:
#?????segmengted_cloud:?刪除地面點之后的點云
def?ground_segmentation(data):
????#?作業1
????#?屏蔽開始
????#調用實現的RANSAC方法,詳見另一個RANSAC.py
????planeids?=?PlaneRANSAC(data0.35)
????segmengted_cloud?=?data[planeids]#由上一步得到的地面點的索引進行取值
????#?屏蔽結束
????print(‘origin?data?points?num:‘?data.shape[0])
????print(‘segmented?data?points?num:‘?segmengted_cloud.shape[0])
????return?segmengted_cloudplaneids
#?功能:從點云中提取聚類
#?輸入:
#?????data:?點云(濾除地面后的點云)
#?輸出:
#?????clusters_index:?一維數組,存儲的是點云中每個點所屬的聚類編號(參考上一章內容容易理解)
def?clustering(data):
????#?作業2
????#?屏蔽開始
????#使用sklearn中的聚類
????Css?=?sklearn.cluster.DBSCAN(eps=0.50?min_samples=4).fit(data)
????clusters_index?=?np.array(Css.labels_)
????#使用自己實現的聚類
????#?clusters_index?=?DBSCAN(data0.5100)
????#?屏蔽結束
????return?clusters_index
#?功能:顯示聚類點云,每個聚類一種顏色
#?輸入:
#??????data:點云數據(濾除地面后的點云)
#??????cluster_index:一維數組,存儲的是點云中每個點所屬的聚類編號(與上同)
def?plot_clusters(data?cluster_index):
????ax?=?plt.figure().add_subplot(111?projection?=?‘3d‘)
????colors?=?np.array(list(islice(cycle([‘#377eb8‘?‘#ff7f00‘?‘#4daf4a‘
?????????????????????????????????????????????‘#f781bf‘?‘#a65628‘?‘#984ea3‘
?????????????????????????????????????????????‘#999999‘?‘#e41a1c‘?‘#dede00‘])
??????????????????????????????????????int(max(cluster_index)?+?1))))
????colors?=?np.append(colors?[“#000000“])
????ax.scatter(data[:?0]?data[:?1]?data[:?2]?s=2?color=colors[cluster_index])
????plt.show()
def?main():
????root_dir?=?‘./data/‘?#?數據集路徑
????cat?=?os.listdir(root_dir)
????cat?=?cat[1:]
????#?iteration_num?=?len(cat)
????iteration_num?=?1
????for?i?in?range(iteration_num):
????????filename?=?os.path.join(root_dir?cat[i])
????????print(‘clustering?pointcloud?file:‘?filename)
????????origin_points?=?read_velodyne_bin(filename)
????????segmented_pointsplaneids?=?ground_segmentation(data=origin_points)
????????planepcd?=?o3d.geometry.PointCloud()
????????planepcd.points?=?o3d.utility.Vector3dVector(segmented_points)
????????c?=?[0?0?255]
????????cs?=?np.tile(c?(segmented_points.shape[0]?1))
????????planepcd.color
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????174??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\inspectionProfiles\profiles_settings.xm
?????文件????????294??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\misc.xm
?????文件????????429??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\modules.xm
?????文件????????291??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\python_點云的地面分割,以及非點云數據的聚類,并且進行可視化.iml
?????文件??????13701??2020-07-18?17:09??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\workspace.xm
?????文件???????5259??2020-06-27?13:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\clustering.py
????.......???2010160??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000000.bin
????.......???1953744??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000001.bin
????.......???1849664??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000002.bin
????.......???1948720??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000003.bin
????.......???1993024??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000004.bin
????.......???1756368??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data\000005.bin
????.......??????2350??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\DBSCAN.py
????.......??????2354??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\RANSAC.py
????.......????????94??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\README.md
????.......??????2586??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\__pycache__\DBSCAN.cpython-36.pyc
?????文件???????2639??2020-06-16?13:54??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\__pycache__\DBSCAN.cpython-37.pyc
????.......??????1959??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\__pycache__\RANSAC.cpython-36.pyc
?????文件???????2032??2020-06-16?13:54??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\__pycache__\RANSAC.cpython-37.pyc
????.......????385014??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\可視化結果.pptx
?????目錄??????????0??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea\inspectionProfiles
?????目錄??????????0??2020-05-10?17:08??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\data
?????目錄??????????0??2020-06-16?13:54??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master\__pycache__
?????目錄??????????0??2020-07-18?17:09??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\.idea
?????目錄??????????0??2020-07-18?16:37??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化\pointcloud-master
?????目錄??????????0??2020-06-15?13:30??python_點云的地面分割,以及非點云數據的聚類,并且進行可視化
-----------?---------??----------?-----??----
?????????????11930856????????????????????26
評論
共有 條評論