Получение вектора координат из вектора индексов из облака точек

#python #data-structures #open3d

#python #структуры данных #open3d

Вопрос:

Я возился с open3d и дошел до того, что обнаружил, что у меня есть вектор, созданный из индекса каждой точки, которую я получил из поиска по радиусу, и это выглядит примерно так:

 [1500, 1497, 1509, 1503, 1499, 1555, 1557, ... , 1565]
 

Я хотел бы создать еще один вектор, созданный с координатами каждой точки в этом списке, зная, что я могу получить координату точек, выполнив это:

 pcd.points[index]
 

Конечный результат, которого я хотел бы достичь, выглядел бы примерно так:

 [[0.65234375 0.84686458 2.37890625],
 [0.65234375 0.83984375 2.38430572],
 [0.66737998 0.83984375 2.37890625],
 ...
 [2.00839925 2.39453125 1.88671875],
 [2.00390625 2.39488506 1.88671875],
 [2.00390625 2.39453125 1.88793314]]
 

Я знаю, что это может быть основным вопросом, но я пытался разобраться с этим в течение пары часов, и я обнаружил, что заблокирован.

Теперь, если кто-то хочет получить больше контекста, это код, который я использую прямо сейчас

 mesh = o3d.io.read_triangle_mesh("ModelNet10/chair/test/chair_0890.off")
pcd = o3d.geometry.TriangleMesh.sample_points_uniformly(mesh,5000)
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
[k, idx, _] = pcd_tree.search_radius_vector_3d(pcd.points[1500], 2)
 

Я хотел бы иметь возможность захватывать тот вектор, который поступает из поиска по радиусу, и иметь координаты каждой точки из этого поиска по радиусу в векторе, чтобы я мог с ним работать.

Комментарии:

1. Разве вы не можете просто сделать mypoints = pcd.points[idx] , где idx находится массив индексов, возвращаемых search_radius_vector_3d ?

Ответ №1:

После того, как я ударился головой о свой монитор, я обнаружил, что мой ответ был у меня перед глазами, но я был так упрям в его решении, что я даже не мог думать о том, что я не мог сказать.

Единственное, что мне нужно было сделать, это просто

 points = o3d.np.asarray(pcd.points)[idx[1:], :]
 

Так же, как я сделал для раскраски каждой точки.

Хотя мне удалось получить то, что я хотел, я хотел бы увидеть любые другие полезные ответы или фактический оптимальный ответ для продолжения обучения. Спасибо!