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