Проблема с чтением соседних вершин и граней для вершины в OpenMesh

У меня есть 3D-сетка реконструированной сцены с закрытыми отверстиями (областями с отсутствующей геометрией) в файле obj. Я использовал фильтр Close Holes в MeshLab для восстановления геометрии в областях отверстий.

введите здесь описание изображения

Эта сетка имеет 7728 вершин и 2864 грани. Для работы с геометрией сетки я использую библиотеку OpenMesh.

Я следую официальному руководству на привязках OpenMesh Python. Я использую методы mesh.vf() и mesh.vv() для получения соседних вершин и граней для каждой вершины. Удивительно, я получаю 6141 вершину без соседей - методы mesh.vf() и mesh.vv() возвращают пустые списки. Это странно, поскольку с помощью mesh.faces() получается 2864 лица.

Кроме того, я использовал следующий код для получения списка всех вершин сетки.

unique_vertices = []
all_vertices = []
print('Total number of faces: ', len(mesh.faces()))
for fh in mesh.faces():
    # print('face ', fh.idx())
    for vh in mesh.fv(fh):
        # print('vertex ', vh.idx())
        all_vertices.append(vh)
    # print('')

unique_vertices = list(set(all_vertices))

Этот код возвращает 8592 уникальных вершины.

Знаете ли вы, в чем может быть причина такого странного поведения OpenMesh API?


person user2976612    schedule 15.02.2021    source источник


Ответы (1)


8592 это 2864*3. Таким образом, ваш набор содержит 3 вершины для каждой грани. Я предполагаю, что разные объекты-дескрипторы, относящиеся к одной и той же вершине, не считаются равными в наборе. Вы пытались вставить vh.idx() в all_vertices?

Замкнутая треугольная сетка имеет примерно вдвое меньше вершин, чем граней. Таким образом, для вашей сетки можно ожидать примерно 2864/2 = 1432 вершины. Таким образом, мы ожидаем 6296 изолированных вершин на общее количество 7728 вершин. Поскольку ваша сетка не закрыта, ей требуется еще несколько вершин для 2864 треугольников, что оставляет вам только 6141 изолированную вершину.

person Max    schedule 16.02.2021