Триангуляция облака точек с использованием марширующих кубов в Python 3 - PullRequest
1 голос
/ 20 июня 2019

Я работаю над системой трехмерной реконструкции и хочу сгенерировать треугольную сетку из зарегистрированных данных облака точек, используя Python 3. Мои объекты не выпуклые, поэтому алгоритм движущихся кубов, кажется, является решением.

Я предпочитаю использовать существующую реализацию такого метода, поэтому я попытался scikit-image и Open3d , но оба 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.

...