import numpy as np
import open3d as o3d
from pyntcloud import pyntcloud
from pandas import dataframe
defvoxel_filter
(point_cloud,leaf_size,mode==
'random'):
#首先建立voxel grid
x_max ,y_max ,z_max = np.
max(point_cloud,axis=0)
x_min ,y_min ,z_min = np.
min(point_cloud,axis=0)
d_x =
(x_max - x_min)
/leaf_size
d_y =
(y_max - y_min)
/leaf_size
d_z =
(z_max - z_min)
/leaf_size
#獲取每個點在格仔中的位置
point_cloud = np.asarray(point_cloud)
h =for i in
range
(point_cloud.shape[0]
):h_x = np.floor(
(point_cloud[i][0
]-x_min)
/leaf_size)
h_y = np.floor(
(point_cloud[i][1
]-y_min)
/leaf_size)
h_z = np.floor(
(point_cloud[i][2
]-z_min)
/leaf_size)
h = h_x + h_y * d_x + h_z *d_x *d_y
#對所有點根據其所在格仔位置進行排序
h = np.asarray(h)
voxel_index = np.argsort(h)
h_sort = h[voxel_index]
#random
if mode ==
'random'
: filtered_points =
index_begin =
0for i in
range
(len
(voxel_index)-1
):if h_sort[i]
== h_sort[i+1]
:continue
else
: point_index = voxel_index[index_begin:
(i+1)]
random_index = np.random.choice(point_index)
random_choice = point_cloud[random_index]
index_begin = i
#centroid
if mode ==
'centroid'
: filtered_points =
index_begin =
0for i in
range
(len
(voxel_gride)-1
):if h_sort[i]
== h_sort[i+1]
:continue
else
: point_index = voxel_index[index_begin:
(i+1)]
,axis=0)
) index_begin = i
filtered_points = np.array(filtered_points, dtype=np.float64)
return filtered_points
#讀取點雲資料
defmain()
: raw_point_cloud_matrix = np.genfromtxt(
r"f:\\point cloud\\三維點雲課程\\3d資料集\\modelnet40_normal_resampled\\car\\car_0005.txt"
, delimiter=
",")
raw_point_cloud_matrix_part = raw_point_cloud_matrix[:,
0:3]
raw_point_cloud = dataframe(raw_point_cloud_matrix_part)
raw_point_cloud.column =
['x'
,'y'
,'z'
] point_cloud_pynt = pyntcloud(raw_point_cloud)
point_cloud_o3d = point_cloud_pynt.to_instance(
"open3d"
,mesh=
false
)#顯示原始點雲
o3d.visualization.draw_geometries(
[point_cloud_o3d]
) filtered_cloud = voxel_filter(point_cloud_pynt.points,
0.05
,mode=
'random'
) point_cloud_o3d.points = o3d.utility.vector3dvector(filtered_cloud)
o3d.visualization.draw_geometries(
[point_cloud_o3d]
)
原始點雲
點雲 PCL學習
忘記了 vscode編譯c cmake教程 cmake入門之建立乙個基於pcl的最小工程 pcl cropbox 過濾掉使用者給定立方體內的點雲資料 pcl 視覺化 pcd檔案 安裝pcl sudo add apt repository ppa v launchpad jochen spricker...
點雲深度學習
參考部落格 研究背景 我們周圍的世界是三維,三維研究可以讓機器更好地感知周圍環境。有效的三維特徵表示是實現點雲配準 三維模型重建 三維形狀檢索 場景語義分割等視覺任務的基礎。三維資料表示 point cloud polygonal meshes volumetric multi view image...
雷射點雲學習一 點雲常用特徵
一 對點雲特徵的要求 理想情況下相同或相似表面上的點的特徵值將非常相似 相對特定度量準則 而不同表面上的點的特徵描述子將有明顯差異 下面幾個條件,通過能否獲得相同的區域性表面特徵值,可以判定點特徵表示方式的優劣 1 剛體變換 rigid transformations 一一 即 三 維旋轉和 三 維...