open3d剩余内容有关函数详情(笔记10)

article/2025/9/7 19:37:07

本次笔记包括网格变形(Mesh deformation)内在形状特征(Intrinsic shape signatures)ISS光线投射(Ray Casting)距离查询(Distance Queries)内容。

1. 网格变形(Mesh deformation)

如果我们想根据少量约束对三角形网格进行变形,我们可以使用网格变形算法。Open3D 实现了 [SorkineAndAlexa2007] 的 as-rigid-as-possible 方法,该方法优化了以下能量函数

其中  是我们要优化的旋转矩阵, 分别是优化前后的顶点位置。是顶点  的邻居集合。我们的权重是余切权重。

Open3D 在deform_as_rigid_as_possible 中实现了这个方法。此方法的第一个参数是constraint_ids,它们引用三角形网格中的顶点。第二个参数 constint_pos 定义了优化后这些顶点应该在哪个位置。优化过程是一个迭代方案。因此,我们也可以通过 max_iter 定义迭代次数。

open3d.geometry.TriangleMesh

deform_as_rigid_as_possible(selfconstraint_vertex_indicesconstraint_vertex_positions

max_iterenergy=<DeformAsRigidAsPossibleEnergy.Spokes: 0>smoothed_alpha=0.01)

函数功能:

该函数使用 Sorkine 和 Alexa 的方法使网格变形,‘As-Rigid-As-Possible Surface Modeling’,2007

参数:

constraint_vertex_indices (open3d.utility.IntVector)应该由constraint_vertex_positions中的顶点位置约束的三角形顶点的索引

constraint_vertex_positions (open3d.utility.Vector3dVector)用于约束的顶点位置

max_iter (int)最大迭代次数以最小化能量泛函

(open3d.geometry.DeformAsRigidAsPossibleEnergy (energy) – 0>)变形过程中最小化的能量模型

optional – 0>)变形过程中最小化的能量模型

default=<DeformAsRigidAsPossibleEnergy.Spokes – 0>)变形过程中最小化的能量模型

smoothed_alpha (float, optional, default=0.01)正则化项的平滑能量函数的权衡参数

返回:

open3d.geometry.TriangleMesh

1.1 平滑ARAPA(Smoothed ARAP)

Open3D 还实现了 ARAP 目标的平滑版本,定义为

惩罚相邻旋转矩阵的偏差。  是正则化项的权衡参数, 是表面积。

通过使用带参数 Smoothed 的自变量能量,可以在 deform_as_rigid_as_possible 中使用平滑目标。


2. 内在形状特征(Intrinsic shape signatures)ISS

检测 3D 形状的 ISS 关键点。该实现基于于中提出的关键点检测模块,“Intrinsic Shape Signatures: A Shape Descriptor for 3D Object Recognition”2009

2.1 ISS关键点

ISS 显着性度量基于属于  支持的点的散布矩阵  的特征值分解 (EVD),即:

给定 ,它的降幅特征值在这里表示为 。在修剪阶段,保留两个连续特征值之间的比率低于阈值的点:

基本原理是避免在沿主要方向表现出相似分布的点处检测关键点,在这些点无法建立可重复的规范参考框架,并且,因此,后续的描述阶段几乎不会有效。其余点中,显着性由最小特征值的大小决定:

以便仅包括沿每个主要方向变化较大的点。

在检测步骤之后,如果一个点在给定邻域上具有最大显着值,则该点将被视为关键点。

注意:有关更多详细信息,请参阅原始出版物或 Tombari 等人的Performance Evaluation of 3D Keypoint Detectors

2.2 ISS关键点检测示例

o3d.geometry.keypoint.compute_iss_keypoint(pcd)


3. 光线投射(Ray Casting)

Open3D 中的 RaycastingScene 类提供基本的光线投射功能。展示如何创建场景并进行光线相交测试。您还可以使用 RaycastingScene 从网格(例如 CAD 模型)创建虚拟点云。

初始化

作为第一步,我们使用一个或多个三角形网格初始化 RaycastingScene

open3d.geometry.TriangleMesh

create_box(width=1.0height=1.0depth=1.0create_uv_map=False

map_texture_to_each_face=False)

函数功能:

创建一个盒子。正面的左下角将放置在 (0, 0, 0) 处,默认 UV 贴图,将整个纹理映射到每个面。

参数:

width (float, optional, default=1.0)x 方向长度

height (float, optional, default=1.0)y 方向长度

depth (float, optional, default=1.0)z方向长度

create_uv_map (bool, optional, default=False)将默认 uv 贴图添加到网格

map_texture_to_each_face (bool, optional, default=False)将整个纹理映射到每个面

返回:

open3d.geometry.TriangleMesh

o3d.t.geometry.RaycastingScene

add_triangles(self:open3d.geometry.RaycastingScene,vertex_positions:open3d.cpu.core.Tensor,

triangle_indices:open3d.cpu.pybind.core.Tensor) -> int

函数功能:

将三角形网格添加到场景中

参数:

vertices (open3d.core.Tensor)顶点作为 dim {N,3} 和 dtype Float32 的张量

triangles (open3d.core.Tensor)三角形作为 dim {M,3} 和 dtype UInt32 的张量

返回:

添加的网格的几何 ID(The geometry ID of the added mesh)

o3d.t.geometry.RaycastingScene

add_triangles(self:open3d.geometry.RaycastingScene,mesh: open3d.geometry.TriangleMesh)->int

函数功能:

将三角形网格添加到场景中

参数:

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

返回:

添加的网格的几何 ID(The geometry ID of the added mesh)

 投射光线

o3d.geometry.TriangleMesh

create_torus(torus_radius=1.0, tube_radius=0.5, radial_resolution=30, tubular_resolution=20)

函数功能:

用于创建环面网格的函数

参数:

torus_radius (float, optional, default=1.0)从圆环中心到管中心的半径

tube_radius (float, optional, default=0.5)管筒半径

radial_resolution (int, optional, default=30)沿径向的段数

tubular_resolution (int, optional, default=20)沿管状方向的段数

返回:

open3d.geometry.TriangleMesh

o3d.t.geometry.RaycastingScene

create_rays_pinhole(intrinsic_matrix:open3d.core.Tensor, extrinsic_matrix:open3d.core.Tensor,width_px:int,height_px:int) -> open3d.cpu.pybind.core.Tensor

函数功能:

为给定的相机参数创建光线

参数:

intrinsic_matrix (open3d.core.Tensor)形状为 {3,3} 的上三角内在矩阵

extrinsic_matrix (open3d.core.Tensor)4x4 世界到相机 SE(3) 变换矩阵

width_px (int)图像的宽度(以像素为单位)

height_px (int)图像的高度(以像素为单位)

返回:

带有光线的形状为 {height_px, width_px, 6} 的张量

o3d.t.geometry.RaycastingScene

create_rays_pinhole(fov_deg:float,center:open3d.core.Tensor,eye:open3d.core.Tensor,

up:open3d.core.Tensor,width_px:int,height_px:int) -> open3d.cpu.pybind.core.Tensor

函数功能:

为给定的相机参数创建光线

参数:

fov_deg (float)以度为单位的水平视野

center (open3d.core.Tensor)相机以 {3} 形状注视的点

eye (open3d.core.Tensor)形状为 {3} 的相机的位置

up (open3d.core.Tensor)形状为 {3} 的上向量

width_px (int)图像的宽度(以像素为单位)

height_px (int)图像的高度(以像素为单位)

返回:

带有光线的形状为 {height_px, width_px, 6} 的张量


4.  距离查询(Distance Queries)

Open3D 中的 RaycastingScene 类提供了一组距离查询,可用于将三角形网格转换为隐式函数,查询到表面的距离或确定一个点是否在网格内。

4.1 将网格转换为隐式表示

o3d.t.geometry.RaycastingScene

compute_distance(self: open3d.geometry.RaycastingScene, query_points: open3d.core.Tensor, 

nthreads: int = 0) →open3d.core.Tensor

函数功能:

计算到场景表面的距离

参数:

query_points (open3d.core.Tensor)具有 >=2 暗度、形状 {.., 3} 和 Dtype Float32 描述查询点的张量。{..} 可以是任意数量的维度,例如,组织查询点以创建 3D 网格,形状可以是 {depth, height, width, 3}。最后一个维度必须为 3,格式为 [x, y, z]

nthreads (int)要使用的线程数。设置为 0 表示自动

返回:

具有到表面距离的张量。形状是 {..}

o3d.t.geometry.RaycastingScene

compute_signed_distance(self: open3d.t.geometry.RaycastingScene, 

query_points: open3d.core.Tensor, nthreads: int = 0) → open3d.core.Tensor

函数功能:

计算到场景表面的有符号距离。

此函数计算到场景中网格的有符号距离。该函数假定所有网格都是水密的,并且网格之间没有相交,即,必须明确定义内部和外部。该函数通过计算从查询点开始的射线的交点来确定距离的符号

参数:

query_points (open3d.core.Tensor)一个具有 >=2 暗度、形状 {.., 3} 和 Dtype Float32 的张量,用于描述 query_points。{..} 可以是任意数量的维度,例如,组织查询点以创建 3D 网格,形状可以是 {depth, height, width, 3}。最后一个维度必须为 3,格式为 [x, y, z]

nthreads (int)要使用的线程数。设置为 0 表示自动

返回:

到表面的有符号距离的张量。形状是 {..}。负距离意味着一个点在一个封闭的表面内

o3d.t.geometry.RaycastingScene

compute_occupancy(self: open3d.t.geometry.RaycastingScene, query_points: open3d.core.Tensor, 

nthreads: int = 0) → open3d.core.Tensor

函数功能:

计算查询点位置的占用率

此函数计算查询点是在内部还是外部。该函数假定所有网格都是水密的,并且网格之间没有交叉点,即必须明确定义内部和外部。该函数通过计算从查询点开始的射线的交点来确定一个点是否在内部。

参数:

query_points (open3d.core.Tensor)具有 >=2 暗度、形状 {.., 3} 和 Dtype Float32 描述查询点的张量。{..} 可以是任意数量的维度,例如,组织查询点以创建 3D 网格,形状可以是 {depth, height, width, 3}。最后一个维度必须为 3,格式为 [x, y, z]。

nthreads (int)要使用的线程数。设置为 0 表示自动

返回:

具有占用值的张量。形状是 {..}。值为 0 或 1。如果值为 1,则点被占用或在内部

o3d.t.geometry.RaycastingScene

compute_closest_points(self: open3d.t.geometry.RaycastingScene, 

query_points: open3d.core.Tensor, nthreads: int = 0) → Dict[str, open3d.core.Tensor]

函数功能:

计算场景表面上的最近点

参数:

query_points (open3d.core.Tensor)具有 >=2 暗度、形状 {.., 3} 和 Dtype Float32 描述查询点的张量。{..} 可以是任意数量的维度,例如,组织查询点以创建 3D 网格,形状可以是 {depth, height, width, 3}。最后一个维度必须为 3,格式为 [x, y, z]。

nthreads (int)要使用的线程数。设置为 0 表示自动

返回:

返回的字典包含:

   points: 具有最近表面点的张量。形状是 {..}

   geometry_ids:具有几何 ID 的张量。形状是 {..}

   primitive_ids:具有原始 ID 的张量,对应于三角形索引。形状是 {..}

o3d.t.geometry.RaycastingScene

count_intersections(self: open3d.t.geometry.RaycastingScene, rays: open3d.core.Tensor, 

nthreads: int = 0) → open3d.core.Tensor

函数功能:

计算光线与场景的交点数

参数:

rays (open3d.core.Tensor)一个具有 >=2 暗度、形状 {.., 6} 和 Dtype Float32 描述光线的张量。 {..} 可以是任意数量的维度,例如,为了组织光线以创建图像,形状可以是 {height, width, 6}。最后一个维度必须为 6,格式为 [ox, oy, oz, dx, dy, dz],以 [ox,oy,oz] 为原点,[dx,dy,dz] 为方向。没有必要规范化方向。

nthreads (int)要使用的线程数。设置为 0 表示自动

返回:

具有交点数的张量。形状是 {..}


http://chatgpt.dhexx.cn/article/Byq254Sb.shtml

相关文章

libigl第五章-参数化

在计算机图形学中&#xff0c;我们将表面参数化表示为从表面到 R 2 R^2 R2 。它通常由网格的每个顶点的一组新的 2D 坐标编码&#xff08;并且可能还通过与原始曲面的面一一对应的一组新面&#xff09;请注意&#xff0c;此定义与经典微分几何定义相反。 参数化有很多应用&…

libigl第四章-变形

现代基于网格的形状变形方法满足手柄&#xff08;网格上选定的顶点或区域&#xff09;处的用户变形约束&#xff0c;并将这些手柄变形平滑地传播到形状的其余部分&#xff0c;而不会删除或扭曲细节。Libigl 提供了各种最先进的变形技术的实现&#xff0c;从基于二次网格的能量最…

SAP License:ARAP知识点

总部&#xff08;Head Office/Branch&#xff09;。公司代码视图&#xff0d;帐户管理&#xff0d;会计信息中的总部字段建立客户与总部的关联&#xff0c;这样客户的发票或付款就可以自动地过帐到总部去。 Corporate group&#xff08;常规视图&#xff0d;控制数据&#xff…

非固定边界网格参数化(ARAP)

非固定边界的网格参数化方法。 记录自己的实现过程&#xff0c;一方面可能对其他人有用&#xff0c;另一方面自己保存。 1、首先实现固定边界的网格参数化方法&#xff0c;参考如下论文 M. Floater. Parameterization and smooth approximation ofsurface triangulations. CAG…

arap deformation 网格变形可视化

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 rarp变形全称是 As-Rigid-As-Possible Suface Deformation. 意思是变形时尽量使每条边保持一个钢性变换。基本思路是基于能量优化来做。 能量定义 E ∑ i 1 N v w …

ARAP参数化算法

ARAP参数化算法实现 综述 三维模型的参数化把三维模型映射到二维平面&#xff0c;LSCM在映射的过程中尽可能地保持三角形的角度相同&#xff0c;ARAP参数化算法在LSCM的基础上尽可能的保证三角形没有扭曲地映射在二维平面上。 算法设计 因为需要映射过程中尽可能保持三角形…

经典论文推导: As-Rigid-As-Possible(ARAP) Surface Modeling

论文As-Rigid-As-Possible Surface Modeling 发表于SGP 2007&#xff0c;是变形领域的经典论文&#xff0c;目前引用已经超过1000次。网格变形要求产生视觉合理并且大致满足物理规律的变形效果&#xff0c;而模型细节的保持很大程度地满足了这种需求。刚性作为一个重要的属性在…

ARAP(As-Rigid-As-Possible)变形算法

上图中&#xff0c;最左侧的模型为其初始状态&#xff0c;由后面几种模型形状的变换我们可以发现它实际上就是要求变形前后模型每一个局部都只经历了平移或者旋转&#xff0c;也就是刚体变换&#xff08;rigid -transformation&#xff09;。我们知道&#xff0c;刚体变换是不会…

MiKTeX安装

MiKTeX安装&#xff08;导师使用这个版本&#xff09; 1&#xff0c;下载 2&#xff0c;打开文件 3&#xff0c;安装 安装好点击下一步&#xff0c; 二&#xff1a;选择并配置编辑器TeXstudio 1&#xff0c;下载地址&#xff1a;http://texstudio.sourceforge.net/ 错了…

LaTeX配置:MiKTeX+WinEdt

LaTeX(Tex)是一种语言&#xff0c;搭配上编译器(MIkTEX、TexLive)和编辑器(WinEdt、VS Code等)可以程序化生成PDF文档。本次给大家分享的是MiKTeXWinEdt的配置(安装方便快捷&#xff0c;占用空间小)。具体步骤如下&#xff1a; 预下载文件 下载Ctex2.9版本套装&#xff1a;http…

MikTex与Texlive 共存,vscode设置使用Texlive编译

为了在word中使用latex&#xff0c;安装了MikTex。 但在电脑上同时安装了MikTex 与Texlive之后&#xff0c;vscode本来之前默认用texlive编译项目&#xff0c;项目默认的编辑器变成了MikTex。 解决办法一&#xff1a; 一种说法是&#xff0c;在程序路径中删除MikTex的相关路径变…

MikTex+TexStudio配置

安装MikTex TexStudio cmd下mpm调出MikTex宏包管理器&#xff0c;下载宏包 相关参考&#xff1a; http://freshstu.com/2013/05/how-to-use-chinese-fonts-in-latax/ http://blog.sina.com.cn/s/blog_564b1b9b0100njfc.html http://guo-ch.blog.163.com/blog/static/120255…

【LaTeX】MiKTeX+TeXstudio安装过程

下载并安装MiKTeX 下载地址&#xff1a;MiKTeX 一路点击下一步即可 下载并安装TeXstudio 下载地址&#xff1a;TeXstudio 一路点击下一步即可 安装顺序一定是先MiKTeX&#xff0c;然后是TeXstudio&#xff0c;否则会报错 检查下配置 option->configure Texstudio-&g…

二、VSCode——MiKTeX编写latex编码

免安装下载VSCode https://blog.csdn.net/qq_40837795/article/details/128037675 下载MiKTeX https://miktex.org/download 配置MiKTeX https://blog.csdn.net/qq_40837795/article/details/120388489 配置VSCode LaTeX workshop 1、点击左侧Extensions&#xff0c;搜…

关于MikTex和TexStudio的安装

一位老师在课上向我们推荐使用了MikTex和TexStudio&#xff0c;要求我们提交pdf文档&#xff0c;以及学习一下新工具&#xff0c;这里记录一下这两个工具的安装过程。 1. Mik的下载与安装。 直接搜索MikTex&#xff0c;进入官方网址就可以下载。MikTex: https://miktex.org/ …

Texmaker+Miktex配置

Mixtex下载链接&#xff1a;https://miktex.org/download Texmaker下载链接&#xff1a;http://www.xm1math.net/texmaker/ 两者正常下载安装&#xff0c;记住Mixtex安装路径&#xff0c;主要是配置Texmaker 打开Texmaker&#xff0c;点击选项——配置Texmaker&#xff0c;出…

论文写作的又一利器:VSCode + Latex Workshop + MikTex + Git

论文写作的又一利器&#xff1a;VSCode Latex Workshop MikTex Git 摘要 本文介绍了Windows平台下面&#xff0c;MiktexVSCodeLatex WorkshopGit配置用于撰写学术论文的方法。 对正反向搜索的配置也进行了介绍。 1.引言 学术论文写作&#xff0c;Latex是不二的选择。它是免…

关于TeX,LaTeX,MikTex,CTeX,etc.

下文是王垠介绍的TeX&#xff0d;&#xff0d;一个专业的排版系统&#xff01; 这是一个介绍 TeX — 一个漂亮&#xff0c;有趣又可靠的排版程序的网页。希望通过我的介绍&#xff0c;你能体会到使用 TeX 的快乐感觉。 这页分成了很多小主题&#xff0c;可以叫做一个非技术性…

LaTeX相关概念介绍及CTeX、MiKTeX+TeXstudio环境搭建

1. LaTeX相关概念 TeX是Donald E.Knuth 开发的&#xff0c;用来进行文字排版的软件&#xff0c;特别的是TeX是数学公式排版最好的系统&#xff0c;很多世界一流的出版社均采用TeX系统出版书籍和期刊。 LaTeX 是一种格式&#xff0c;这种格式采用TeX作为自己的排版引擎。LaTeX…