Создание 3D модели по фотоснимкам. Python Photogrammetry Toolbox на Ubuntu 14.04.

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

Фотограмметрия занимается определением формы, размеров, положения и иных характеристик объектов по их фотоизображениям. Существует два основных направления в фотограмметрии: создание карт и планов Земли (и других космических объектов) по снимкам (фототопография), и решение прикладных задач в архитектуре, строительстве, медицине, криминалистике и.т.д. (наземная, прикладная фотограмметрия).

На данный момент существует множество программного обеспечения позволяющего выполнять фотограмметрию, практически в автоматическом режиме.
Мое внимание привлекла программа Agisoft Photoscan, использованная для построения трехмерной модели Кронштадтского морского Собора, созданной по результатам аэрофотосъемки с БПЛА коптерного типа Геоскан 401.

Во всех подобных Agisoft PhotoScan программах реализована технология создания трехмерных моделей высокого качества на основе цифровых фотографий, снятых любыми цифровыми фотокамерами с любых ракурсов, при условии, что каждый элемент реконструируемой сцены виден по крайней мере с двух позиций съемки.
Но программа стоит денежек и немалых.
Поиск инфы в сети по этому вопросу дал понимание, что для создания качественных объёмных моделей есть бесплатная связка программ: Bundler, CMVS и PMVS2, но эти программы являются консольными из-за чего очень неудобно разбираться, как они работают. Для простоты работы с ними был разработан графический интерфейс Python Photogrammetry Toolbox GUI (далее PPT).
Вот с ним и поэкспериментируем.
Знакомство возможностями Python Photogrammetry Toolbox GUI (PPT), скачать который можно здесь, проходило на моем домашнем компьютере с, мягко сказать, слабоватыми для этого характеристиками.
 Для работы с Аgisoft, например, разработчиком предлагается:
Для создания качественной 3D модели необходимы снимки хорошего качества. Для ознакомления с возможностями PPT качественные снимки можно позаимствовать тут, так же установить Meshlab (есть в Центре приложений Ubuntu). 

Мне же хотелось убедиться в качестве трехмерного слепка, полученного путем обработки снимков, сделанных моим Sony Nex-C3. Объектом была выбрана игрушка матрешка.
Отснято 8 снимков в режиме автоматического выбора диафрагмы и выдержки со вспышкой.

1. Создаем папку, куда сливаем наши снимки. Кириллица в названиях файлов и папки приводит к проблемам.
2.Запускаем программу.
3.Далее вкладка Check Camera Database пункт Select photos path и указываем путь к папке с фотографиями объекта. После жмем Run.
Далее в окне Терминала программа запросит значение фокусного расстояния для используемого объектива и типа фотоаппарата. В моем случае это 24 мм.

4.Переходим на вкладку Run Bundler, пункт Select photos path и указываем путь к папке с фотографиями объекта.

В поле Select feature extractor выбираем алгоритм автоматического поиска общих точек на фотографиях. Оставляем siftvlfeat, ибо это алгоритм с GPL лицензией и свободно может использоваться.

Выбираем предварительный скейл-фактор фотографий.
Чем меньше разрешение исходных фото, тем быстрее будут происходить вычисления, но будет хуже качество.
1 - это 100% размер исходой фотографии, 0.5 - это 50%, 0.25 - это 25%.
Я оставил 100%, что сделало обработку 8 снимков при таких характеристиках компа весьма продолжительной, порядка 6 минут на снимок.

Жмем Run и процесс пошел.
По завершению обработки, программа укажет путь к папке с полученными промежуточными результатам облака точек и откроет ее.
Путь к папке нужно запомнить, а лучше скопировать. Он нам еще пригодится.
Ради интереса, можно открыть каталог Bundle и увидеть PLY-файлы, которые можно просмотреть в  программе Meshlab. Как видно, результаты действительно промежуточные.
5. Переходим во вкладку Run CMVS/PMVS -> Select Bundler Output Path и указываем на папку, созданную на предшествующим этапе.
В Number of photos in each cluster указываем сколько фотографий будет использовать алгоритм для создания облака точек в пространстве.
Так, в случае если всего фотографий было 28, и в этом поле поставить число 10, то в результате будет создано 3 файла с облаком точек (PLY-файлы). Чем больше число, тем мощнее требуется процессор для вычислений. Минус большого количества PLY файлов на выходе в том, что их придется потом все равно объединять в один общий файл облака точек. В моем случае, при 8 снимках можно было указать и - 10.

Обработка пошла...
И успешно закончилась созданием папки PMVS,
внутри которой в папке Models и хранится PLY-файл с облаком точек нашего объекта. Посмотреть которое мы сможем в MeshLab.
Так как результаты обработки сохранены программой по умолчанию во временной папке Tmp, то папку Models лучше перенести в папку, где размещены снимки объекта.

6. Запускаем MeshLab и открываем полученный PLY-файл из папки Models. Любуемся облаком точек.
Еще результат обработки снимков позаимствованных в сети:

Далее следует восстановление поверхности и обработка облака точек в программе MeshLab. Об этом в следующий раз.

Комментарии

Популярные сообщения из этого блога

Вариант прошивки полетного контроллера SP Racing F3 через stm32flash

Создание 3D модели голени по фотоснимкам. Часть 2. VisualSFM+MeshLab.