open3d.geometry.TriangleMesh有关函数(笔记2)
1.可视化3D网格(Visualize 3D mesh)
open3d.geometry.TriangleMesh has_vertex_colors(self) |
函数功能: 如果网格包含顶点颜色,则返回True |
返回值: bool |
open3d.geometry.TriangleMesh has_vertex_normals(self) |
函数功能: 如果网格包含顶点法线,则返回True |
返回值: bool |
2. 表面法线估计(Surface normal estimation)
compute_vertex_normals()函数在笔记中已经做过笔记了。
3.裁剪网格(Crop mesh)
通过直接对网格的triangle和triangle_normals数据字段进行操作来移除一半的表面。这是通过numpy完成的。
class open3d.utility.Vector3dVector |
介绍: 将形状(n,3)的float64 numpy数组转化为Open3D格式 |
方法: __init__(*args,**kwrgs) append(self,x):将项目添加到列表末尾 clear(self):清除内容 count(self,x):返回x在列表中出现的次数 extend(*args,**kwrgs): 1.extend(self:Vector3dVector,L:Vector3dVector):通过附加给定列表中的所有项目来扩展列表 2. extend(self:Vector3dVector,L:iteration):通过附加给定列表中的所有项目来扩展列表 insert(self,i:int,x):在给定位置上插入一个项目 pop(*args,**kwrgs): 1.pop(self):删除并返回最后一项 2.pop(self,i:int):删除并返回索引i处的项目 remove(self,x):从列表中删除值为x的第一项。如果没有x,则报错 |
属性: |
open3d.utility.Vector3iVector与之类似。
4.网格上色(Paint mesh)
paint_uniform_color()在笔记中已经做过笔记
5.网格属性(Mesh properties)
三角形网格有几个可以用Open3D测试的属性。一个重要的属性是流形属性,我们可以在其中测试三角形网格是否为边流形is_edge_manifold以及是否为is_vertex_manifold。如果每条边都包围一个或两个三角形,则三角形网格是边流形。
此外,如果顶点的星形是边流形和边连接的,例如,两个或多个面仅通过顶点连接而不是通过边连接,则三角形网格是顶点流形。
另一个属性是自相交检验。
open3d.geometry.TriangleMesh is_edge_manifold(self,allow_boundary_edges=True) |
函数功能: 测试三角形网格是否为边流形 |
参数: allow_boundary_edges(bool,optional,default=True):如果为真,则非流形边定义为具有两个以上相邻三角形的边,否则将不与两个三角形相邻的每条边定义为非流行 |
返回值: bool |
open3d.geometry.TriangleMesh is_empty(self) |
函数功能: 如果geometry为空的话,则返回True |
返回值: bool |
open3d.geometry.TriangleMesh is_intersecting(self,arg0) |
函数功能: 测试三角形网格是否与另一个三角形网格相交 |
参数: arg0(open3d.geometry.TriangleMesh) |
返回值: bool |
open3d.geometry.TriangleMesh is_orientable(self) |
函数功能: 测试三角形网格是否可定向 |
返回值: bool |
open3d.geometry.TriangleMesh is_self_intersecting(self) |
函数功能: 测试三角形网格是否自相交 |
返回值: bool |
open3d.geometry.TriangleMesh is_vertex_manifold(self) |
函数功能: 测试三角形网格的所有顶点是否都是流形的 |
返回: bool |
open3d.geometry.TriangleMesh is_watertight(self) |
函数功能: 测试三角形网格是否水密 |
返回: bool |
6. 网格滤波(Mesh filtering)
Open3D包含许多网格滤波的方法。
6.1 均值滤波
open3d.geometry.TriangleMesh filter_smooth_simple(self,number_of_iterations=1,filter_scope=<FilterScope.All:0>) |
函数功能: 简单的均值滤波。V0=Vi+n∈NVnN+1 |
参数: number_of_iterations(bool,optional,default=1):函数的迭代次数 |
返回: open3d.geometry.TriangleMesh |
6.2 拉普拉斯算子(Laplacian)
open3d.geometry.TriangleMesh filter_smooth_laplacian(self,number_of_iterations=1,lambda_filter=0.5,filter_scope=<FilterScope.All:0>) |
函数功能: 使用拉普拉斯算子实现网格滤波。vo=vi·sumn∈Nwnvn-vi |
参数: number_of_iterations(bool,optional,default=1):函数的迭代次数 lambda_filter(float,optional,default=0.5):过滤器参数 |
返回: open3d.geometry.TriangleMesh |
open3d.geometry.TriangleMesh filter_sharpen(self,number_of_iterations=1,strength=1,filter_scope=<FilterScope.All:0>) |
函数功能: 锐化滤波。 |
参数: number_of_iterations(bool,optional,default=1):函数的迭代次数 strength(float,optional,default=1) |
返回: open3d.geometry.TriangleMesh |
open3d.geometry.TriangleMesh filter_smooth_taubin(self,number_of_iterations=1,lambda_filter=0.5,mu=-0.53,filter_scope=<FilterScope.All:0>) |
函数功能: 使用Taubin算法进行网格滤波。在每次迭代中应用两次filter_smooth_laplacian,第一次使用过滤器参数lambda_filter,第二次使用过滤器参数mu作为平滑参数。这种方法避免的三角形网格的收缩 |
参数: number_of_iterations(bool,optional,default=1):函数的迭代次数 lambda_filter(float,optional,default=0.5):过滤器参数 mu(float,optional,default=-0.53):过滤器参数 |
返回: open3d.geometry.TriangleMesh |
7.采样(Sampling)
Open3D中包含了从网格中采样点云的功能。最简单的方法是使用sample_points_uniformly函数从三角网格的三维表面均匀采样。参数number_of_points表示从网格中采样的点云的点数。
open3d.geometry.TriangleMesh sample_points_uniformly(self,number_of_points=100,use_triangle_normal=False,seed=-1) |
函数功能: 从网格中均匀采样点 |
参数: number_of_points(int,optional,default=100):应均匀采样的点数 use_triangle_normal(bool,optional,default=False):如果为真,将三角形法线分配给返回的点,而不是插值的顶点法线。如有必要,将计算三角形法线并将其添加到网格中 seed(int,optional,default=-1):随机生成器中使用的种子值,设置为 -1 以在每个函数调用中使用随机种子值 |
返回: open3d.geometry.PointCloud |
均匀采样可以得到表面上的点簇。泊松盘采样能够使采样点均匀的分布。sample_points_poisson_disk实现了该功能。
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):如果为真,将三角形法线分配给返回的点,而不是插值的顶点法线。如有必要,将计算三角形法线并将其添加到网格中 seed(int,optional,default=-1):随机生成器中使用的种子值,设置为 -1 以在每个函数调用中使用随机种子值 |
返回: open3d.geometry.PointCloud |
8.网格细分(Mesh subdivision)
网格细分就是把每个三角形划分为更小的三角形。最简单的方式就是,计算三角形每个边的中点,将其划分为四个较小的三角形。这个通过subdivide_midpoin函数实现。3D曲面和面积保持不变但是顶点和三角形的数量增加了。number_of_iterations参数定义了重复细分多少次。
open3d.geometry.TriangleMesh subdivide_midpoint(self,number_of_iterations=1) |
函数功能: 使用中点(midpoint)算法细分网格 |
参数: number_of_iterations(int,optional,default=1):迭代次数。一次迭代将每个三角形拆分为覆盖同一表面的四个三角形 |
返回: open3d.geometry.TriangleMesh |
Open3D实现了基于【Loop】的附加细分方法,可以得到更加平滑的拐角
open3d.geometry.TriangleMesh subdivide_loop(self,number_of_iterations=1) |
函数功能: 使用Loop算法细分网格 |
参数: number_of_iterations(int,optional,default=1):迭代次数。一次迭代将每个三角形拆分为覆盖同一表面的四个三角形 |
返回: open3d.geometry.TriangleMesh |
9.网格简化(Mesh simplification)
有时候我们想用较少的三角形来表示一个高分辨率的网格,但是低分辨率的网格仍然应该接近高分辨率的网格。为此Open3d实现了许多网格简化的算法。
9.1 顶点聚类
顶点聚类的方法是将所有落入给定大小的体素的顶点聚集到单个顶点。
函数接口为simplify_vertex_clustering。
open3d.geometry.TriangleMesh simplify_vertex_clustering(self,voxel_size,contraction=<SimplificationContraction.Average:0>) |
函数功能: 使用顶点聚类简化网格 |
参数: voxel_size(float):顶点内合并的体素大小 (open3d.geometry.SimplificationContraction (contraction) – 0>):聚合顶点信息的方法。Average计算一个简单的平均值,Quadric最小化到相邻平面的距离 |
返回: open3d.geometry.TriangleMesh |
9.2 网格抽取
网格细分的另一种方式是逐步执行的网格抽取。我们选取一个最小化误差指标的三角形移除。重复此过程直到满足指定的三角形数量时停止。Open3d实现了simplify_quadric_decimation接口去最小化误差平方(与相邻平面的距离),参数target_number_of_triangles定义了停止抽取停止的规则。
open3d.geometry.TriangleMesh simplify_quadric_decimation(self,target_number_of_triangles,maximum_error=inf, boundary_weight=1.0) |
函数功能: 使用 Garland 和 Heckbert 的二次误差度量抽取简化网格的功能 |
参数: target_number_of_triangles(int):简化网格应具有的三角形数量。不保证会达到这个数字 maximum_error(float,optional,default=inf):允许合并顶点的最大误差 boundary_weight(float,optional,default=1.0):应用于保留边界的边缘顶点的权重 |
返回: open3d.geometry.TriangleMesh |
10. 连通分量(Connected components)
想要移除各有由于噪声引起的,重建算法的结果。Open3d实现了一个连通分量算法cluster_connected_triangles,他将每个三角形分配给一个连接的三角集群。他会从集群中返回每一个三角形的索引triangle_cluters,和每一个集群中三角形的数量cluter_n_triangles还有集群的表面积cluster_area。
open3d.geometry.TriangleMesh cluster_connected_triangles(self) |
函数功能: 对三角形进行聚类的函数,即通过边连接的三角形被分配相同的聚类索引。此函数返回一个数组,其中包含每个三角形的簇索引,第二个数组包含每个簇的三角形数量,第三个向量包含每个簇的表面积 |
返回: Tuple[open3d.utility.IntVector,List[int],open3d.utility.DoubleVector] |
open3d.geometry.TriangleMesh有关函数(笔记2)相关推荐
- open3d剩余内容有关函数详情(笔记10)
本次笔记包括网格变形(Mesh deformation).内在形状特征(Intrinsic shape signatures)ISS.光线投射(Ray Casting)和距离查询(Distance Q ...
- Open3D官方文档学习笔记
Open3D官方文档学习笔记 第一部分--点云 1 可视化点云 2 体素降采样 3 顶点法线评估 4 访问顶点法线 补充:Numpy在Open3D中的应用 5 裁剪点云 补充1:获取点云坐标 补充2: ...
- Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记
Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...
- Python3 函数笔记
Python3 函数笔记 默认值在函数定义作用域被解析,如下所示: >>> i =5 >>> def f(arg=i): ... print(arg) .. ...
- 电商第一季函数笔记(1)
1.isset (PHP 4, PHP 5, PHP 7) isset - 检测变量是否设置 说明 bool isset ( mixed $var [, mixed $... ] ) 检测变量是否设置 ...
- oracle concat函数用法_大白的函数笔记:文本合并就是这么简单,不会的快来学...
我们在工作中,经常会遇到需要把几个单元格的内容连接起来的情况,针对这种情况Excel为我们提供了几种方法:CONCATENATE函数.CONCAT函数"&"连接符和PHON ...
- mbedTLS(PolarSSL)简单思路和函数笔记(Client端)
转自: OpenSSL一直以来各种被诟病,具体挑了哪些刺,本文就不深究.作为OpenSSL有很多替代,我了解到的有cyaSSL(WolfSSL)和PolorSSL.其中PolarSSL已经被ARM收购 ...
- SQL及Excel函数笔记2022
@[TOC](SQL及Excel函数笔记2022) Excel函数 使用场景:OA单据没有对应类型编码code 需要在表格中快速匹配出想要的输出可以使用一下IF函数 Excel if 公式使用 =IF ...
- OPEN3D(python)学习笔记-1.3 法线估计
官方文档链接 http://www.open3d.org/docs/release/ 示例代码 先对点云进行下采样,然后用estimate_normals函数进行点云的法线估计,该函数查找相邻点并使用 ...
最新文章
- java代码上传到私服,java生成 java代码 上传maven私服
- js修改地址栏url_在gulp、create-react-app中css,js中的文件路径
- mysql innodb 并行_关于MySQL8.0 InnoDB并行执行的详解
- PCB设计中的问题整理
- rf中resourceid_解决VC++ MFC程序resource.h头文件中ID重复问题
- junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常
- Winform下的键盘事件
- 椭圆极点极线性质_笔记:关于极点极线的一些思考
- windows无法安装iis信息服务器,windows server 2016 安装iis教程
- DEV CPP中使用Clang
- 23种设计模式用英语如何表达?
- 一个 Duang~ 的CSS3动画
- Sql like模糊查询 区分大小写
- Swift游戏实战-跑酷熊猫 07 平台的移动
- python批量下载邮件附件
- 【值转换器】 WPF中Image数据绑定Icon对象
- 什么是智能卡与IC卡
- 微信小程序渗透测试技巧
- Python可视化数据库Dash
- Mysql实现排名及指定内容查询排名