Обработка данных аэрофотосъемки средствами открытого пакета OpenDroneMap
Установка OpenDroneMap на виртуальную машину и расчёт базовых продуктов (ортофотоплан, ЦММ, 3D-модель) по данным аэрофотосъемки с использованием планово-высотного обоснования и без него
ПРО ПАМЯТЬ > 4Гб
В связи с бурным развитием как фотограмметрических технологий, так и индустрии простых в освоении БПЛА оснащенных фото/видео-аппаратурой, у специалистов самых разных профилей стал расти интерес к возможностям организации аэрофотосъемки и обработки получаемых данных для дальнейшей работы с географическими продуктами, такими как ортофотопланы, цифровые модели местности, трёхмерные модели. На рынке представлено большое количество решений как аппаратных (преимущественно БПЛА), так и программных. Программные продукты для фотограмметрической обработки данных стали разрабатывать практически все крупные вендоры (Autodesk, Trimble, ...), также появилось множество новых компаний, продвигающих собственные пакеты (Agisoft, Pix4D, DroneDeploy, ...). Параллельно начали развиваться и проекты с открытым исходным кодом. Установка и использование одного из наиболее удачных - OpenDroneMap - рассмотрено в представленной статье.
С учётом доступности дешевых, простых в освоении и эффективных для многих задач БПЛА (см. статью), наличие достаточно мощного бесплатного пакета для обработки данных оказывается очень важным, т.к. позволяет начать работу с фотограмметрическими технологиями с минимальными финансовыми вложениями, что актуально для большого количество людей, работающих или почти бесплатно, или имеющих крайне ограниченное финансирование (добровольные пожарные, археологи, независимые исследователи, научные сотрудники географических институтов...).
OpenDroneMap - технически сложное программное обеспечение, относительно просто которое можно развернуть только в среде Linux Ubuntu. Для того, чтобы доступ к нему мог получить любой пользователь вне зависимости от используемой им операционной системы, в статье подробно описан процесс установки и настройки Ubuntu в виртуальной среде средствами продукта Oracle VirtualBox, использовать который можно на любой современной ОС. Использование виртуальной машины рекомендуется также и тем, кто использует в качестве основной ОС Ubuntu, в целях изоляции пакета с большим количеством зависимостей от основной рабочей среды.
Подготовка среды
Установка Oracle VirtualBox
Oracle VirtualBox - самый популярный в мире открытый настольный гипервизор виртуальных машин, то есть специальное программное обеспечение, предназначенное для создания и запуска виртуальных машин, полноценных операционных систем, работающих внутри вашего основного окружения. С помощью него вы можете работать, к примеру, одновременно с Windows, Linux и MacOS в трёх отдельных окнах, при этом каждая из операционных систем будет считать, что она запущена на отдельном полноценном компьютере. Каждой из виртуальных машин вы можете полноценно управлять, выделять ей строго определенный ресурс и так далее. Большим преимуществом работы с виртуальной машиной является изоляция рабочих сред, так, если при работе с виртуальной системой что-то пошло не так, вы можете просто остановить её, и это никак не отразится на вашей основной системе (которая в терминологии виртуализации называется хостом).
Для начала нужно загрузить на свой компьютер дистрибутив операционной системы, которую необходимо установить как виртуальную машину. В нашем случае это Linux Ubuntu 16.04 LTS - один из наиболее распространненных дистрибутивов Linux, последняя стабильная версия. Дистрибутив доступен на сайте ubuntu.ru/get. Если вы работаете в Windows, с большой долей вероятности вы сможете установить только 32-х разрядную версию Ubuntu, что связано с особенностями виртуализации на системах Microsoft. При работе с Linux-хостом таких проблем обычно не бывает. Для унификации в описываемом примере загрузим именно 32-х разрядную версию.
Теперь загрузим установочный файл Oracle VirtualBox с сайта https://www.virtualbox.org/wiki/Downloads в соответствии с вашей основной операционной системой.
Если вы работаете в Linux, VirtualBox устанавливается через пакетный менеджер, например
sudo apt-get install virtualbox
В Windows нужно пройти стандартный мастер установки, оставляя все опции по умолчанию:
После установки, если вы не сняли флаг на последнем шаге, гипервизор запустится автоматически. Также его в любое время можно запустить стандартными средствами операционной системы.
Установка Ubuntu 14.04 LTS на VirtualBox
Приступаем к созданию виртуальной машины. Нажимаем кнопку "Создать" на главной панели VirtualBox:
На первом этапе необходимо задать имя новой виртуальной машины и её тип. Примем название Ubuntu ODM (от OpenDroneMap) и выберем в списке Linux - Ubuntu (32-bit)"
На следующем этапе задаётся объем оперативной памяти, которое виртуальная машина сможет занимать от доступного хосту объема. Рекомендуется предоставить ей больше 4-х гигабайт оперативной памяти, например, 6. Это имеет смысл даже при работе с 32-х разрядной версией ОС, т.к. Ubuntu умеет использовать память свыше лимита, привычного в Windows. Если вы решили установить 64-х разрядную версию Ubuntu, тем более можете указать любой объем (не рекомендуется выделять виртуальной машине >65% всей доступной памяти, но если не сильно нагружать хост при работе с виртуальной машиной, то ничего катастрофического не произойдёт). При недостатке оперативной памяти на виртуальной машине (<= 4 ГБ) некоторые компоненты OpenDroneMap, возможно, не смогут быть установлены.
Далее следуют настройки виртуального жесткого диска. Последовательно выбираем "Создать новый жесткий диск", VDI, "Динамический жесткий виртуальный диск":
На следующем этапе нужно определить максимальное физическое место на жестком диске, которое будет позволено занять виртуальной машине, а также расположение файла виртуального жесткого диска. Обратите внимание, что по умолчанию виртуальный жесткий диск будет сохранен в моих документах (для windows) или директории home (для Linux). Часто это неподходящий вариант, особенно если у вас под систему выделен небольшой SSD, и домашние директории расположены на нём. Для хранения виртуального диска можно выбрать любое другое расположение.
Виртуальная машина создана, теперь нужно инициализировать её, собственно установив Linux Ubuntu. В основном окне VirualBox в списке слева появилась Ubuntu ODM. В контекстном меню, вызываемом нажатием правой кнопки мыши, доступны все инструменты управления. Перед инициализацией зайдём в меню "Настроить".
На различных вкладках меню настроек вы можете изменить выделенное количество оперативной памяти, ядер процессора, видеопамяти и так далее. Нас сейчас интересует вкладка "Общие папки": необходимо настроить какое-то общее файловое хранилище, чтобы из виртуальной среды мы могли осуществлять доступ к собственным файлам на хосте. Переходим к "Общие папки" и нажимаем кнопку "Добавить новую общую папку".
В открывшемся меню выбираем путь до папки на хосте, к которой открывается доступ, и её название в виртуальной среде. Обязательно отмечаем галочку "авто-подключение".
В списке общих папок теперь видим добавленную:
Теперь возвращаемся в главное меню VirtualBox и активируем опцию "Запустить" для нашей виртуальной машины:
В первом диалоге необходимо выбрать дистрибутив, загруженный ранее, из которого будет производиться установка операционной системы. Выбираем загруженный файл формата .iso
Загружается установочный мастер Ubuntu. На первом шаге выбираем слева язык и, затем, "Установить Ubuntu":
На следующем шаге устанавливаем оба флага:
Затем указываем "Стереть диск и установить Ubuntu". Не беспокойтесь, речь идёт о виртуальном диске, созданном несколько шагов назад. Ваша основная система и файлы на ней не могут пострадать.
Соглашаемся с предупреждением:
Выбираем часовой пояс и раскладку клавиатуры:
Задаём имя пользователя и пароль. Пароль вам понадобится для установки приложений, так что его следует запомнить.
Дальше установка будет произведена автоматически.
По окончанию установки нужно будет перезагрузиться, нажав Enter:
После этого вы сразу попадёте в интерфейс операционной системы. Поздравляю, вы развернули Ubuntu на виртуальной машине!
Важные сочетания клавиш при работе с virtual-box:
- Правый Ctrl возвращает курсор мыши в хост
- Правый Ctrl+F: развернуть окно с виртуальной машиной в полноэкранный режим.
Настройка Ubuntu 16.04
Пришло время подготовить нашу свежеиспеченную систему к работе. Очень важно освоить базовые навыки работы с терминалом (командной строкой). Вызвать его можно, набрав в строке поиске Terminal (строка поиска вызывается нажатием на логотип Ubuntu в левом верхнем углу или по нажатию кнопки Windows на клавиатуре), либо воспользовавшись горячими клавишами: Ctrl+Alt+T.
Терминал - основное средство взаимодействия с системой. Выглядит так:
Осмотритесь в системе. В правом меню вы можете вызвать оконный файловый менеджер, и управлять файлами как в Windows. Однако вернёмся в терминал. Начнём готовить систему с помощью последовательности команд. Сначала обновим списки в репозиториях с программным обеспечением для пакетного менеджера. Понадобится ввести пароль.
sudo apt-get update
Затем установим программу git
sudo apt-get install git
Здесь пакетный менеджер спросит у вас разрешения на установку. Соглашайтесь! Принимается и "Д", и "Y" (без кавычек).
Также установим пакет meshlab, он нам понадобится для работы с результатами обработки.
sudo apt-get install meshlab
Немного технических вещей. Чтобы мы имели доступ к настроенной ранее общей папке, нужно добавить нашего пользователя в группу vboxsf. Вместо ekazakov используйте своё имя пользователя, введенное на этапе установки.
sudo usermod -G vboxsf -a ekazakov
Также нужно установить пакет улучшений работы VirtualBox с Ubuntu. Для этого выходим из полноэкранного режима виртуальной машины (правый Ctrl+F), если вы были в нём, в окне виртуальной машины сверху находим пункт меню "Devices" и выбираем там опцию "Install Guest Additions CD Image". Если у вас русифицированы эти пункты меню, можно ожидать, что это будет "Устройства" - "Установить дополнение гостевой ОС".
Сразу при активации этой опции вы получите предложение запустить установку дополнений. Соглашаемся и смотрим на процесс установки.
Перезагружаем Ubuntu. Управление выключением и перезагрузкой осуществляется с помощью меню в правом верхнем углу, справа от часов.
После перезагрузки в файловом менеджере вам будет доступна общая папка в меню слева (в моём случае пункт silent_sf). Система готова к дальнейшим приключениям.
Установка OpenDroneMap на Ubuntu 16.04 LTS
Снова откроем терминал. Создадим папку для размещения OpenDroneMap, назовём её odm:
mkdir odm
Перейдем во вновь созданную папку
cd odm
И склонируем в неё все файлы OpenDroneMap с помощью git (точка в конце команды имеет смысл, не забудьте её скопировать тоже)
git clone https://github.com/OpenDroneMap/OpenDroneMap.git .
Размер загружаемого пакета весьма велик, несколько больше 1 гигабайта.
После окончания загрузки настроим переменные среды:
export PYTHONPATH=$PYTHONPATH:`pwd`/SuperBuild/install/lib/python2.7/dist-packages:`pwd`/SuperBuild/src/opensfm export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/SuperBuild/install/lib
Вообще говоря, лучше добавить строчки управления переменными средами в файл .bashrc, чтобы они выполнялись каждый раз автоматически при запуске системы. Это не обязательно, если у вас одноразовая задача или вам не лень выполнять модернизацию переменных сред при каждом входе в систему. Для этого возвращаемся в домашнюю папку:
cd ..
И открываем файл .bashrc в текстовом редакторе
gedit .bashrc
У вас откроется обыкновенный блокнот с кодом на языке bash. В самый конец документа поместите поместите две строки, заменив ekazakov на своё имя пользователя:
export PYTHONPATH=$PYTHONPATH:/home/ekazakov/odm/SuperBuild/install/lib/python2.7/dist-packages:/home/ekazakov/odm/SuperBuild/src/opensfm export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ekazakov/odm/SuperBuild/install/lib
Сохраняемся, закрываем блокнот. Возвращаемся обратно в директорию, в которую загрузили OpenDroneMap:
cd odm
И, наконец, запустим настройку и конфигурирование OpenDroneMap
./configure.sh install
На этом этапе будет происходить очень много всего, но без вашего участия. Запаситесь терпением минут на 15-20-30. Установка завершена!
OpenDroneMap
Собственно обработка данных и расчёт производных продуктов осуществляется запуском одной единственной команды. В терминале из директории размещения OpenDroneMap (в моём случае /home/ekazakov/odm) вызывается модуль run.py:
python run.py <имя проекта>
Все настройки, режимы, ссылки на исходные данные и так далее указываются в виде ключей к этой команде. Всё просто и удобно.
Подготовка данных для расчёта без опорных точек
Посмотрим на запуск подробнее на конкретном примере. Самый распространненный среди любителей, занимающихся аэрофотосъёмкой с около-топографическими целями, вариант - имеется просто набор фотографий с заданным перекрытием, сделанных с какого-нибудь коптера в надир или почти в надир. Никакого наземного планово-высотного обоснования не обеспечивалось.
Пример простой и содержит 33 фотографии, выполненных аппаратом DJI Phantom 3 Advanced с высоты 150 метров в августе 2016 года, камера работала в автоматическом режиме.
Для того, чтобы приступить к обработке, нужно подготовить папку для данных OpenDroneMap, в которой будут размещаться наборы данных. Используя визуальный файловый менеджер, создадим в домашней папке новую директрию, например odm_projects, в которой создадим ещё одну директорию odm_non_gcp, а в ней - images (в моём случае получается /home/ekazakov/odm_projects/odm_non_gcp/images). У проектов OpenDroneMap строгая организация директорий, исходные снимки он будет искать именно в папке images в корневой папке конкретного проекта. Схема из оригинальной документации:
|-- /path/to/project/ |-- images/ |-- img-1234.jpg |-- ...
Используя общую папку с хостом, на котором и лежат ваши фотографии (если вы работаете с примером, можно загрузить тестовый набор через браузер прямо внутри виртуальной машины и обойтись без общей папки), копируем их в images. Вот как результат выглядит у меня (обратите внимание на пути):
В общем-то, организация данных для этого простого варианта завершена, ведь больше никаких исходных данных у нас нет. Но и этого достаточно, чтобы получить приятные результаты.
Расчёт базовых продуктов без опорных точек
Открываем терминал и переходим в директорию OpenDroneMap
cd odm
Запускаем расчёты командой, заменив ekazakov на своё имя пользователя:
python run.py odm_non_gcp --project-path /home/ekazakov/odm_projects --dtm
Здесь происходит следующее: запускается обработка с настройками по умолчанию для данных из набора odm_non_gcp, при этом ключом --project-path указывается расположение наборов данных. То есть в директории указанной после --project-path будет искаться директирия odm_non_gcp, в ней images, и уже там - исходные фотографии. Ключ --dtm указан для того, чтобы в сгенерировать цифровую модель местности (в данном случае только поверхности, см. также параметры --dem и --dsm). Более подробно о возможных ключах - в разделе "Список настроек для запуска ODM".
После запуска в консоли вы сможете наблюдать ход выполнения всех операций, начиная с загрузки и масштабирования фотографий, заканчивая построением моделей. По окончанию работы вы получите сообщение
[INFO] OpenDroneMap app finished
Будем смотреть, что же получилось! Если заглянуть в директорую с проектом, заметим, что добавлось много всего
Здесь вы сможете найти все промежуточные расчеты, преобразованные исходные фотографии, текструры и многое другое. Особый интерес представляют следующие файлы:
- /odm_orthophoto/odm_orthophoto.tif - ортофотоплан, сразу в GeoTiff, если ваши фотографии имели координаты в exif. Собственно, один из основных результатов, можно сразу открывать в любой ГИС и работать.
- /odm_orthophoto/odm_orthophoto.png - ортофотоплан в PNG. Открывается любым штатным просмотрщиком фотографий.
- /odm_dem/dtm.tif - цифровая модель местности (только поверхность), также в GeoTiff
- /odm_texturing/odm_textured_model_geo.obj - трёхмерная текстурированная модель. Можно сразу открыть и покрутить в meshlab, который мы установили ранее. Всё очень просто, запускаете meshlab из окна поиска приложений (как запускался терминал в начале), и стандартной кнопкой "Import mesh" открываете файл odm_textured_model_geo.obj
Подготовка данных для расчёта с опорными точками
Обычно при проведении аэрофотосъемки также проводятся геодезические работы по созданию планово-высотного обоснования (ПВО), чтобы фотограмметрические модели уравнивались с учётом реальных координат отдельных точек. Это позволяет получать модели более строгие с топографической точки зрения, и в нужной системе координат. Обычно ПВО представляет собой размещение на местности заметных объектов (в моём случае белых тарелочек, важно, чтобы объекты были однозначно идентифицируемы на фотоснимках) и вычисление их координат с высокой точностью геодезическими методами (в моём случае статические ГНСС-наблюдения от местной геодезической сети или полигонометрия). Разберёмся, как в OpenDroneMap строить модели с учётом опорных точек.
Решение этой задачи несложное технически, но потребует некоторых временных затрат. Необходимо создать текстовый файл следующего содержания:
Информация о системе координат Координата X точки в указанной системе координат, Координата Y точки в указанной системе координат, Высота точки, Координата X точки в системе координат фотографии, Координата Y точки в системе координат фотографии, Имя файла с фотографией, для которого указывались данные ... Координата X точки в указанной системе координат, Координата Y точки в указанной системе координат, Высота точки, Координата X точки в системе координат фотографии, Координата Y точки в системе координат фотографии, Имя файла с фотографией, для которого указывались данные
Важные моменты. Система координат описывается строкой вида "WGS84 UTM 36N" Первые три координаты в строке - те самые, полученные геодезическими методами. Координаты же в системе координат фотоснимка представляют собой следующее. Единица - один пиксель. Начало системы координат в левом верхнем углу фотографии, направление X - вправо, направление Y - вверх. Так, например, пиксель в семнадцатой строке и двадцатом столбце фотографии будет иметь координаты (20, -17). Обратите внимание на минус у координаты 17, поскольку ось Y направлена вверх, а начало системы координат также наверху, координаты всех пикселей по этой оси будут отрицательными.
Задача заключается в том, чтобы описать все появления опорных точек на всех фотографиях. Так, если у вас пять опорных точек и пять фотографий, на каждую из которых попадают все пять точек, то записей в файле будет 25 штук. Для удобства описания можно использовать такую структуру файла:
Информация о системе координат # Точка 1 x1, y1, z1, photo_x1, photo_y1, photo_name1 x1, y1, z1, photo_x2, photo_y2, photo_name2 x1, y1, z1, photo_x3, photo_y3, photo_name3 # Точка 2 x2, y2, z2, photo_x1, photo_y1, photo_name1 x2, y2, z2, photo_x2, photo_y2, photo_name2 x2, y2, z2, photo_x3, photo_y3, photo_name3 ...
Решение задачи предполагает следующие шаги:
- Выбор фотографии
- Визуальная идентификация на фотографии опорных точек, на неё попавших
- Вычисление координат этих точек в системе координат фотоснимка
- Запись соответствующих строк в файл
- Переход к следующей фотографии
Для примера возьмём фотографию из тестового набора с именем DJI_0256.JPG. На ней видно две опорные точки из трёх.
Координаты точки у реки:
X: 406085.553 Y: 6170547.408 Z: 118.076
Координаты точки у кустов:
X: 406161.126 Y: 6170444.479 Z: 117.515
Теперь нужно вычислить координаты точек в системе координат фотоснимка. Для этого можно открыть фотографию в любом адекватном растровом редакторе, который умеет показывать координаты курсора мыши в пикселях. Используйте любой, например, Pinta, простой растровый редактор для linux, похожий на Paint.NET в windows. Можем тут же установить этот пакет через терминал
sudo apt-get install pinta
Если открыть изображение в Pinta, координаты курсора мыши вы увидите на верхней панели. Приближаемся к опорной точке, наводим курсор в её центр, переписываем координаты пикселя.
Существует множество других способов извлечь координаты точки, но этот самый бесхитростный. Для рассмотренных снимка и точки формируется такая строка:
406161.126,6170444.479,117.515,2422,-821,DJI_0256.JPG
Ещё раз обращаем внимание на отрицательный знак. И на то, что имя фотографии приводится без пути.
Таким образом обрабатываются все точки на всех фотографиях. Для тестового набора данных содержимое текстового привязочного файла такое:
WGS84 UTM 36N # GCP 1 406085.553,6170547.408,118.076,1909,-662,DJI_0310.JPG 406085.553,6170547.408,118.076,1953,-1131,DJI_0311.JPG 406085.553,6170547.408,118.076,2001,-1600,DJI_0312.JPG 406085.553,6170547.408,118.076,2057,-2057,DJI_0313.JPG 406085.553,6170547.408,118.076,2111,-2512,DJI_0314.JPG 406085.553,6170547.408,118.076,2429,-2571,DJI_0280.JPG 406085.553,6170547.408,118.076,2443,-2237,DJI_0279.JPG 406085.553,6170547.408,118.076,2460,-1849,DJI_0278.JPG 406085.553,6170547.408,118.076,2479,-1475,DJI_0277.JPG 406085.553,6170547.408,118.076,2504,-1075,DJI_0276.JPG 406085.553,6170547.408,118.076,2532,-657,DJI_0275.JPG 406085.553,6170547.408,118.076,2545,-226,DJI_0274.JPG 406085.553,6170547.408,118.076,1043,-2622,DJI_0257.JPG 406085.553,6170547.408,118.076,983,-2167,DJI_0256.JPG 406085.553,6170547.408,118.076,928,-1694,DJI_0255.JPG 406085.553,6170547.408,118.076,886,-1236,DJI_0254.JPG 406085.553,6170547.408,118.076,840,-758,DJI_0253.JPG 406085.553,6170547.408,118.076,795,-293,DJI_0252.JPG 406085.553,6170547.408,118.076,3472,-2215,DJI_0221.JPG 406085.553,6170547.408,118.076,3497,-1862,DJI_0220.JPG 406085.553,6170547.408,118.076,3523,-1456,DJI_0219.JPG 406085.553,6170547.408,118.076,3549,-1062,DJI_0218.JPG 406085.553,6170547.408,118.076,3578,-685,DJI_0217.JPG 406085.553,6170547.408,118.076,3615,-300,DJI_0216.JPG # GCP 2 406219.544,6170487.534,117.541,2757,-327,DJI_0314.JPG 406219.544,6170487.534,117.541,2804,-799,DJI_0315.JPG 406219.544,6170487.534,117.541,2856,-1264,DJI_0316.JPG 406219.544,6170487.534,117.541,1590,-2719,DJI_0275.JPG 406219.544,6170487.534,117.541,1599,-2323,DJI_0274.JPG 406219.544,6170487.534,117.541,1613,-1913,DJI_0273.JPG 406219.544,6170487.534,117.541,1623,-1477,DJI_0272.JPG 406219.544,6170487.534,117.541,1796,-1389,DJI_0259.JPG 406219.544,6170487.534,117.541,1747,-931,DJI_0258.JPG 406219.544,6170487.534,117.541,1695,-458,DJI_0257.JPG 406219.544,6170487.534,117.541,2603,-2708,DJI_0217.JPG 406219.544,6170487.534,117.541,2623,-2355,DJI_0216.JPG 406219.544,6170487.534,117.541,2646,-2025,DJI_0215.JPG # GCP 3 406161.126,6170444.479,117.515,3459,-197,DJI_0312.JPG 406161.126,6170444.479,117.515,3497,-672,DJI_0313.JPG 406161.126,6170444.479,117.515,3538,-1146,DJI_0314.JPG 406161.126,6170444.479,117.515,3580,-1606,DJI_0315.JPG 406161.126,6170444.479,117.515,3629,-2060,DJI_0316.JPG 406161.126,6170444.479,117.515,893,-2982,DJI_0278.JPG 406161.126,6170444.479,117.515,897,-2623,DJI_0277.JPG 406161.126,6170444.479,117.515,906,-2238,DJI_0276.JPG 406161.126,6170444.479,117.515,914,-1840,DJI_0275.JPG 406161.126,6170444.479,117.515,918,-1427,DJI_0274.JPG 406161.126,6170444.479,117.515,921,-1002,DJI_0273.JPG 406161.126,6170444.479,117.515,922,-553,DJI_0272.JPG 406161.126,6170444.479,117.515,2575,-2191,DJI_0259.JPG 406161.126,6170444.479,117.515,2515,-1753,DJI_0258.JPG 406161.126,6170444.479,117.515,2468,-1287,DJI_0257.JPG 406161.126,6170444.479,117.515,2422,-821,DJI_0256.JPG 406161.126,6170444.479,117.515,2383,-350,DJI_0255.JPG 406161.126,6170444.479,117.515,1924,-2977,DJI_0220.JPG 406161.126,6170444.479,117.515,1942,-2585,DJI_0219.JPG 406161.126,6170444.479,117.515,1955,-2205,DJI_0218.JPG 406161.126,6170444.479,117.515,1969,-1835,DJI_0217.JPG 406161.126,6170444.479,117.515,1986,-1463,DJI_0216.JPG 406161.126,6170444.479,117.515,2004,-1115,DJI_0215.JPG
Как видно, даже небольшое количество опорных точек при высоком проценте перекрытия снимков заставляет изрядно потрудиться при описании ПВО. По окончанию создания файла он аккуратно сохраняется и кладётся куда-нибудь рядом с исходными фотографиями. В архиве с примером точки описаны в файле GCP_list.txt
Расчёт базовых продутов с опорными точками
Запуск расчётов с опорными точками производится полностью аналогично запуску без оных, с одним дополнением: ключом --gcp и путём до соответствующего файла.
Создадим в папке odm_projects новую директорию odm_gcp, в ней images, куда скопируем фотографии из нового набора. В odm_gcp также скопируем файл GCP_list.txt. В терминале возвращаемся в исходное положение, то есть переходим в директорию odm
cd odm
И запускаем расчёты, не забыв сослаться на файл с опорными точками и заменить ekazakov на ваше имя пользователя.
python run.py odm_gcp --project-path /home/ekazakov/odm_projects --gcp /home/ekazakov/odm_projects/odm_gcp/GCP_list.txt
По окончанию расчётов изучаем результаты
Список основных настроек для запуска ODM
Здесь приведен список основых опций, доступных при запуске OpenDroneMap. Полный список (на англ.) доступен в официальной документации или по команде run.py -h
-h или --help вывести в консоль сообщение с информацией о возможных опциях запуска команды run.py. --images <путь> или -i <путь> путь до папки с исходными изображениями --project-path <путь> путь до папки с проектом --resize-to <целое число> масштабирование изображения (по большей стороне) --skip-resize пропустить шаг масштабирования изображений. Вместо масштабированных изображений будут использованы оригинальныеthe resized folder --start-with <параметр> или -s <параметр> С помощью параметра указать, с какой операции начать обработку. Может быть полезно, если нужно быстро получить частный результат, не дожидаясь полной обработки. Параметр может быть: resize | opensfm | slam | cmvs | pmvs | odm_meshing | odm_25dmeshing | mvs_texturing | odm_georeferencing | odm_orthophoto --end-with <параметр> или -e <параметр> Аналогично, какой операцией закончить:resize | opensfm | slam | cmvs | pmvs | odm_meshing | odm_25dmeshing | mvs_texturing | odm_georeferencing | odm_orthophoto --rerun <параметр> Перезапустить конкретную операцию. Параметр может быть:resize | opensfm | slam | cmvs | pmvs | odm_meshing | odm_25dmeshing | mvs_texturing | odm_georeferencing | odm_orthophoto --rerun-all Перезапуск всех операций --rerun-from <параметр> С помощью параметра указать, с какой операции начать перезапуск. Параметр может быть:resize | opensfm | slam | cmvs | pmvs | odm_meshing | odm_25dmeshing | mvs_texturing | odm_georeferencing | odm_orthophoto --video <путь> Путь до видео файла для обработки --slam-config <путь> Путь до конфигурационного файла orb-slam --force-focal <вещественное число> Перезаписать информацию о фокусном расстоянии (число вместо взятого из изображений) --force-ccd <вешщественное число> Перезаписать информацию о ширине матрицы ПЗС (число вместо взятого из изображений) --min-num-features <целое число> Минимальное количество особых точек, извлекаемых из отдельного изображения. Чем больше - тем лучше результат, но медленнее обработка. Значение по умолчанию: 4000 --matcher-threshold <процент> Игнорировать сопоставленные ключевые точки, если перекрывающиеся изображения делят менее указанного количества процентов ключевых точек. Значение по умолчанию: 2.0 --matcher-ratio <вещественное число> Отношение расстояния до следующей наиболее подходящей ключевой точки Значение по умолчанию: 0.6 --matcher-neighbors <целое число> Количество ближайших изображений для предварительного сопоставления основанного на данных GPS, извлеченных из exif фотографий. Установить на 0 для того, чтобы пропустить предварительное сопоставление. Значение по умолчанию: 8 --matcher-distance <целое число> Порог расстояния (в метрах) для поиска изображений для предварительного сопоставления, основанного на данных GPS, извлеченных из exif фотографий. Установить на 0 вместе с matcher-neighbors для того, чтобы пропустить предварительное сопоставление. Значение по умолчанию: 0 --opensfm-processes <целое положительное число> Максимальное количество процессов для рекострукции плотного облака (чем больше, тем быстрее, но интенсивнее задействуются компьютерные ресурсы) Значение по умолчанию: 1 --use-25dmesh Экспериментальная опция. Использовать 2.5-мерную пространственную триангуляцию для построения ортофотоплана. Использование этой опции может обеспечить лучшие результаты для плоских поверхностей. --use-pmvs Использовать pmvs для расчёта облака точек --cmvs-maxImages <целое число> Максимальное количество изображений в кластере. Значение по умолчанию: 500 --mesh-size <целое положительное число> Максимальное количество вершин в выходной пространственной триангуляции Значение по умолчанию: 100000 --mesh-wlop-iterations <целое положительное число> Количество итераций процедуры WLOP. Чем больше значения, тем более сглаженной получается пространственная триангуляция. Применяется к 2.5-мерной триангуляции. Значение по умолчанию: 35 --texturing-tone-mapping <параметр> Использовать тоновую коррекцию, если параметр указан gamma, не использовать, если none. Значение по умолчанию: none --gcp <path string> Путь до файла с информацией о ПВО. См. соответствующий раздел статьи. По умолчанию не используется. --use-exif Использовать данные из exif вместо GCP, даже если файл с ними существует --dem Построить Цифромую модель рельефа используя морфологической фильтер PDAL --dtm Построить Цифровую модель территории (только поверхность земли) с использованием прогрессивного морфометрического фильтра. --dsm Построить Цифровую модель местности (поверхность + объекты) --dem-approximate Использовать прогрессивный морфологический фильтр для ЦМР. Расчёты с ним быстрее, но менее точные. --orthophoto-resolution <вещественное число большее 0> Пространственное разрешение ортофотоплана в пикселях на метр Значение по умолчанию: 20.0 (то есть пять сантиметров на пиксель) --orthophoto-compression <параметр> Вид сжатия для ортофотоплана. Возможные значения: JPEG, LZW, PACKBITS, DEFLATE, LZMA, NONE. Значение по умолчанию: DEFLATE --orthophoto-bigtiff <параметр> Управление созданием ортофотоплана в формате BigTIFF или классический TIFF. BigTIFF - вариант для файлов больших чем 4 ГБ. Возможные значения параметра: YES, NO, IF_NEEDED, IF_SAFER. Для деталей см. спецификацию GDAL Control whether the created orthophoto is a BigTIFF or classic TIFF. BigTIFF is a variant for files larger than 4GiB of data. Options are YES, NO, IF_NEEDED, IF_SAFER. See GDAL specs: https://www.gdal.org/frmt_gtiff.html for more info. Default: IF_SAFER --build-overviews Создать обзорные файлы для ортофотопланы с помощью утилиты gdaladdo. --zip-results сжать результаты с помощью gunzip --verbose или -v Выводить в консоль дополнительную информацию о ходе обработки --time Создать файл с информацией о затраченном на обработку времени --version Вывести в консоль номер версии OpenDroneMap