Доступная фотограмметрия

История

История фотограмметрии насчитывает то ли 150 то ли 250 лет в зависимости от того с какого момента начинается отсчет. В Википедии точка отсчета зависит от языка. Самая длинная история в испанском варианте, однако некоторые важные, на мой взгляд моменты в ней отсутствуют.  Поэтому я выбрал реперные точки из всех доступных источников.

Итак, в 1767 году Мориц Антон Каппллер ( Moritz Anton Cappeller) по двум рисункам горы Пилатус восстановил ее форму с очень высокой точностью. Следующей реперной точкой отмечу 1849 год, когда уже появилась фотография и французский офицер Эме Лосседа (Aimé Laussedat ) по снимкам фасада Дома инвалидов восстановил его форму и опубликовал своей работе Метрофотография в 1851 году. Немецкий архитектор Альбрехт Мейденбауэр (Albrecht Meydenbauer)  опубликовал свой фотограмметрический метод измерения зданий в 1858 году, он же и дал название фотограмметрия в статье 1867 года.

Следующий ключевой фигурой является Феликс Турнашон (Félix Tournachon), более известный как Надар, который в восьмидесятых годах XIX века поднялся на воздушном шаре, чтобы сфотографировать Париж и многие другие города. Он же делал  снимки со всех сторон от объекта, что позволяет сегодня получить вполне  современную круговую анимацию. Следующей точкой, которую следует отметить, является 1896 год, когда Эдуард Гастон Даниель Девиль (Édouard-Gaston Daniel Deville)  изобрел стереопланиграф. Оптико-механические приборы определяют развитие фотограмметрии фактически в течение всего XX века. Сначала это так называемая аналоговая фотограмметрия, потом, когда к оптико-механическим прибором добавили вычислительные машины, стали называть аналитической фотограмметрией. На рубеже  XXI века появляется цифровая фотография и, соответственно, цифровая фотограмметрия.

Фотограмметрия XIX века сегодня доступна всем, другой вопрос, что мало кому хватит терпение довести работу до конечного результата. Фотограмметрия XX века требует наличия оптико-механических приборов, которые придется искать сегодня уже в музеях, поэтому о доступности сегодня стоит говорить только для цифровой фотограмметрии.

Цифровая фотограмметрия

Аппаратно цифровая фотограмметрия состоит из камеры или камер которыми снимается объект и компьютера, на котором рассчитывается 3D модель. В зависимости от объекта,  с которым мы работаем, пожелания к камерам могут различаться, однако, в большинстве случаев это будут всего лишь пожелания, а не требования. Даже самая простая из них позволит решить задачу, возможно, с меньшей точностью, чем оптимальная, или потребует большего количества снимков. Аналогично дополнительная информация о месте размещения камеры способна ускорить процесс, но не обязательна, так как современные вычислительные мощности позволяют по снимкам вычислить координаты камер. Использование нескольких жестко связанных камер упрощает вычисления и ускоряет процесс.

Таким образом, доступность будет определяться компьютером и наличием программ для него. Безусловно доступными можно считать программы с открытым исходным кодом. Доступным компьютером  считаем тот, который можно себе позволить. Иногда есть возможность воспользоваться мощным компьютером по сети, однако его доступность является величиной неопределенной. Будем считать, что нам доступны для скачивания  программы и документация, а при работе  мы сетью пользоваться не можем.  У меня два компьютера: один ноутбук достаточно старый, но с неплохим для своего времени процессором i5 2450m, другой настольный c i5 11400F и GPU NVIDIA GeForce GTX 1650. С учетом числа ядер 2 против 6 и максимальной тактовой частоты можно ожидать 4-х кратное преимущество настольного компьютера без учета вклада в вычисления графического процессора. На обоих компьютерах установлена операционная система manjaro linux. Я обнаружил три программы с графическим интерфейсом,  которые удалось установить на настольный компьютер, а две из них удалось установить и на ноутбук.

Программы

Meshroom - которая является графическим интерфейсом для AliceVision и обязательным требованием наличия GPU NVIDIA.
COLMAP - которая имеет возможность отключить использование GPU. Возможна совместная работа с  OpenMVS (Multi-View Stereo), которая в свою очередь поддерживает работу как с графическим процессором  так и без.
MicMac с графическим интерфейсом AperoDeDenis работающая без использования GPU. Программа с открытым исходным кодом разработанная Французским национальным географическим институтом, вероятно, не стесненный быстродействием доступных ЭВМ.

Установка программ.

Все три есть в  AUR, но устанавливалась без проблем только COLMAP, после последнего обновления manjaro linux  стало возможным собрать из исходников только вариант без поддержки CUDA, что сделало обязательным использование OpenMVS для  построения полигональной сетки и ее текстурирования, как с использованием GPU так и без. Причем для компиляции с опцией в файле CMakeLists.txt: option(CUDA_ENABLED "Whether to enable CUDA, if available" OFF ) на ноутбуке без  GPU NVIDIA все равно требуется наличие установленного пакета CUDA.  Скомпилированный вариант  Meshroom целесообразно брать с сайта авторов - все сразу работает после распаковки архива и без установки. Со сборкой из исходных данных есть проблемы. Сборка MicMac проходит только с командой cmake -DWERROR=OFF. Возможно, какой то из 62 модулей этой программы собирается не корректно, но в целом программа работоспособна. Это решение я нашел в сети и полагаю, что остальные им тоже удовлетворены.

У этих программ есть режим автоматической реконструкции. В этом режиме можно предложить в программе серию фотографий и дождаться результата, то есть 3D модели. Сравнивать компьютеры можно достаточно объективно, а вот с программами всё не так просто, поскольку по умолчанию  качество максимально скоростной обработки них весьма разное. Обработку можно разделить на два больших этапа. Поиск совпадающих точек на снимках и вычисления положения камер и самих точек в пространстве. Второй этап  -  построение полигональной сетки и ее текстурирование. Оказалось, что иногда целесообразно использовать для этих этапов разные программы, даже в тех случаях, когда все можно попытаться сделать одной.  Графические интерфейсы выше названных программ создают скрипты, запускающие отдельные модули, поэтому не сложно привлечь для финальных операций сторонние модули. В данном случае оказалось полезным использование OpenMVS. Плюсом Meshroom и  COLMAP+OpenMVS является и то, что финальный результат получается в формате obj (формат от Wavefront Technologies), который можно сразу редактировать в Blender, а не в формате ply (Polygon File Format ), как в случае COLMAP с CUDA и MicMac.

Краткое описание настроек и порядка работы с программам

Meshroom

Meshroom

Работу с программой я подробно описывал в предыдущих статьях 1 и 2. Отмечу только, что может быть полезно в пункте FeatureExtraction пометить Describer Types sift и akaze. Далее запускаем на выполнение через меню, открываемое правой кнопкой мыши StructureFromMotion. Если все снимки учтены, то в Meshing выбираем Custom Bounding Box, выделяем его и запускаем на выполнение. Если все прошло удачно, то переходим к текстурированию. Здесь можно существенно уменьшить размер файла, но поскольку ретушь все равно неизбежна, то можно отложить это на Blender.

COLMAP+OpenMVS

COLMAP

colmap

Можно запустить Automatic reconstruction, заполнить поля Workspace folder и Image folder, поставить галочку в графе Dense model  и выбрать качество. Если выбрать минимальное качество, то велика вероятность, что программа не нейдет совпадающих точек на фотографиях.

colmap

Болше возможностей настройки и более точный результат получится если начать с меню File и выбрать New project и задать имя базы и папку с фотографиями.

colmap

Далее запускаем Processing/Feature extraction и при отсутствии GPU снимаем галочку и затем  Processing/Feature matching.

colmapcolmap

После этого можно проконтролировать найденные точки.
colmap
И запускаем Start reconstruction.

colmap
После этого в меню Dense reconstruction выбираем папку с фотографиями и запускаем Undistortion.

colmap
На этом работа с Colmap завершается поскольку остальные пункты требуют программу, скомпилированную с поддержкой CUDA.

colmap

OpenMVS

В случае использования CUDA помещаем нижеприведенный скрипт в в папку с фотографиями и результатами работы  COLMAP и запускаем. В случае, если мы начали с Automatic reconstruction, то скрипт помещаем в вложенную папку /dense/0/.

#!/bin/bash
# Get current directory path.
current_dir=$PWD
# Store the current directory name for object output.
dir_name=${PWD##*/}
# Set openMVS directory.
openmvs_dir=/usr/local/bin/OpenMVS

$openmvs_dir/InterfaceCOLMAP -i $PWD
$openmvs_dir/DensifyPointCloud scene.mvs
$openmvs_dir/ReconstructMesh scene_dense.mvs
$openmvs_dir/TextureMesh --export-type obj -o $dir_name.obj scene_dense_mesh.mvs

При отсутствии CUDA скрипт будет выглядеть так:

#!/bin/bash
# Get current directory path.
current_dir=$PWD
# Store the current directory name for object output.
dir_name=${PWD##*/}
# Set openMVS directory.
openmvs_dir=/usr/local/bin/OpenMVS

$openmvs_dir/InterfaceCOLMAP -i $PWD
$openmvs_dir/DensifyPointCloud --cuda-device -2 scene.mvs
$openmvs_dir/ReconstructMesh --cuda-device -2 scene_dense.mvs
$openmvs_dir/TextureMesh --cuda-device -2 --export-type obj -o $dir_name.obj scene_dense_mesh.mvs

MicMac

Создаем новый проект, выбираем в пункте меню MicMac/options метод построения полигональной сетки и ее текстурирования. При отсутствии русского я выбрал родной для авторов французский. Английский, впрочем, тоже есть.

micmac


MicMac

Запускаем обработку MicMac/Lancer MicMac. При необходимости проверяем найденные контрольные точки.

MicMac

Просматриваем результат в программе MeshLab или CloudCompare/

MeshLab

Время необходимое для создания модели

Время оценивалось по скорости обработки  четырех тестовых снимков из примеров к программе  MicMac. Все программы дали визуально одинаковый хороший результат, однако плотность сетки существенно различалась, что сказалось на времени выполнения расчетов. Поэтому в таблицу добавлен столбец с количеством получившихся вершин.


i5 11400
i5 2450m
Вершины
Meshroom (Default)
26 с

19714
Meshroom
(Meshing angleFactor=0, simFactor=0)
56 с

65104
COLMAP+OpenMVS CUDA ON
(Automatic reconstruction Medium)
16 с

88818
COLMAP+OpenMVS CUDA ON
(Automatic reconstruction High)
38 с

156983
COLMAP+OpenMVS CUDA ON
(Automatic reconstruction Extreme)
50 с

160160
COLMAP+OpenMVS CUDA ON
35 c

155150
COLMAP+OpenMVS CUDA OFF
37 c
110 c
155150
MicMac C3DC
12 c
38 c
2423
MicMac MALT
50 c
127 c
210617

Для четырех снимков двенадцать потоков вычисления достаточно, чтобы использование CUDA не дало существенного выигрыша. При увеличении числа снимков это становится заметно, как за счет недостатка параллельных потоков вычисления , так и из за падения частоты, вызванного  перегревом. Длительная 100% загрузка всех 12 потоков приводит к падению частоты с 4200 МГц до 4000 МГц  на i5 11400F при температуре 95 градусов. Медный радиатор и 2 вентилятора моей системы охлаждения отводят примерно 120 Вт. Со штатным  охлаждением на 65 Вт ситуация была бы существенно хуже. С ноутбуком ожидаемый проигрыш в 4 раза, однако при малом количестве снимков он чуть меньше, а при большом больше. В том числе и за счет расхода оперативной памяти, для увеличения которой приходится подключать файл подкачки, что существенно замедляет процесс.

При построении моделей бюстов великих ученых с аллеи МГУ Meshroom и  COLMAP+OpenMVS при счете на  i5 11400F и GPU NVIDIA GeForce GTX 1650 дали за разумное время модели, которые после минимальной ретуши в Blender удалось качественно представить в интернете и отпечатать на 3D принтере. Обработка программами COLMAP+OpenMVS CUDA-ON 54 снимков заняла  41 минуту, из которых 31 минута это счет OpenMVS. Несмотря на то что программа скомпилирована с (CUDA_ENABLED "Whether to enable CUDA, if available" OFF ), она  использует GPU, и если в Processing/Feature extraction и Processing/Feature matching/ снять галочку в use_gpu, то время обработки увеличится с 10 до 16 минут. OpenMVS без CUDA увеличил время счета с 31 минуты до 53. Размер файла превышает гигабайт и необходима оптимизация, например, с помощью программы MeshLab и ретушь в Blender. С Meshroom на эту задачу потребовалось 49 минут при внешне с практически идентичным качеством. При этом сетка была значительно лучше отфильтрована и файл был 160 МБ, а вот файлы с текстурами  были в два раза больше.  Т.е. количество вершин отнюдь не пропорционально качеству модели. Здесь отмечу, что я специально не включил в свой скрипт команду OpenMVS /RefineMesh --resolution-level 1, которая, на мой взгляд, уменьшая размер файла, сильно портит внешний вид. Вероятно, можно подобрать более удачное значение параметра, но мне удобнее делать это в MeshLab, визуально контролируя степень сжатия и удаление лишних деталей. Таким образом, если бы я включил  RefineMesh, то время и размер файлов у COLMAP+OpenMVS CUDA ON и Meshroom было бы практически одинаковым. А применительно к этому бюсту я не могу сказать,  результат работы какой программы мне понравился больше.  С MicMac терпение у меня лопнуло после нескольких многочасовых попыток получить модель именно бюста, а не всех окружающих зданий. Хотя судя по получившимся удачно фрагментам, добиться результата можно. Считать модели бюстов на i5 2450m я не пытался, хотя, вероятно, COLMAP+OpenMVS позволит несмотря на перегрев и падение частоты процессора получить в течение жизни результат. Расчетное время для 54 снимков  70*4=4часа 40 минут. Если из-за перегрева частота упадет до минимума, то более 7 часов.   MicMac поднимает температуру еще быстрее, поэтому ноутбук может и не дожить до результата.

Представление моделей.

В ХХ веке фотограмметрия в основном решала задачи картографирования рельефа. Четыре фотографии макета вулкана, на которых тестировалась скорость программ, представляют собой вполне реальную задачу, сопоставимую с анализом аэрофотоснимков этого вулкана, сделанных с квадракоптера. Однако, сегодня фотограмметрия может справиться и с детальной реконструкцией, например, скульптур. Чтобы показать достаточность этих программ для решения задач сканирования объектов, были сфотографированы камерой Sony NEX-5 бюсты ученых на аллее перед главным зданием МГУ. Для съемки с верхней точки использовалась штанга длиной 1,8 м и пульт дистанционного управления. Результат был сильно упрощен для уменьшения размера файла до 5 МБ. Детально рассмотреть бюст Лобачевского со всех сторон  можно,  щелкнув по картинке ниже с помощью программы model-viewer.

Лобачевский

О представлении моделей в интернете я писал в статье Отложенный выбор ракурса съемки.  Упрощение сетки  проводилось в программе Blender.

Blender

Импортируем файл.obj с моделью в Blender. Переходим в Edit Mode, открываем закладку 3D-Print запускаем Check All. Нажимаем Make Manfold и повторяем проверки, нажав снова кнопку Check All. Нажав на Zero Faces, выделяем мелкие грани (нулевыми здесь считаются грани меньшие некого размера). Выбираем в меню Mesh/Clean Up/Decimate Geometry. В появившемся меню настроек выбираем Ratio меньшее единицы. В результате мелкие грани становятся визуально различимыми. Однако у нас изначально есть места с огромными гранями, которые мы собираемся ретушировать. Их надо выделить и командой Subdivide, доступной из меню, открываемого правой кнопкой мыши. Делим, пока размер граней не станет сравним с окружающими. После этого переходим в режим Sculpting и правим дефекты. Следующая ретушь касается текстур. Поэтому переходим в режим UV Editing, выделяем большую грань, которая образовалась при выполнении команды Make Manfold, правой кнопкой мыши открываем меню UV Unwrap Faces/Unwrap. В левом окне получаем прекцию на плоскость картинки. Выделяем ее, уменьшаем и смещаем на свободное место. После этого переходим в режим Texture Paint. Красим или клонируем проблемные места на текстуре. Сохраняем картинку с обновленной текстурой. В завершение нам надо экспортировать модель формате glTF Binary (.glb) для представления в интернете и в формате STL для последующего резания на слои  и печати.

Для оценки качества моделей они были отпечатаны на 3D принтере. 

Cura

Разрезание на слои проводилось в программе Cura 4.13 в Special Modes Spiralize Outer Contour соплом диаметром 1мм с толщиной слоя 0,15 мм с 5 слоями в основании. В последней версии Cura 5 добиться более одного слоя в основании в этом режиме не удалось. Время печати 10 см бюстика 2 часа. Результат на фото ниже.

фото

Заключение

Для многих реальных прикладных задач типа определения объема кучи с песком или  канавы достаточно и ноутбука, для задач сканирования и получения 3D модели пригодной  для печати или качественного просмотра на компьютере нужны большие вычислительные мощности. Это может быть многоядерный и многопроцессорный компьютер или компьютер с графическим процессором от NVIDIA ( если у вас графический процессор от AMD, то придется покупать программы сопоставимые по стоимости с графическим процессором). Минимальным для относительно комфортной работы компьютером, вероятно, является мой  i5 11400 16ГБ памяти и GPU NVIDIA GeForce GTX 1650, что с учетом бесплатной ОС и программ Meshroom и/или COLMAP+OpenMVS дает нам пороговую стоимость системного блока без монитора в 1000$. При наличии графической карты можно обойтись и более простым процессором, но это слабая экономия, а процессор, который скомпенсирует вам отсутствие графической карты, сделает систему еще более дорогой. И еще одно важное, на мой взгляд, замечание. Время создания сканирующих систем, призванных обеспечить сканирование за счет оптических систем подсветки и механических систем перемещения ради использования слабого по нынешним временам компьютера, прошло. Использование описанных мною ранее сканеров более не целесообразно. Можно разбирать на запчасти или отправлять в музей.  Имеющееся программное обеспечение с открытым исходным кодом обеспечивает результат с произвольной цифровой камерой. Создание специализированных аппаратных комплексов для сканирования имеет смысл для повышения скорости и качества, а не ради облегчения нагрузки на компьютер. Метки и проекция сетки останутся актуальными для сканирования объектов с идеально гладкой поверхностью, на которой невозможно найти контрольные точки. Многокамерные системы актуальны при необходимости сканировать движущиеся объекты.   

08.06.2022
Установите проигрыватель Flash

Облако тегов:
3D печать
Arduino
Raspberry Pi
Аэрофотосъемка
Байдарки
Геомеханика
История
Камеры
Макросъемка
Объективы
Освещение
Панорамы
Принадлежности
Принтеры
Программы
Сканеры
Стереосъемка
Фильтры
Фокусировка
Фотокубики
...
rss