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 (туториалы по ней можно посмотреть здесь) Запустим его Добавим дубликат вершины 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. Запустим скрипт еще раз Сейчас мы видим, что для вершины 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 моделями и до новых встреч. инженер-программист направления computer vision