在Python 3中使用行进立方体进行点云三角测量

2024-03-09

我正在开发 3D 重建系统,并希望使用 Python 3 从注册的点云数据生成三角形网格。我的对象不是凸的,因此行进立方体算法似乎是解决方案。

我更喜欢使用此类方法的现有实现,所以我尝试了scikit 图像 https://scikit-image.org/docs/dev/auto_examples/edges/plot_marching_cubes.html and Open3d http://open3d.org/docs/tutorial/Advanced/rgbd_integration.html#extract-a-mesh但这两个 API 都不接受原始点云作为输入(请注意,我不是这些库的专家)。我转换数据的尝试失败了,并且我已经没有想法了,因为文档没有阐明函数的输入格式。

这些是我想要的片段pcd_to_volume是我需要的。

scikit 图像

import numpy as np
from skimage.measure import marching_cubes_lewiner

N = 10000
pcd = np.random.rand(N,3)

def pcd_to_volume(pcd, voxel_size):
    #TODO

volume = pcd_to_volume(pcd, voxel_size=0.05)

verts, faces, normals, values = marching_cubes_lewiner(volume, 0)

open3d

import numpy as np
import open3d

N = 10000
pcd = np.random.rand(N,3)

def pcd_to_volume(pcd, voxel_size):
    #TODO

volume = pcd_to_volume(pcd, voxel_size=0.05)

mesh = volume.extract_triangle_mesh()

我无法找到正确编写的方法pcd_to_volume功能。我不喜欢图书馆,所以这两种解决方案对我来说都很好。

您对正确转换我的数据有什么建议吗?点云是一个Nx3矩阵其中dtype=float.

您知道另一种适用于原始点云数据的[行进立方体算法]实现吗?我更喜欢 scikit 和 open3d 这样的库,但我也会考虑 github 项目。


您知道另一种适用于原始点云数据的[行进立方体算法]实现吗?

Hoppe http://hhoppe.com/的论文从无组织点重建表面 http://hhoppe.com/proj/recon/可能包含您需要的信息,它是开源 https://rawgit.com/hhoppe/Mesh-processing-library/master/README.html.

最新的 Open3D 似乎包含表面重建算法,例如阿尔法形状 http://www.open3d.org/docs/latest/python_api/open3d.geometry.TriangleMesh.html#open3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape, 球旋转 http://www.open3d.org/docs/latest/python_api/open3d.geometry.TriangleMesh.html#open3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting and 泊松重建 http://www.open3d.org/docs/latest/python_api/open3d.geometry.TriangleMesh.html#open3d.geometry.TriangleMesh.create_from_point_cloud_poisson.


据我所知,行进立方体 https://en.wikipedia.org/wiki/Marching_cubes通常用于从三维离散标量场(这就是体积的意思)中提取等值面的多边形网格。该算法不适用于原始点云数据。

Hoppe 算法的工作原理是首先生成带符号的距离函数场(SDF 体积),然后将其传递给行进立方体。这可以看作是你的一个实现pcd_to_volume而且这不是唯一的方法!

如果你只有原始点云,那么情况就有点受限了。正如您可能看到的,泊松重建 http://hhoppe.com/proj/poissonrecon/ and 筛选泊松重建 http://hhoppe.com/proj/screenedpoisson/算法都实现pcd_to_volume以他们自己的方式(他们高度相关)。然而,它们需要额外的点法线信息,并且法线必须一致定向。 (为了保持一致的方向,您可以阅读这个问题 https://stackoverflow.com/q/60346126/7413964).

虽然有些Delaunay https://en.wikipedia.org/wiki/Delaunay_triangulation基于算法(他们不使用行进立方体) 像 alphaShape 和this https://doc.cgal.org/latest/Advancing_front_surface_reconstruction/index.html可能不需要点法线作为输入,对于复杂拓扑的曲面,由于方向问题很难得到满意的结果。还有图割法 https://ieeexplore.ieee.org/abstract/document/4408892/可以使用可见性信息来解决这个问题。


话虽如此,如果您的数据来自深度图像,您通常会获得可见性信息。你可以使用TSDF https://dl.acm.org/doi/10.1145/237170.237269建立良好的表面网格。 Open3D有已经实施了 http://www.open3d.org/docs/release/tutorial/reconstruction_system/integrate_scene.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python 3中使用行进立方体进行点云三角测量 的相关文章

  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 如何在 Python 中将 pdf 文件附加到 MIME 电子邮件?

    我正在制作一个自动邮件发送程序 Python 3 6 1 用于电子邮件营销 我在附加 PDF 文件时遇到问题 邮件中的 PDF 文件的文件名和页数是正确的 但 PDF 文件始终为空白 并且其大小增加 我尝试了三种不同的方法 其他两种方法不起
  • 小组芹菜链任务

    shared task def process record x return 1 2 4 4 5 6 shared task def add pro id return pro id 10 shared task def dmap it
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 如何使用 open with 语句打开文件

    我正在研究如何在 Python 中进行文件输入和输出 我编写了以下代码 将一个文件中的名称列表 每行一个 读取到另一个文件中 同时根据文件中的名称检查名称并将文本附加到文件中出现的位置 该代码有效 可以做得更好吗 我想用with open
  • 创建 matplotlib 注释后如何移动它们?

    我有以下代码来使用生成箭头ax annotate import numpy as np import matplotlib pyplot as plt fig ax plt subplots t np arange 0 0 5 0 0 01
  • Python/curve_fit:无法通过初始化猜测传递数组

    我有这个函数来计算某种多项式 def pipoly df pj n np size pj p pj 0 for j in range 1 n p pj j df j return p pj应该是一个包含多项式系数的初始猜测的数组 因此 多项
  • 如何修复下载 spacy 模型的“无效语法”

    我尝试在 Jupyter 笔记本上下载 spacy 模型 但它打印出 无效语法 python m spacy download en core web sm 有什么解决方案可以帮助我成功下载模型吗 为了将来帮助某人 对我来说 这个问题是因为
  • 测试从常规函数调用 python 协程(async def)

    假设我有一些异步协程 它可以获取一些数据并返回它 像这样 async def fetch data args result await some io return result 基本上 这个协程是从协程链中调用的 初始协程是通过创建任务来
  • 使用 matplotlib 在 python3 中对多个形状进行动画处理

    尝试在 python3 中使用 matplotlib 动画函数同时对多个对象进行动画处理 下面写的代码是我到目前为止的位置 我能够创建多个对象并将它们显示在图中 我通过使用包含矩形补丁函数的 for 循环来完成此操作 从这里开始 我希望通过
  • 从由空格分隔的单个输入整数列表创建二维数组

    我正在解决一些问题geeksforgeeks我遇到了一个特定的问题 其中在测试用例中提供了输入 如下所示 2 2 denotes row column of the matrix 1 0 0 0 all the elements of th
  • Django 多个外键,相同的相关名称

    我想创建一个模型 1 其中具有相同其他模型 2 的多个外键 我希望这些外键具有相同的related name因为每个外键将指向 model 2 的不同实例 因为我需要所有外键的一个反向关系 也许一个例子会更明确 class Parent M
  • 尽管遵循安装说明,Beaker 仍无法找到 Python 和 Julia 安装

    我最近安装了 Beaker Notebook 但无法启动 Python 我已经安装了 Python 它是使用 Anaconda 安装的 实际上推荐用于 Beaker 我已经编辑过beaker pref json指向我的安装 见下文 但它无法
  • python 3中pickle和_pickle有什么区别?

    我是 python 新手 想要实现fast对象序列化 我尝试使用json 但是太慢了 也尝试使用marshall模块 但是marshall序列化的对象的大小比pickle大6 7倍 所以我决定在我的项目中使用pickle 我读到了有关 cP
  • 使用 importlib 加载已编译的模块

    从 Python 3 4 开始 模块 imp 已被弃用 使得imp load compiled modname modpath 不鼓励的加载字节码的机制 有没有一种简单的方法可以使用 importlib 加载已编译的模块 我正在向学生提供一
  • 如何编写嵌套的 __init__.py 文件

    我正在努力解决嵌套问题 init py在我正在编写的Python包中 该包具有以下架构 module init py submodule1 init py source py submodule2 init py source py sub
  • Python 中维基百科 API 中的 DisambiguationError 和 GuessedAtParserWarning

    我想获得维基百科与搜索词相关的可能且可接受的名称列表 在这种情况下是 电晕 当输入以下内容时 print wikipedia summary Corona 这给出了以下输出 home virej local lib python3 8 si

随机推荐