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):重载功能
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:获取解压目录的绝对路径 path:ArmadilloMesh.ply文件的路径 prefix:获取数据集的前缀 |