open3d函式教程學習(持續更新)

2021-10-08 02:35:22 字數 4147 閱讀 8742

open3d的核心功能包括:

3d資料結構

3d資料處理演算法

場景重建

表面對齊

3d視覺化

基於物理的渲染(pbr)

在c ++和python中可用

匯入open3d模組和列印出幫助資訊。

import open3d as o3d

pcd = o3d.io.read_point_cloud(

"../../testdata/icp/cloud_bin_0.pcd"

)print

(pcd)

geometry::pointcloud with 198835 points.

從open3d模組匯入read_point_cloud函式。它讀取乙個點雲檔案,並返回pointcloud類的例項。open3d.geometry.pointcloud

print(pcd)列印點雲的簡要資訊。

從檔案讀取pointcloud的功能

read_point_cloud(filename,format=『auto』,remove_nan_points=true,remove_infinite_points=true,print_progress=false)

引數:

filename(str):檔案路徑。

格式(str,可選,預設='auto'):輸入檔案的格式。 如果未指定或設定為``auto'',則從副檔名中推斷格式。

remove_nan_points(布林型,可選,預設為true):如果為true,則從pointcloud中刪除所有包含nan的點。

remove_infinite_points(布林型,可選,預設為true):如果為true,則從pointcloud中刪除所有包含無限值的點。

print_progress(布林型,可選,預設= false):如果設定為true,則在控制台中視覺化進度條

read_point_cloud從檔案讀取點雲。它嘗試根據副檔名對檔案進行解碼。支援的副檔名是:pcd,ply,xyz,xyzrgb,xyzn,pts

以下**用於讀取和寫入網格

print

("testing io for meshes ..."

)mesh = o3d.io.read_********_mesh(

"../../testdata/knot.ply"

)print

(mesh)

o3d.io.write_********_mesh(

"copy_of_knot.ply"

, mesh)

testing io for meshes …

geometry::********mesh with 1440 points and 2880 ********s.

true

與點雲的資料結構相比,網格具有定義3d表面的三角形。

預設情況下,open3d嘗試通過副檔名來推斷檔案型別。 以下是受支援的三角形網格檔案型別的列表。支援的副檔名:ply,stl,obj,off,gltf

體素降取樣使用常規的體素網格從輸入點雲建立統一降取樣的點雲。 它通常用作許多點雲處理任務的預處理步驟。就是將點雲分塊(這裡為體素),然後逐塊進行降取樣(這裡生成乙個點),該演算法分為兩個步驟:

根據體素降取樣從點雲輸入到點雲輸出。如果法線和顏色存在則將其平均

引數voxel_size(float) – 要向下取樣的體素大小

返回open3d.geometry.pointcloud

使用geometry.pointcloud.voxeldownsample下取樣的函式。 在下取樣之前還記錄點雲索引

引數voxel_size(float) – 向下取樣的體素大小

min_bound(numpy.ndarray[float64[3, 1]]) – 體素邊界的最小座標

max_bound(numpy.ndarray[float64[3, 1]]) – 體素邊界的最大座標

返回tuple[open3d.geometry.pointcloud,numpy.ndarray[int32[m, n]], 取樣後的稀疏點雲資料

list[open3d.utility.intvector] 立方編號

class open3d.utility.vector3dvector

將形狀(n,3)的float64 numpy陣列轉換為open3d格式。

用法示例

import open3d

import numpy as np

pcd = open3d.geometry.pointcloud(

)np_points = np.random.rand(

100,3)

# from numpy to open3d

pcd.points = open3d.utility.vector3dvector(np_points)

# from open3d to numpy

np_points = np.asarray(pcd.points)

pcd.points =open3d.utility.vector3dvector(np_points)

將形狀(n,3)的float64 numpy陣列轉換為open3d格式

np_points =np.asarray(pcd.points)

將open3d格式轉換為 numpy陣列 (n,3)

返回幾何座標的最小範圍

返回numpy.ndarray[float64 [3,1]]

返回幾何座標的最大範圍

返回numpy.ndarray[float64[3, 1]]

用法示例

import open3d

min_bound = dense_pcd.get_min_bound(

)- voxel_size *

0.5#獲取最小點座標 - 0.05 * 0.5

max_bound = dense_pcd.get_max_bound(

)+ voxel_size *

0.5

open3d_pointnet2_semantic3d_master中利用體素進行資料降取樣,首先取得體素邊界的最大座標和最小座標。

Open3D 獲取mesh屬性

首先看一下在cloudcompare軟體中的實現 mesh flag vertices 檢查網格的基本特性,為每個網格樣本做標誌 0 normal,1 border,2 non manifold 三角網格有幾個可以用open3d測試的屬性。乙個重要的屬性是流形性質 manifold property...

Open3d學習計畫 10(KDTree)

open3d使用flann構建kdtree以便進行快速最近鄰檢索。下面的 讀取乙個點雲並且構建乙個kdtree。這是下面最鄰近查詢的需處理步驟。print testing kdtree in open3d print load a point cloud and paint it gray.pcd ...

Open3D 使用RANSAC分割平面

二 主要函式 三 實現 四 結果展示 五 參考連線 隨機抽樣一致性演算法ransac random sample consensus 是一種迭代的方法來從一系列包含有離異值的資料中計算數學模型引數的方法。ransac演算法本質上由兩步組成,不斷進行迴圈 1 從輸入資料中隨機選出能組成數學模型的最小數...