1.可视化点云(Visualize point cloud)

open3d.io

read_point_cloud(filename,format=auto,remove_nan_points=False,remove_infinite_points=False,

print_progress=False)

函数功能:

从文件中读取点云。它尝试根据扩展名解码文件。有关支持的文件类型列表,请参阅 文件IO

参数:

filename(str)文件路径。

format(str,optional,default=auto):输入文件的格式。如果未指定或设置为auto,则从文件扩展名推断格式。

remove_nan_points(bool,optional,default=False)如果为真,所有包含NaN的点都会从PointCloud中移除。

remove_infinite_points(bool,optional,default=False)如果为真,则从PointCloud中删除所有包含无限值的点。

print_progress(bool,optional,default=False)如果设置为True,则会在控制台中显示进度条。

返回值:

open3d.geometry.PointCloud

draw_geometries()有两个介绍:

draw_geometries(geometry_list,window_name=’Open3D’,width=1920,height=1080,left=50,top=50,

point_show_normal=False,mesh_show_wireframe=False,mesh_show_back_face=False)

函数功能:

可视化点云。使用鼠标或者触控板从不同的视点查看几何图形。

参数:

geometry_list(List[open3d.geometry.Geometry])要可视化的几何图形列表。

window_name(str,optional,default=’Open3D’)可视化窗口的显示主题。

width(int,optional,default=1920)可视化窗口的宽度。

height(int,optional,default=1080)可视化窗口的高度。

left(int,optional,defalult=50)可视化窗口的左边距。

top(int,optional,default=50)可视化窗口的上边距。

point_show_normal(bool,optional,default=False)如果设置为True,则可视化点法线。

mesh_show_wireframe(bool,optional,default=False)如果设置为True,则可视化网格线框。

mesh_show_back_face(bool,optional,default=False)也可视化网格三角形的背面。

返回值:

None

draw_geometries(geometry_list,window_name=’Open3D’,width=1920,height=1080,left=50,top=50,

point_show_normal=False,mesh_show_wireframe=False,mesh_show_back_face=False,lookat,up,

front,zoom)

函数功能:

可视化点云。使用鼠标或者触控板从不同的视点查看几何图形。

参数:

geometry_list(List[open3d.geometry.Geometry])要可视化的几何图形列表。

window_name(str,optional,default=’Open3D’)可视化窗口的显示主题。

width(int,optional,default=1920)可视化窗口的宽度。

height(int,optional,default=1080)可视化窗口的高度。

left(int,optional,defalult=50)可视化窗口的左边距。

top(int,optional,default=50)可视化窗口的上边距。

point_show_normal(bool,optional,default=False)如果设置为True,则可视化点法线。

mesh_show_wireframe(bool,optional,default=False)如果设置为True,则可视化网格线框。

mesh_show_back_face(bool,optional,default=False)也可视化网格三角形的背面。

lookat(numpy.ndarray[numpy.float64[3,1]])相机的观察向量。

up(numpy.ndarray[numpy.float64[3,1]])相机的向上向量。

front(numpy.ndarray[numpy.float64[3,1]])相机的前向量。

zoom(float)相机的变焦。

返回值:

None


2.体素下采样(Voxel downsampling)

open3d.geometry.PointCloud

voxel_down_sample(self,voxel_sample)

函数功能:

使用体素将输入点云下采样到输出点云的功能。如果存在法线和颜色,则对其进行平均。

参数:

voxel_sample(float)要下采样的体素大小。

返回值:

open3d.geometry.PointCloud


3.顶点法线估计(Vertex normal estimate)

        点云的另一个基本操作是点法线估计。

Open3d.geometry.PointCloud

estimate_normals(self,search_param=KDTreeSearchParamKNN with knn=30,fast_normal_computon=True)

函数功能:

计算点云法线的函数。如果存在法线,则法线相对于输入点云定向。

参数:

search_param(open3d.geometry.KDTreeSearchParam,option,default=KDTreeSearchParamKNN with knn=30)用于邻域搜索的KDTree搜索参数。

fast_normal_computation(bool,optional,default=True)如果为真,则正态估计使用非迭代方法从协方差矩阵中提取特征向量。这更快,但数值不稳定。

返回值:

None

 该函数查找相邻点并使用协方差分析计算相邻点的主轴。该函数将KDTreeSearchParamHybrid类的实例作为参数。两个关键参数radius=0.1和max_nn=30指定搜索半径和最大最近邻。它具有10cm的搜索半径,并且最多只考虑30个邻居以节省计算时间。

class:open3d.geometry.KDTreeSearchParamHybrid

功能:

混合KNN和半径搜索的KDTree搜索参数。

子类:Type

几何类型的枚举类。

HybridSearch=<Type.HybridSearch:2>

KNNSearch=<Type.KNNSearch:0>

radiusSearch=<Type.RadiusSearch:1>

属性:value

构造方法:

__init__(self:open3d.cpu.pybind.geometry.KDTreeSearchParamHybrid,radius:float,max_nn:int)->None

方法:

get_search_type(self)获取搜索参数的搜索半径(KNN、半径、混合),返回值是:open3d.geometry.KDTreeSearchParam.SearchType。

HybridSearch=<Type.HybridSearch:2>

KNNSearch=<Type.KNNSearch:0>

radiusSearch=<Type.RadiusSearch:1>

属性:

max_nn最多将搜索max_nn数量的邻居。

radius搜索半径。

协方差分析算法产生两个相反的方向作为正常候选。在不知道几何的全局结构的情况下,两者都可能是正确的。这被称为正常方向问题。Open3D尝试将法线方向定向为与原始法线(如果存在)对齐。否则,Open3D会进行随机猜测。如果需要考虑方向,则需要调用其他方向函数,例如:orient_normals_to_align_with_direction,orient_normals_towards_camera_location

 

open3d.geometry.PointCloud

orient_normals_to_align_with_direction(self,orientation_reference=array([0.0,0.0,1.0]))

函数功能:

定位点云法线的函数。

参数:

orientation_reference(numpy.ndarray[numpy.float64[3,1]],optional,default=array([0.,0.,1.]))法线相对于orientation_reference定向。

返回值:

None

open3d.geoemtry.PointCloud

orient_normals_towards_camera_location(self,camera_location=array([0.0,0.0,0.0]))

函数功能:

定位点云法线的函数。

参数:

camera_location(numpy.ndarray[numpy.float64[3,1]],optional,default=array([0.,0.,0.]))法线朝向camera_location。

返回值:

None


4.访问估计的顶点法线(Access estimate vertex normal)

 

        估计的法线向量可以从downpcd(经过下采样的文件)的normals变量中检索。要查看其他变量,请使用help(downpcd)。可以使用np.asarray将法线向量转换为numpy数组。有关numpy数组的更多示例,请查看使用NumPy


5.裁剪点云(Crop point cloud)

open3d.visualization

read_selection_polygon_volume(filename)

函数功能:

从文件中读取SelectionPolygonVolume的函数。

参数:

filename(str)文件路径。

返回值:

open3d.visualization.SelectionPolygonVolume

read_selection_polygon_volume()读取指定多边形选择区域的json文件。

 

open3d.visualization.SelectionPolygonVolume

crop_point_cloud(self,input)

函数功能:

裁剪点云的函数。

参数:

input(open3d.geometry.PointCloud)输入点云。

返回值:

open3d.geometry.PointCloud

 crop_point_cloud()过滤掉点。 

 

class:open3d.data.DemoCropPointCloud

介绍:

DemoCropPointCloud的数据类包含点云和cropped.json(保存的选定多边形体积文件)。该数据集在Open3D中用于点云裁剪演示。

__init__(self:open3d.cpu.pybind.data.DemoCropPointCloud,data_root:str=“”)->None

属性:

cropped_json_path保存的选定多边形体积文件的路径。

data_root获取数据根目录。数据根在构建时设置或自动确定。

download_dir获取下载目录的绝对路径。即${data_root}/${download_prefix}/${prefix}

extract_dir获取提取目录的绝对路径。即${data_root}/${extract_prefix}/${prefix}

point_cloud_path示例点云的路径。

prefix获取数据集的前缀。


 6.绘制点云(Paint point cloud)

open3d.geometry.PointCloud

paint_uniform_color(self,color)

函数功能:

为PointCloud中的每个点分配相同的颜色。

参数:

color(numpy.ndarray[numpy.float64[3,1]])PointCloud的RGB颜色

返回值:

open3d.geometry.PointCloud

 paint_uniform_color()函数将所有点绘制成统一的颜色。颜色在RGB空间,[0,1]范围。


 7.点云距离(Point cloud distance)

        Open3D提供了compute_point_cloud_distance()方法来计算从源点云到目标点云的距离。即,它为源点云中的每个点计算到目标点云中最近点的距离。

open3d.geometry.PointCloud

compute_point_cloud_distance(self,target)

函数功能:

对于源点云中的每个点,计算到目标点云的距离。

参数:

target(open3d.geometry.PointCloud)目标点云

返回值:

open3d.utility.DoubleVector

open3d.geometry.PointCloud

select_by_index(self,indices,invert=False)

函数功能:

从输入点云中选择点到输出点云中的功能

参数:

indices(List[int])要选择的点的索引

invert(bool,optional,default=False)设置为True以反转索引的选择

返回值:

open3d.geometry.PointCloud


8.包围框(Bounding volumes)

        PointCloud几何类型与Open3D中的所有其他几何类型一样具有边界体积。目前,Open3D实现了一个AxisAlignedBoundingBox和一个OrientedBoundingBox,它们也可用于裁剪几何图形。

open3d.geometry.PointCloud

get_axis_aligned_bounding_box(self)

函数功能:

返回几何的轴对齐边界框

参数:

返回值:

open3d.geometry.AxisAlignedBoundingBox

open3d.geometry.PointCloud

get_oriented_bounding_box(self:open3d.geometry.Geometry3D,robust:bool=False)->open3d::geometry::OrientedBoundingBox

函数功能:

返回几何体的定向边界框

基于凸包的PCA计算定向边界框。返回的边界框是最小边界框的近似值

参数:

robust(bool)如果设置为True,则使用更健壮的方法,该方法适用于退化情况,但会在点坐标中引入噪声

返回值:

定向边界框。边界框的方向使得轴相对于主成分是有序的

open3d.geometry.OrientedBoundingBox


9.凸包(Convex hull)

    点云的凸包是包含所有点的最小凸集。Open3D包含计算点云凸包的方法compute_convex_hull()。该实现基于Qhull

open3d.io

read_triangle_mesh(filename,enable_post_processing=False,print_progress=False)

函数功能:

从文件中读取三角形网格

参数:

filename(str)文件路径

enable_post_processing(bool,optional,default=False)

print_progress(bool,optional,default=False)如果设置为True,则会在控制台中显示进度条

返回值:

open3d.geometry.TriangleMesh

open3d.geometry.TriangleMesh

compute_vertex_normals(self,normalized=True)

函数功能:

计算顶点法线的函数,通常在渲染之前调用

参数:

normalized(bool,optional,default=True)

返回值:

open3d.geometry.TriangleMesh

open3d.geometry.TriangleMesh

sample_points_poisson_disk(self,number_of_points,init_factor=5,pcl=None,use_triangle_normal=False,seed=-1)

函数功能:

从网格中采样点的函数,其中每个点与相邻点的距离大致相同(蓝噪声)。

参数:

number_of_points(int)应采样的点数

init_factor(float,optional,default=5)初始均匀采样点云的因子。此init PointCloud用于样本消除

pcl (open3d.geometry.PointCloud, optional, default=None)用于样本消除的初始点云。如果提供了此参数,则忽略init_factor 

use_triangle_normal(bool,optional,default=False)如果为True,将三角形法线分配给返回的点,而不是插值的顶点法线。如有必要,将计算三角形法线并将其添加到网格中

seed(int,optional,default=-1)随机生成器中使用的种子值,设置为-1以在每个函数调用中使用随机种子值

返回值:

open3d.geometry.PointCloud

open3d.geometry.LineSet

create_from_triangle_mesh(mesh)

函数功能:

从三角网格的边缘创建LineSet的因素函数

参数:

mesh(open3d.geometry.TriangleMesh)输入三角形网格

返回值:

open3d.geometry.LineSet


10.DBSCAN聚类(DBSCAN clustering)

        给定一个点云,例如我们想要将本地点云集群组合在一起的深度传感器。为此,我们可以使用聚类算法。Open3D实现了DBSCAN,它是一种基于密度的聚类算法。该算法在cluster_dbscan中实现,需要两个参数:eps定义到集群中邻居的距离,min_points定义形成集群所需的最小点数。该函数返回labels(标签),其中标签-1表示噪声。

注意:

该算法预先计算多有点在epsilon半径内的所有邻居。如果选择的epsilon太大,这可能需要大量内存。

class open3d.utility.VerbosityContextManager

介绍:

用于临时更改Open3D详细级别的上下文管理器

初始:

__init__(self:open3d.utility.VerbosityContextManager,level:open3d.utility.VerbosityLevel)->None创建具有给定VerbosityLevel的VerbosityContextManager

属性:

 

class open3d.utility.VerbosityLevel

介绍:

详细级别的枚举类

方法:

Debug=<VerbosityLevel.Debug:3>

Error=< VerbosityLevel.Error:0>

Info=< VerbosityLevel.Info:2>

Warning=<VerbosityLevel.Warning:1>

属性:

value

 

open3d.geometry.PointCloud

cluster_dbscan(self,eps,min_points,print_progress=False)

函数功能:

根据算法返回点标签列表,-1表示噪声

参数:

eps(float)用于查找相邻点的密度函数

min_points(int)形成集群的最小点数

print_progress(bool,optional,default=False)如果为True,则进度会在控制台中可视化

返回值:

open3d.utility.IntVector

class open3d.utility.Vector3dVector

介绍:

将形状(n,3)的float64 numpy数组转换为Open3D格式

方法:

__init__(*args,**kwargs):重载功能

   1.__init__(self:open3d.utility.Vector3dVector)->None

   2.__init__(self:open3d.utility.Vector3dVector,arg0:numpy.ndarray[numpy.float64])->None

   3.__init__(self:open3d.utility.Vector3dVector,arg0:self:open3d.utility.Vector3dVector)->None:复制构造函数

   4.__init__(self:open3d.utility.Vector3dVector,arg0:Iterable)->None

append(self:open3d.utility.Vector3dVector,x:numpy.ndarray[numpy.float64[3,1]])->None将项目添加到列表末尾

clear(self:open3d.utility.Vector3dVector)->None清除内容

count(self:open3d.utility.Vector3dVector,x:numpy.ndarray[numpy.float64[3,1]])->int返回x在列表中出现的次数

extend(*args,**kwargs)重载功能

   1.extend(self:open3d.utility.Vector3dVector,L:self:open3d.utility.Vector3dVector)->None:通过附加给定列表中的所有项目来扩展列表

   2.extend(self:open3d.utility.Vector3dVector,L:Iterable):通过附加给定列表中的所有项目来扩展列表

insert(self:open3d.utility.Vector3dVector,i:int,x:numpy.ndarray[numpy.float64[3,1]])->None在给定位置插入一个项目

pop(*args,**kwargs)重载功能

  1. pop(self:open3d.utility.Vector3dVector)->numpy.ndarray[numpy.float64[3,1]]:删除并返回最后一项

   2.pop(self:open3d.utility.Vector3dVector,i:int)->numpy.ndarray[numpy.float64[3,1]]:删除并返回索引i处的项目

remove(self:open3d.utility.Vector3dVector,x:numpy.ndarray[numpy.float64[3,1]])->None从列表中删除值为x的第一项。如果没有这样的项目是错误的


 11.平面分割(Plane segmentation)

        Open3D还支持使用RANSAC从点云中分割几何基元。要查找点云中最有可能存在的平面,我们使用segement_plane函数。这个函数需要三个参数,destance_threshold定义了一个点到一个估计平面的最大距离,这些距离内的点被认为是内点(inlier),ransac_n定义了使用随机抽样估计一个平面的点的个数,num_iterations定义了随机平面采样和验证的频率(迭代次数)。这个函数返回(a,b,c,d)作为一个平面,对于平面上每个点(x,y,z)我们有ax+by+cz+d=0。这个函数还会返回内点索引的列表。

open3d.geometry.PointCloud

segment_plane(self,distance_threshold,ransac_n,num_iterations,seed=None)

函数功能:

使用RANSAC算法在点云中分割平面

参数:

distance_threshold(float)一个点与平面模型的最大距离,仍然被认为是一个内点

ransac_n(int)每次迭代中被视为内点的初始点数

num_iterations(int)迭代次数

seed(Optional[int],optional,default=None)随机生成器中使用的种子值,设置为None以在每个函数调用中使用随机种子值

返回值:

Tuple[numpy.ndarray[numpy.float64[4,1]],List[int]]


12. 隐藏点移除(Hidden point removal)

class open3d.data.ArmadilloMesh

介绍:

ArmadilloMesh 的数据类包含来自 Stanford 3D Scanning Repository 的 ArmadilloMesh.ply

方法:

__init__(self:open3d.data.ArmadilloMesh,data_root:str=“”)->None

属性:

data_root获取数据根目录。数据根在构建时设置或自动确定

download_dir获取下载路径的绝对路径

extract_dir获取解压目录的绝对路径

pathArmadilloMesh.ply文件的路径

prefix获取数据集的前缀

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐