Все что нужно знать о фотограмметрии
Сравнение 7 систем фотограмметрии. Что лучше выбрать?
Приветствую, Хабр. Это моя первая попытка перевода статьи. Надеюсь, она будет полезна не только жителям хабра, но и археологам, на которых ориентирован оригинал статьи.
Когда я объясняю людям, что фотограмметрия аналогична процессу 3D-сканирования с фотографиями, мне всегда не доверяют, так как это кажется слишком фантастическим, чтобы быть правдой. Только представьте себе, сделать несколько снимков объекта, отправить их в алгоритм и получить текстурированную 3D модель. Вау!
После представления модели, второй вопрос, который задают – вопрос точности. Какова точность 3D-сканирования по фото? Ответ: субмиллиметровый диапазон. И снова я удивлен выражением недоверия. К счастью, наша команда написала научную статью об эксперименте, который показал среднее отклонение 0,78 мм, то есть меньше одного миллиметра по сравнению со сканированной 3D моделью, сделанной с помощью лазерного сканера.
Так же, как на рынке лазерных сканеров, в фотограмметрии есть много различных опций ПО для проверки. Они варьируются от собственных и закрытых решений, до открытых и бесплатных. И точно, среди такого рода программ и решений, приходит третий вопрос, до сих пор остающийся без ответа, по крайней мере официально: какое программное обеспечение фотограмметрии является лучшим?
На этот вопрос сложно ответить, потому что ответ во многом зависит от ситуации. Но думая об этом, среди многих подходов, которые я взял в течение долгого времени, я решил ответить так, чтобы дать простой и объёмный ответ.
Череп лорда Сипана
В июле 2016 года я поехал в Ламбаек, Перу, где я встретился лицом к лицу с черепом лорда Сипана. Анализируя его, я понял, что можно было бы восстановить его лицо с помощью судебно-медицинской техники реконструкции лица. Череп, однако, был сломан и искажен годами давления, которое он перенес в своей могиле, найденной полной в 1987, одной из больших археологических экспедиций во главе с доктором Вальтером Альва.
Чтобы восстановить череп, я сделал 120 фотографий на смартфон ASUS Zenphone 2 и с этими фотографиями, я возобновил работы по реконструкции. Параллельно этому процессу, профессиональный фотограф Raúl Martin из отдела маркетинга Inca University Garcilaso de la Vega (спонсор моей поездки) сделал 96 фотографий на камеру Canon EOS 60D. Из них я выбрал 46 изображений, чтобы продолжить эксперимент.
Специалист Министерства культуры Перу, начинает процесс оцифровки черепа (в центре)
Спустя день после фотографического обследование, перуанское Министерство культуры послало специалистов в области лазерного сканирования, для сканирования черепа лорда Сипана, с помощью оборудования Leica ScanStation C10. Окончательное облако точек было отправлено через 15 дней, то есть тогда, когда я получил данные от лазерного сканера, все модели, полученные с помощью фотограмметрии были готовы.
Нам пришлось ждать всё это время, так как модель, полученная с помощью оборудования является золотым стандартом, то есть, все сетки, полученные с помощью фотограмметрии будут сопоставляться, одна за другой, с ней.
Полное облако точек, импортированное в MeshLab после преобразования сделаного в CloudCompare
3D-сетка реконструированы из облака точек. Цвет вершины (выше) и поверхность только с одним цветом (ниже).
Как было отмечено выше, челюсть и поверхность стола, где были размещены части были также отсканированы. Часть, связанная с черепом, была изолирована и убрала для эксперимента, который будет выполнен. Я не буду иметь дело с этими деталями здесь, так как объем отличается. Я уже писал другие материалы, объясняющие, как удалить несущественные части облака точек / сетки.
Для сканирования с помощью фотограмметрии, были выбраны системы:
1) OpenMVG (Open Multiple View Geometry library) + OpenMVS (Open Multi-View Stereo reconstruction library): Разряженное облако точек рассчитывается в OpenMVG и плотное облако точек в OpenMVS.
2) OpenMVG + PMVS (Patch-based Multi-view Stereo Software): Разряженное облако точек рассчитывается в OpenMVG, а затем, плотное облако точек с помощью PMVS.
3) MVE (Multi-View Environment): Полная система фотограмметрии.
4) Agisoft Photoscan: Полная и закрытая система фотограмметрии.
5) Autodesk Recap 360: Полная система онлайн фотограмметрии.
6) Autodesk 123D Catch: Полная система онлайн фотограмметрии.
7) РРТ-GUI (Python Photogrammetry Toolbox с графическим интерфейсом пользователя): Разряженное облако точек генерируется Bundler, а позже PMVS создает плотное облако.
Выше у нас есть таблица, содержащая важные аспекты каждой из систем. В целом по крайней мере по-видимому, нет ни одной системы, которая выделяется намного больше, чем другие.
Генерация разряженного облака + генерация плотного облака + 3D сетка + текстуры, немного времени, чтобы загрузить фотографии и 3D сетки (в случаях с Recap 360 и 123D Catch).
Выравнивание на основе общих точек
Выровненные черепа
Все сетки были импортированы в Blender и совмещены с лазерным сканированием.
Присмотревшись, мы увидим, что результат согласуется с менее плотным результатом подразделений в сетке. Конечная цель сканирования, по крайней мере, в моей работе – получить сетку, которая согласуется с исходным объектом. Если эта сетка упрощается, так как она находится в гармонии с реальным объемным аспектом, это даже лучше, потому что, когда 3D-сетка имеет меньше граней, то она быстрее будет обработана при выпуске.
Если мы посмотрим на размеры файлов (.stl экспортированный без текстуры), что является хорошим показателем сравнения, мы увидим, что чистая сетка созданная в OpenMVG + OpenMVS, имеет размер 38.4 MB и Recap 360 всего 5,1 Мб!
После нескольких лет работы с фотограмметрией, я понял, что лучше всего делать, когда мы сталкиваемся с очень плотной сеткой, это упростить сетку, так что мы можем обрабатывать её в режиме реального времени. Трудно сказать, действительно это так или нет, поскольку это запатентованное и закрытое решение, но я полагаю, что Recap 360 и 123D Catch генерируют сложные сетки, но в конце процесса они значительно её упрощают, так что они работают на любом оборудовании (ПК и смартфоны), желательно с поддержкой WebGL (интерактивное 3D в интернет-браузере).
Вскоре мы вернемся к обсуждению этой ситуации, связанной с упрощением сеток, а теперь давайте сравним их.
Как работает сравнение 3D сеток
После того, как все черепа были очищены и приведены в соответствие с золотым стандартом (лазерного сканирования) пришло время сравнить сетки в CloudCompare. Но как работает технология сравнения 3D сеток?
Для иллюстрации я создал некоторые дидактические элементы. Давайте вернемся к ним.
Этот дидактические элемент имеет дело с двумя плоскостями с поверхностями нулевой толщины (это возможно в 3D моделировании), образуя X.
Тогда мы имеем объект А и объект B. В окончательной части обеих сторон концы плоскостей отстоят на миллиметры. Там, где существует пересечение, расстояние, конечно, 0 мм.
При сравнении двух сеток в CloudCompare они получаются пигментированными с цветовым спектром, который идет от синего до красного. На рисунке выше показаны два уже пигментированных плана, но мы должны помнить, что они представляют собой два различных элемента и сравнение производится в двух моментах, один по отношению к другому.
Теперь у нас есть четкое представление о том, как это работает. В основном то, что происходит, заключается в следующем: мы устанавливаем предел расстояния, в данном случае 5 мм. Сетка «из» старается быть пигментирована красным, а та, что «в» имеет тенденцию быть окрашенной синим и то, что находится на пересечении, то есть на той же линии, как правило, пигментировано в зеленый цвет.
Мы можем удалить части, выходящие за пределы визуализации, чтобы они не мешали нам.
Таким образом, в результате, в сетке имеется только процентная часть структуры
Для тех, кто понимает немного больше 3D моделировании, ясно, что сравнение производится по вершинам, а не граням. Из-за этого, у нас есть зазубренный край.
Сравнение черепов
OpenMVG+OpenMVS
OpenMVG+PMVS
Photoscan
MVE
Recap 360
123D Catch
PPT-GUI
Поставив в сравнении всё рядлм, мы видим, что существует сильная тенденция сведения ошибки к нулю. Все семь систем фотограмметрии эффективно совместились с лазерным сканированием!
Обратимся теперь к вопросу о размере файлов. Одна вещь, которая всегда беспокоила меня в сравнении с участием результатов фотограмметрии был учет полигонов, генерируемых алгоритмом реконструкции сетки. Как я уже говорил выше, это не имеет особого смысла, так как в случае черепа мы можем упростить поверхность и тем не менее она сохраняет информацию, необходимую для работы при проведении антропологического обследования и судебно-медицинской реконструкции лица.
В свете этого, я решил выровнять все файлы, оставляя их совместимы по размеру и полигонами. Чтобы сделать это, я взял за основу меньший размер файла, который генерирует 123D Catch и использовал фильтр MeshLab Quadratic Edge Collapse Detection до 25000. Это сделало 7 STL файлов размером 1,3 МБ каждый.
С помощью этого выравнивания мы имеем справедливое сравнение между системами фотограмметрии.
Выше мы можем визуализировать этапы работы. В Original положены черепа, выровненные изначально. Тогда в Compared мы наблюдаем черепа только областях, представляющих интерес и, наконец, в Decimated мы имеем черепа, выровненные по размеру. Для ничего не подозревающего читателя это, кажется, одно изображение, помещенное рядом.
Когда мы представляем себе сравнение в «твердой» модели, мы понимаем, как все они совместимы. Теперь давайте перейдем к выводам.
Выводы
Наиболее очевидный вывод заключается в том, что все программы, за исключением MVE, показали меньшие определения в сетке, и все системы фотограмметрии имели очень схожие визуальные результаты.
Означает ли это, что MVE уступает другим?
Нет, совсем наоборот. MVE является очень надежной и практичной системой. В другом варианте я представлю его использование в случае изготовления протеза с миллиметровым качеством. В дополнение к этому случаю он был также использован в других проектах, делающих протезирование, а это область, которая требует большой точности, и она была успешной. Кейс был даже опубликован на официальном сайте Darmstadt University, института, который разрабатывает его.
Какая система фотограмметрии является лучшей?
Очень трудно ответить на этот вопрос, потому что многое зависит от пользовательского стиля.
Какая система является лучшей для начинающих?
Несомненно, это Autodesk Recap 360. Это онлайн-платформа, которая может быть доступна из любой операционной системы, которая имеет интернет-браузер с поддержкой WebGL. Я уже опробовал непосредственно на смартфоне, и она работала. На курсах, которые я проводил о фотограмметрии, я использовал это решение все больше и больше, потому что студенты, как правило, понимают процесс гораздо быстрее, чем другие варианты.
Какая система является лучшей для моделирования и анимации для профессионалов?
Я хотел бы указать на Agisoft PhotoScan. Он имеет графический интерфейс, который позволяет, помимо прочего создавать маски в интересующей области для фотограмметрии, а также позволяет ограничить область расчета, что резко сокращает время обработки на машине. Кроме того, она экспортирует в самых разнообразных форматах, предлагая возможность показать, где были камеры во время фотографирования сцены.
Какая система Вам нравится больше всего?
Ну, лично я ценю все в определенных ситуациях. Моя любимая на сегодня смесь это OpenMVG + OpenMVS. Оба являются открытыми и могут быть доступны с помощью командной строки, что позволяет мне контролировать ряд свойств, регулируя процесс сканирования при необходимости, будь то реконструкция лица, черепа или любого другого куска. Хотя мне очень нравится это решение, у него есть некоторые проблемы, такие как не совмещение камер по отношению к моделям, когда редкие облака сцены импортируется в Blender. Чтобы решить эту проблему я использую РРТ-GUI, который генерирует разреженное облако из Bundler и соответствия, то есть выравнивает камеры по отношению к облаку более точно. Еще одной проблемой, связанной с OpenMVG + OpenMVS является то, что он в конечном итоге не создает полное плотное облако, даже если разреженные данные показывают, что все камеры выровнены. Чтобы решить эту проблему я использую PMVS, который, хотя и генерирует менее плотные сетки, чем OpenMVS, он очень надежен и работает практически во всех случаях. Еще одна проблема с вариантами на открытом исходном коде – необходимость компиляции программ. Все работает очень хорошо на моих компьютерах, но, когда я должен передать решения студентам или заинтересованным, это становится большой головной болью. Для конечного пользователя важно иметь программное обеспечение, в котором на одной стороне загружаются изображения, а с другой получается 3D модель и это предлагают запатентованные решения. Кроме того, лицензии полученных моделей понятнее в этих приложениях, и я чувствую себя безопаснее в области профессионального моделирования, чем, например, при использовании шаблонов, генерируемых в PhotoScan. Технически, вы платите за лицензию и можете генерировать шаблоны по своему желанию, используя их в своих работах. Так, что это решение подобно решениям от Autodesk.
Исследование фотограмметрии
Друзья, хочу поделиться опытом, который приобрел в процессе практического изучения дисциплины, как фотограмметрия. Буду рад, если кто-нибудь из вас выскажет свое мнение, поправит меня или укажет на ошибки, которые допустил. Возможно эта статья по изучению мною фотограмметрии поможет и будет полезна Вам. Моя работа описана на примере фотосъемки природы в городском парке, в Центральной полосе России, в период август–сентябрь 2017 г.
Итак, начнем с самого начала: прочитав и просмотрев определенное количество информации по данной тематике, я выбрал программу Agisoft PhotoScan, которая помогает получить 3d модели, текстурированные на основе исходных изображений. Взяв на вооружение инструкцию от Agisoft PhotoScan — по правильной фотосъемке, правил которой, нужно придерживаться, чтобы получить наилучший результат. Известно, что существует множество программ по данной тематике: Photoscan (Agisoft), 123D Catch (Autodesk), ReCap360 (Autodesk), Arch3D (Epoch project), Bundler/PMVS2, Apero/MicMac, 3DF Zephyr (3DFlow), Photomodeller scanner (EOS systems), Smart3D (Acute3D).
Следующий этап работы включает в себя настройки фотоаппарата, камеры, изображения и подготовку необходимого оборудования для съемки.
Этап съёмки
После нужной подготовки и выбрав благоприятный день, лучше всего подойдет облачная погода она самая благоприятная для фотосъемки, нам нужно нейтральное освещение, потому как при дальнейших действиях мы получим 3d модель c текстурой и выставим в нужное освещение, конечно можно и отснять объект в солнечную погоду — если вам нужна, только 3d модель и в данном случае текстуру можно будет поправить в Photoshop, но это дополнительные манипуляции, об этом способе напишу дальше.
Отправляемся в лесной парк или в то место где находится нужный нам объект. Итак, приехав на место съёмки, старался найти более интересные объекты с ярко выраженной фактурой. Природа создает по своей красоте и форме такие экземпляры с неповторимым колоритом, узором от которых невозможно оторвать взгляд, наша задача состоит в том, чтобы позаимствовать всё это великолепие и перенести в наш 3d мир. Приступим к фотосъемке.
Для осуществления процесса фотосъемки необходимо, снимая каждый последующий кадр обеспечить перекрытие между кадрами примерно 60%, именно эти 60% будут формировать нашу модель с текстурой. Разрешение желательно максимальное, какое может позволить ваш фотоаппарат, нужно обойти объект полностью, т.е. совершить обход 360% и сделать примерно 36 снимков на 1 круг, кругов съемки может быть несколько. Повторюсь, ни в коем случае не нужно зумить, если нужно зафиксировать какие-то детали, то нужно подойти ближе, присесть или прилечь, чтобы сделать нужный снимок. Если у объекта есть вогнутости и выпуклости, и съемка ведется только стоя и снизу объект не снимается, то тогда в некоторых местах, которые смотрят «нормалями» в землю и не попадают в кадр, в этих областях будут дыры на 3d модели и соответственно отсутствовать текстура, такие моменты мы поправим дальше в программах, но лучше этого избегать с самого начала. Должен заменить еще важный момент, стремитесь, чтобы не попадали веточки и трава в кадр, которые находятся возле корней и у основания нужных нам объектов, потому что в последующем эти объекты отпечатаются на нашей текстуре, и мы будем ее чистить, что в некоторых случаях неизбежно. Я нашел вот этот интересный пень.
Итак, сделав необходимое число снимков всех объектов, которые нам приглянулись наступил следующий этап.
Обработка фотографий и создание 3d модели
Многим известно, что есть программы по редактированию Raw форматов одни из них, CameraRaw и Lightroom, я остановился на Lightroom.
Далее импортируем все наши Raw снимки в Lightroom и совершаем следующие настройки. Highlights понижаем, а Shadows повышаем, убираем хроматическую аберрацию и искажение линзы. На основе настройки одной фотографии создаем Preset, чтобы в дальнейшем ускорить процесс обработки фотографий, их может быть разное количество от нескольких десятков до нескольких тысяч, в зависимости какая у вас задача и сколько у вас объектов съёмки.
Созданный нами Preset применяем к оставшимся фотографиям и экспортируем их в TIFF формат в соответствующую папку для каждого объекта отдельно и библиотеку данной категории, лучше всего организовать рабочий процесс, с самого начали, чтобы избежать последующего хаоса и потери нужных файлов, Raw файлы удаляем.
Добавляем фотографии
Открываем Agisoft PhotoScan и добавляем наши фотографии. Для достижения наилучших результатов, необходимо закрыть маской все второстепенные объекты на исходных фотографиях. Создаем маски вокруг объекта, маски можно создать разными путями в PhotoScan Lasso и потом добавить выделение или в Photoshop так же Lasso tool, но еще создать Actions, чтобы пропустить рутинный процесс создания маски, добавления ее в канал и сохранения файла. Если проводили съемки в студии и у вас был однородный фон, то вам нужно зайти в Tools / Import mask и применить метод From Background к выбранным камерам. Можно вообще обойтись без создания масок, но это усложнит процесс.
Выравнивание фотографий
На этом этапе PhotoScan определяет положение камер и строит разреженное облако точек на основании фотографий.
Если у нас созданы маски, то ставим галочку «Учитывать маски». После этого шага мы можем оценить качество наших фотографий и в появившемся окне выбираем все камеры.
Мы можем отфильтровать наши фотографии по качеству, я уже это сделал и вверху находятся самые плохие фотографии, но это не обязательно так как определяется качество размытости.
Алгоритм оценки качества изображения анализирует контраст между пикселями, когда есть много контраста, тогда изображение воспринимается как хорошие. Единственный способ убедиться, что все ваши изображения нормальные, визуально проверить их на 200% зума. Ужасно скучная работа. Самые плохие изображения те, которые сильно размыты, можно отключить.
Следующим действием выделяем наш объект инструментом Selection и нажимаем Crop и так чистим наш объект. Клавиша Space помогает нам переключаться между инструментами, например, выделение и навигацией.
Задание области построения
Откорректируем Box, в этом на поможет NumPad он дает возможность переключаться между камерами, перспективой и ортогональной проекцией.
Построение плотного облака точек
Основываясь на рассчитанных положениях камер, программа строит плотное облако точек. Качество: Ультравысокое (чем выше желаемое качество, тем больше времени и вычислительных ресурсов потребуется для завершения этапа).
Агрессивная (если реконструируемая сцена имеет сложную геометрию с многочисленными мелкими деталями или не текстурированными поверхностями, такими как крыши зданий, рекомендуется задать значение параметра Мягкая).
Вот что у нас получилось.
После небольшой чистки объекта инструментами выделения мы получаем вот такой результат.
Построение полигональной модели
Тип поверхности: Карта высот.
Исходные данные: Плотное облако.
Количество полигонов: Высокое (в скобках рядом со значением параметра
указано максимальное число полигонов в модели, которая будет построена.
Значения, предлагаемые программой, рассчитываются на основании данных
о количестве точек в плотном облаке).
Интерполяция: Включена (по умолчанию).
Вот наш результат 3d модели
Редактирование полученной геометрии
Выбираем Edit и нажимаем Gradual Selection, выделятся красным цветом все отдельные кусочки геометрии, которые нам нужно удалить.
После этого нам нужно закрыть все отверстия в нашем объекте, для этого выбираем Tools, Mesh, Close Holes.
Экспорт модели
Теперь экспортируем нашу модель в Zbrush для дальнейшего редактирования.
Создаем low-poly модель
Импортируем модель в Zbrush и дублируем,
применяем команду Zremesher и экспортируем в Maya.
Импортируем модель в Maya выполняем операцию Extrude и экспортируем обратно в Zbrush.
В Zbrush применяем операцию DynaMesh и Zremesher,
экспортируем в Maya и удаляем не нужные полигоны. Конечно можно сетку low- poly еще доводить ручками и сократить еще полигоны, но сейчас я этого делать не буду. Если у вас есть желание, то можете попробовать и написать о результате, все файлы я прикреплю к статье.
Экспортируем в UVLayout и создаем UV развертку.
Создаем текстуру цвета
Импортируем low-poly с готовой UV- разверткой в Zbrush и выполняем команду ProjectAll, dist. нужно повысить и с каждым разом понижать что бы не было артефактов, тут же в Zbrush запекаем Displacement map. Экспортируем полученную после Project High-poly.
Открываем PhotoScan и удаляем модель на ее место через меню Tools импортируем полученную High-poly модель.
После того как импортировали модель, создаем текстуру в формате Tif и экспортируем ее.
Открываем текстуру в Photoshop и Magic wand Tool нажимаем на участок где отсутствует текстура и на этом месте черное пятно.
Выбираем инструмент Lasso и в меню Edit выбираем команду Fill, заливка с учётом содержимого (Content-Aware Fill).
Вот что у нас получилось, буквально несколько секунд и текстура готова.
Конечно можно пойти другими способами, например, Stamp и ручками закрашивать все пробелы. Так же можно при помощи других программ, например, 3D – Coat, импортировать High-poly и текстуру цвета в и инструментом Stamp закрасить нужные места на текстуре, такие же манипуляции можно повторить и в Substance Painter, так же можно в Zbrush инструментом DraqRect, но это все долго и возможно в какой-то ситуации именно так и нужно будет пойти одним из этих путей.
Запекание и создание текстур
1. Запускаем Substance Painter, создаем новый проект, подгружаем low- poly с готовой UV- разверткой, после создания проекта переходим в меню TextureSet Settings и нажимаем Bake textures. В окне запекания убираем не нужные нам карты, подгружаем High-poly из PhotoScan. Запеченные карты будут автоматически вставлены в соответствующие слоты в настройках TextureSet.
2. Следующим этапом мы заменим нашу low- poly модель на High- poly. для того чтобы при генерации дополнительных текстур таких как specular, roughness и др. мы могли отчетливо просматривать нужную нам текстуру.
3. Генерируем нужные нам карты, так как текстурирование по каналам очень увлекательное занятие, вместе с различными фильтрами и очень гибкими генераторами, которые нам очень сильно помогут в этом и ускорят весь рабочий процесс получения нужных текстур. Например, создаём слой заливку (Add fill layers), заливаем нужным цветом или текстурой, отключаем все не нужные каналы, к слою заливка подключаем маску черную или белую, генераторы, фильтры, в общем творчество Вам в руки.
4. После получения нужного результата мы можем создать Smart materials, для того чтобы в последующем не повторять одни и те же действия, ведь мы стремимся облегчить и ускорить рабочий процесс, так как время — это ресурс который не вернуть и не купить.
5. Когда мы полностью довольны полученным результатом, можем экспортировать все нужные нам текстуры в различные рендеры/движки для дальнейшей визуализации. В Export document есть Config который нам поможет выбрать настройки экспорта текстур для дальнейшего места их применения.
Вот что у нас было и вот то что мы быстро и без особых усилий получили.
И так подведем итог, такая дисциплина как Фотограмметрия очень интересная, нужная и может помочь здорово ускорить рабочий процесс, в создании объектов окружении (деревья, растения, камни и т.д.), предметов интерьера (микрофон, музыкальная колонка, кресло и т.д.), органика (человек, черепаха и т.д.), ландшафт и строения и т.д. Применение Фотограмметрии очень широко!
Ну, что же, друзья процесс завершен. Открыт к Вашим вопросам в личку и общению в опыте работ.