Как стать автором
Обновить

Хитрости работы с MeshLab: устранение ошибок в 3D моделях

Время на прочтение 3 мин
Количество просмотров 9.4K

MeshLab является довольно популярной программой для манипуляции и визуализации трехмерных моделей, предоставляющий широкий набор инструментов. Он среди прочего предоставляет возможности по восстановлению и устранению проблем и ошибок в 3D моделях. О некоторых таких возможностях я бы хотел рассказать в статье. Кого заинтересовало, прошу под кат.

Довольно популярной проблемой при работе с 3D моделями является возникновение отверстий (holes, gaps). Такие проблемы возникают из-за несовершенной процедуры реконструкции сцены или недостаточной точности и качества 3D камер типа Microsoft Kinect.

Мы можем восстановить поврежденные поверхности моделей и закрыть дыры в программе Meshlab. Meshlab включает специальный фильтр для задачи закрытия отверстий в 3D моделях.

В начале откроем Meshlab и импортируем модель: File > Import Mesh.

Здесь показан пример модели с отверстием:

Применим фильтр. Откроем в верхнем меню Filters > Remeshing, Simplification … > Close Holes

Откроется диалог настройки параметров:

Введем значение для параметра Max size to be closed и нажмем Apply. В моем случае хороший результат дало значение 210.

Результат применения фильтра:

Выглядит неплохо, не правда ли?

Как мы видим не нужно писать специальный скрипт для закрытия отверстий. Все работает "из коробки".

Решение проблемы с дубликат вершины в модели

После применения фильтра Close Holes при экспорте модели в obj файл могут возникнуть вершины-дубликаты, т.е. вершины с одинаковыми координатами. Это может привести к некорректной обработке модели при использовании библиотек типа OpenMesh.

Давайте создадим obj файл со следующим содержимым:

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
f 0 1 2
f 1 2 3

Создадим скрипт test_duplicates.py с использованием библиотеки OpenMesh (туториалы по ней можно посмотреть здесь)

import openmesh as om 
import numpy as np
mesh_3 = om.read_trimesh('duplicate_vert_test.obj')
print('Test duplicate vertices')
for i, vh in enumerate(mesh_3.vertices()):
    print('Vertices adjacent to vertex ', i)
    for vh_n in mesh_3.vv(vh):
        print(vh_n.idx())

Запустим его

Vertices adjacent to vertex  0
2
1
Vertices adjacent to vertex  1
0
2
Vertices adjacent to vertex  2
1
0
Vertices adjacent to vertex  3
Vertices adjacent to vertex  4

Добавим дубликат вершины

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
v 1 0 0
f 0 1 2
f 4 2 3

Здесь мы добавили еще одну вершину с координатами 1 0 0.

Запустим скрипт еще раз

Vertices adjacent to vertex  0
Vertices adjacent to vertex  1
3
2
Vertices adjacent to vertex  2
1
3
Vertices adjacent to vertex  3
2
1
Vertices adjacent to vertex  4

Сейчас мы видим, что для вершины 0 нет соседних вершин, зато для вершины 3 появились две соседние вершины 2 и 1. Кажется, что вершина 4 перетянула к себе всех соседей вершины 0, с которой имеет одинаковые координаты.

Попробуем удалить дубликаты вершин на модели из примера выше. Импортируем модель:

Здесь мы видим множество цветных граней.

Применим специальный фильтр для удаления дубликатов вершин

Filters -> Cleaning and Repairing -> Remove duplicate Vertices

Результат применения фильтра:

Если мы применим фильтр на нашей первоначальной простой модели после экспорта модели мы получим obj файл следующего содержания

vn 0.000000 -nan(ind) 0.000000
v 0.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.570796
v 1.000000 1.000000 0.000000
# 4 vertices, 0 vertices normals
f 4//4 2//2 3//3
# 1 faces, 0 coords texture

На этом все. Удачи в использовании MeshLab для манипуляции с 3D моделями и до новых встреч.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
0
Комментарии 0
Комментарии Комментировать

Публикации

Истории

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн