
open3d
文章平均质量分 61
ancy_i_cv
start...
展开
-
pcl之open3d数据与pcl数据相互转换
pcl之open3d数据与pcl数据相互转换原创 2022-09-14 09:30:25 · 852 阅读 · 0 评论 -
open3d之使用vtk显示点云
# -*- coding:utf-8 -*-import vtkimport numpy as npimport open3d as o3dfrom vtk.util.numpy_support import numpy_to_vtkif __name__ == '__main__': pcd = o3d.io.read_point_cloud( "/home/ancy/PycharmProjects/learn/Open3D/examples/test_data/RG.原创 2022-03-26 17:51:23 · 3004 阅读 · 0 评论 -
Open3d之多视角点云配准
多视角配准是在全局空间中对齐多个几何形状的过程。比较有代表性的是,输入是一组几何形状{ P i } \lbrace P_i\rbrace{Pi}(可以是点云或者RGBD图像)。输出是一组刚性变换{ T i } \lbrace T_i \rbrace{Ti},变换后的点云{ T i P i } \lbrace T_i P_i \rbrace{TiPi}可以在全局空间中对齐。Open3d通过姿态图估计提供了多视角配准的接口。具体的技术细节请参考[Choi2015].输入教程代码的第一部分...原创 2021-02-17 10:44:45 · 4081 阅读 · 2 评论 -
Open3d之点云全局配准
ICP配准和彩色点云配准都被称为局部配准方法,因为它们依赖于粗对准作为初始化。本教程展示了另一类配准方法,称为全局配准。这一系列算法在初始化时不需要对齐。它们通常产生不太紧密的对齐结果,并用作局部方法的初始化。可视化此帮助函数将转换后的源点云与目标点云一起可视化:def draw_registration_result(source, target, transformation): source_temp = copy.deepcopy(source) target_temp原创 2021-02-11 12:01:20 · 12143 阅读 · 12 评论 -
Open3d之彩色点云配准
本教程演示了一种同时使用几何和颜色进行配准的ICP变体。它实现了这篇文章的算法[Park2017],实现了颜色信息锁定与切平面的对齐(The color information locks the alignment along the tangent plane)。这个算法与之前的ICP配准速度相当,但是实现了更高的精度和鲁棒性。本教程使用的符号来自ICP配准。可视化函数为了掩饰不同颜色点云之间的对齐,draw_registration_result_original_color使用原本的颜色..原创 2021-02-10 12:43:06 · 3170 阅读 · 5 评论 -
Open3d之RGBD测程法
RGBD测程法是去寻找两个连续的RGBD图像对之间的相机移动。它的输入是一对RGBImage的实例,输出是刚体变换形式的运动。Open3D实现了[Steinbrucker2011]and[Park2017]中的方法。读取相机内参我们首先从json文件中读取相机内参。# -*- coding:utf-8 -*-import numpy as npimport open3d as o3dimport Open3D.examples.python.open3d_tutorial as o...原创 2021-02-09 16:47:18 · 1104 阅读 · 0 评论 -
Open3d之颜色映射优化
将颜色映射到从深度相机重建的几何形状。由于颜色和深度帧没有完全对齐,使用彩色图像进行纹理映射会导致颜色映射模糊。Open3D提供了基于[Zhou2014]中的颜色映射优化算法。下面的教程将会提供彩色映射优化算法的示例。输入下面的代码读取彩色和深度图像对,并且生成rgbd_image。注意convert_rgb_to_intensity标志位设置为False。这是为了保留8位彩色通道,而不是使用单通道浮点型图像。在应用颜色映射优化之前,最好先对RGBD图像进行可视化。debug_mode选择是否..原创 2021-02-09 15:50:01 · 2841 阅读 · 1 评论 -
Open3d之自定义可视化
通过draw_geometries和draw_geometries_with_custom_animation函数可以很方便地使用Open3D的可视化功能,一切都可以用GUI完成。在可视化窗口按 h 键,可以看到相关的帮助信息。更多细节:可视化。本教程重点介绍了更高级的可视化功能,以自定义可视化窗口的行为。请参考/Python/Advanced/customized_visualization.py实现以下例程。通过Visualizer 类模仿draw_geometries()功能def cus原创 2021-02-09 10:38:36 · 14838 阅读 · 5 评论 -
Open3d之非阻塞可视化
当需要快速可视化静态几何形状时,draw_geometries()是一个十分有用的函数。然而这个函数会锁定一个进程直到可视化的窗口被关闭。当需要在不关闭窗口的情况下更新几何图形并可视化的话,这并不是一个最优的选择。本教程介绍了一个自定义渲染循环的教程。回顾draw_geometriesdraw_geometries()具有以下渲染循环(C++ 的实现请看Visualizer::Run()):while(true): if (geometry has changed):原创 2021-02-09 10:02:09 · 5810 阅读 · 0 评论 -
Open3d之交互式可视化
本篇教程介绍了Open3D的可视化窗口的交互功能。# -*- coding:utf-8 -*-import copyimport numpy as npimport open3d as o3ddef demo_crop_geometry(): print("手动几何裁剪演示") print( "1) 按两次“Y”以将几何体与Y轴的负方向对齐" ) print("2) 按“K”锁定屏幕并切换到选择模式") print("3) 拖动以选原创 2021-02-09 09:25:51 · 4097 阅读 · 0 评论 -
Open3d之表面重建
在许多场景下我们希望生成密集的3D几何形状,比如三角网格。然而从多视图立体算法和深度传感器中我们只能够获得非结构化的点云数据。我们需要使用表面重建算法来从非结构化的输入中得到三角网格。Open3d实现了文献中已有的算法:Alpha shapes[Edelsbrunner1983] Ball pivoting[Bernardini1999] Poisson[Kazhdan2006]Alpha shapesalpha shape[Edelsbrunner1983]是凸包的概括。如这里所介绍...原创 2021-01-28 21:24:29 · 9398 阅读 · 3 评论 -
Open3d之八叉树(Octree)
简介八叉树是一种树数据结构,其中每个内部节点都有八个子节点。八叉树通常用于三维点云的空间划分。 八叉树的非空叶节点包含一个或多个属于同一空间细分的点。 八叉树是一个有用的三维空间描述,可以用来快速找到附近的点。 Open3D的几何类型Octree,可用于创建,搜索和遍历具有用户指定的最大树深度max_depth的八叉树。从点云中构造八叉树可以使用convert_from_point_cloud方法从点云中构造八叉树。通过沿着从根节点到深度max_depth处的相应叶节点的路径将每个点插入到树原创 2021-01-24 15:22:34 · 6781 阅读 · 8 评论 -
Open3d之网格变形
如果我们想使用少量的约束使得三角网格变形,得使用相应的网格变形算法。Open3d实现了[SorkineAndAlexa2007]中的尽可能严格的算法,以优化下面的能量函数:∑ i ∑ j ∈ N ( i ) w i j ∣ ∣ ( p i ′ − p j ′ ) − R i ( p i − p j ) ∣ ∣ 2 \sum_{i}\sum_{j∈N(i)} w_{ij}||(p_{i}^{'}-p_{j}^{'})-R_{i}(p_{i}-p_{j})||^2i∑j∈N(i)∑wij∣∣(pi′.原创 2021-01-22 22:50:25 · 1162 阅读 · 0 评论 -
Open3d之内部形状描述子ISS
在本教程中,我们将展示如何检测三维形状的ISS关键点。该实现基于俞忠在2009年《内部形状描述子:三维物体识别的形状描述子》中提出的关键点检测模块。ISS关键点原理内部形状描述子ISS是一种表示立体几何形状的方法,该方法含有丰富的几何特征信息,可完成高质量的点云配准。其提取关键点的具体流程如下:1对每个点的球形领域内的所有点计算散射矩阵(scatter matrix),并求取特征值λ1,λ2,λ3(λ1>λ2>λ3),这里的球形领域的半径由用户设置。2计算每个点的,根据散...原创 2021-01-13 13:58:25 · 3325 阅读 · 4 评论 -
Open3d之在Open3d中使用numpy
Open3D中的所有数据结构都兼容NumPy。下面的教程使用NumPy生成sync函数的变体,并使用Open3D可视化该函数。首先我们生成一个矩阵xyz。函数决定矩阵xyz每一列的x,y,z值。是z在[0, 1]区间的归一化映射。# 使用sync函数的变体生成纯n乘3矩阵x = np.linspace(-3, 3, 401)mesh_x, mesh_y = np.meshgrid(x, x)z = np.sinc((np.power(mesh_x, 2) + np.power(mesh_y,原创 2021-01-10 14:37:00 · 3674 阅读 · 1 评论 -
Open3d之网格(Mesh)操作
网格open3d有一种被称为TriangleMesh的3D三角网格的数据结构。下面的代码展示了如何从一个ply文件读取三角网格数据并打印它的顶点和三角形。# -*-coding:utf-8 -*-import copyimport numpy as npimport open3d as o3d# 加载三角网格mesh = o3d.io.read_triangle_mesh("/home/ancy/PycharmProjects/learn/Open3D/examples/test_da原创 2021-01-09 20:37:22 · 27831 阅读 · 12 评论 -
Open3d之点云离群点剔除
当从扫描设备收集数据时,产生的点云往往包含要删除的噪声和伪影。本教程介绍Open3D的离群点剔除功能。数据预处理加载点云并使用 voxel_downsample对其下采样。# -*-coding:utf-8 -*-import numpy as npimport open3d as o3d# 加载点云pcd = o3d.io.read_point_cloud("/home/ancy/Desktop/tradition/Open3D/examples/test_data/ICP/clo原创 2021-01-08 21:37:46 · 9730 阅读 · 5 评论 -
Open3d之KDTree
KDTreeOpen3d使用FLANN构建KDTree以便进行快速最近邻检索。从点云中建立KDTree下面的代码展示读取一个点云并且构建一个KDTree。这是下面最邻近查询的需处理步骤。# -*-coding:utf-8 -*-import open3d as o3d# 读取点云pcd = o3d.io.read_point_cloud("../../TestData/Feature/cloud_bin_0.pcd")# 将点云上成灰色pcd.paint_uniform_co原创 2021-01-07 16:53:42 · 5283 阅读 · 4 评论 -
Open3d之文件IO
文件IO本教程介绍了Open3D如何读写基本数据结构。点云(Point Cloud)下面读取和写入点云的实力。# -*-coding:utf-8 -*-import open3d as o3d# 读取点云pcd = o3d.io.read_point_cloud("fragment.pcd")# 打印点云的摘要信息print(pcd)# 写点云o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)默认情况下,Ope原创 2021-01-07 10:02:19 · 1803 阅读 · 1 评论 -
Open3d之坐标变换
Open3d的几何类型有许多种坐标变换的方法。在本节教程中我们将会展示如何使用旋转(rotate),平移(translate),缩放(scale)和变换(transform)。平移(translate)这里我们展示的第一个算法是平移。平移是将单个3D矢量作为输入,并通过该矢量平移几何图形的所有点/顶点,。下面的代码展示了网格分别在x方向和y方向平移一次的结果。# -*-coding:utf-8 -*-import open3d as o3dimport copy# 在原点创建坐标框架网原创 2021-01-05 20:37:56 · 10634 阅读 · 1 评论 -
Open3d之点云平面分割
Open3D还支持使用RANSAC从点云中分割几何图元。 要查找点云中最有可能存在的平面,我们使用segement_plane函数。 该方法具有三个参数:destance_threshold定义了一个点到一个估计平面的最大距离,这些距离内的点被认为是内点(inlier),ransac_n定义了使用随机抽样估计一个平面的点的个数,num_iterations定义了随机平面采样和验证的频率(迭代次数)。这个函数返回(a,b,c,d)作为一个平面,对于平面上每个点(x,y,z)我们有ax+by+cz+d=0。这个原创 2021-01-05 08:49:04 · 10055 阅读 · 3 评论 -
Open3d之对点云进行DBSCAN 聚类
给定一个点云,比如深度传感器,我们想将局部的点分组/聚合在一起,这时我们就需要聚类算法。open3d实现了DBSCAN[Ester1996]算法,这是一种基于密度的聚类算法。(百度百科链接具有对该算法的介绍,但建议看原论文)。该算法接口为cluster_dbscan,有两个必须的参数:eps表示聚类的领域距离,min_points表示聚类的最小点数。该函数返回一个label,其中label为-1表示为噪声。代码展示# -*-coding:utf-8 -*-import osimport op.原创 2021-01-04 17:36:23 · 5880 阅读 · 7 评论 -
Open3d之计算点云凸包
点云的凸包是包含所有点的最小凸集。 Open3D包含方法compute_convex_hull,该方法计算点云的凸包。 该实现基于Qhull。compute_convex_hull:计算点云的凸包并返回三角网格create_from_triangle_mesh:从三角网格的边缘创建LineSet代码展示# -*-coding:utf-8 -*-import osimport open3d as o3dimport numpy as nptest_data_dir = '/h..原创 2021-01-04 11:06:36 · 3299 阅读 · 1 评论 -
Open3d之计算点云边界框
核心函数与Open3D中的其他几何类型一样,PointCloud几何类型具有边界框。 当前,Open3D实现了AxisAlignedBoundingBox和OrientedBoundingBox,它们也可用于裁剪几何。AxisAlignedBoundingBox:返回几何的轴对齐边界框。与Opencv中的cv2.boundingRect()相似OrientedBoundingBox:返回几何体的定向边界框。与Opencv中的cv2.minAreaRect()相似代码展示# -*-c..原创 2021-01-04 08:49:54 · 8454 阅读 · 10 评论 -
Open3d之计算源点云与目标云的距离
核心函数介绍compute_point_cloud_distance: 提供了计算从源点云到目标点云的距离的方法。即:它计算源点云中的每个点到目标点云中最近点的距离。在下面的例子中,展示了使用该函数来计算两点云之间的差值。请注意,此方法也可用于计算两点云之间的Chamfer距离。代码展示# -*- coding:utf-8 -*-import numpy as npimport open3d as o3d# 读取点云pcd = o3d.io.read_point_cloud("/原创 2021-01-03 20:53:26 · 4779 阅读 · 4 评论 -
Open3d之点云上色
核心函数介绍paint_uniform_colorcolor 点云的RGB颜色。数值类型为float64, 范围为[0, 1], 若用户输入的值越界则被截断 代码展示# -*- coding:utf-8 -*-import open3d as o3d# 读取点云pcd = o3d.io.read_point_cloud( "/home/ancy/Desktop/tradition/Open3D/examples/test_data/Crop/fragment..原创 2021-01-03 19:53:30 · 13004 阅读 · 4 评论 -
Open3d之裁剪点云
代码展示# -*- coding:utf-8 -*-import open3d as o3d# 读取点云pcd = o3d.io.read_point_cloud( "/home/ancy/Desktop/tradition/Open3D/examples/test_data/Crop/fragment.ply")# 读取指定裁剪多边形的json文件vol = o3d.visualization.read_selection_polygon_volume( "/home/原创 2021-01-03 19:14:51 · 5374 阅读 · 8 评论 -
Open3d之python版本快速安装和使用
Open3D预构建的pip和conda包支持操作系统为Ubuntu 18.04+,macOS 10.14+和Windows 10(64-bit),python版本为3.5,3.6,3.7和3.8.若你想要使用其他Python版本和操作系统,从源码编译。通过pip安装Open3Dpip install open3d通过Conda安装Open3Dconda install -c open3d-admin open3d根据网速不同,安装时间也不同,稍作等待即可安装成功。当然你也可以使用原创 2021-01-03 18:46:57 · 27875 阅读 · 3 评论 -
Open3d之点云顶点法线估计
代码展示# -*-coding:utf-8 -*-import osimport open3d as o3dimport numpy as nptest_data_dir = '/home/pi/PycharmProjects/learn/Open3D/examples/test_data'point_cloud_file_name = 'fragment.ply'point_cloud_file_path = os.path.join(test_data_dir, point_...原创 2020-12-30 16:00:07 · 6775 阅读 · 2 评论 -
Open3d之默认距离单位
Open3d的默认距离单位是:m原创 2020-12-30 10:40:00 · 714 阅读 · 0 评论 -
Open3d之点云体素下采样
体素下采样使用常规体素网格从输入点云创建统一下采样的点云。 它通常用作许多点云处理任务的预处理步骤。 该算法分为两个步骤:点被存储到体素中。每个占用的体素通过平均内部的所有点来精确生成一个点。...原创 2020-12-30 10:34:28 · 4626 阅读 · 2 评论 -
Open3d之点云可视化
关键函数read_point_cloud:从文件读取点云。 当用户不填写点云的扩展名时,会自动解码;若填写它尝试根据扩展名对文件进行解码。draw_geometries:可视化点云。 使用鼠标/触控板从不同的角度查看几何图形。按H键为GUI打印出键盘指令的完整列表。代码展示# -*-coding:utf-8 -*-import osimport open3d as o3dimport numpy as nptest_data_dir = '/home/pi/PycharmPr..原创 2020-12-30 09:11:14 · 4119 阅读 · 2 评论 -
Open3d之ubuntu18.04源码编译open3d
0. 背景当需要使用Open3D的最新功能或使用C++接口时, 必须源代码编译。1. 下载源码git clone --recursive https://github.com/intel-isl/Open3D# 你也可以使用下面指令手动更新子模块git submodule update --init --recursive2. 安装依赖util/install_deps_ubuntu.sh3. 设置Python环境激活python或Conda的虚拟环境。使用which原创 2020-12-28 10:32:37 · 1832 阅读 · 4 评论 -
Open3d之简介
Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。Open3D的核心功能包括:3D数据结构 3D数据处理算法 场景重建 表面对齐 3D可视化 基于物理的渲染(PBR) 支持PyTorch和TensorFlow的3D机器学习 GPU加速的核心3D操作 支持C ++和Python...原创 2020-12-26 22:02:10 · 6846 阅读 · 0 评论