點雲學習 1 3 voxel grid降取樣

2021-10-09 21:58:37 字數 3142 閱讀 2823

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 一一 即 三 維旋轉和 三 維...