Статьи

Работа с геопространственными данными: Python и Agisoft Metashape

Программирование
Сегодня рассмотрим, насколько знание Python может быть полезно в работе с геопространственными данными на примере программного обеспечения Agisoft Metashape. Оно необходимо для обработки данных с беспилотника (фото и видеосъемка) и создания облаков точек, трехмерных моделей, цифровых моделей местности и ортофотопланов. Работа с такими данными зачастую требует дополнительных инструментов и нестандартных решений. Когда не хватает функционала ПО, на помощь приходят скрипты. Metashape поддерживает интерфейс программирования приложений (API) на Python, используя Python 3.8. Некоторые скрипты находятся в открытом доступе и размещены по ссылке https://github.com/agisoft-llc/metashape-scripts

Подготовили более подробное описание некоторых из них.

Описание скриптов metashape-scripts-master из папки src:


Запуск скриптов выполняется из меню Scripts основной панели Agisoft Metashape (см. рис. 1).
Рисунок 1. Запуск скриптов

1 Add reference altitude
Скрипт «Add reference altitude»/ «Добавить высоту отсчета» позволяет пользователю задать высоту отсчета. Заданное значение добавляется в значения Source (Исходные значения) на панели Reference (Привязка). Заданное пользователем значение высоты отсчета прибавляется к исходной высоте (см. рис. 2).
Рисунок 2. Использование скрипта Add reference altitude

2 Automatic background masking
Скрипт «Automatic background masking»/ «Автоматическое скрытие заднего плана» позволяет скрыть задний план модели.

3 Bounding box to coordinate system
Скрипт «Bounding box to coordinate system»/ «Автоматическая подстройка рабочей области под координатную систему» позволяет повернуть рабочую область блока снимков в соответствии с координатной системой активного блока. Размер рабочей области остается неизменным.

4 Colorize model with altitude
Скрипт «Colorize model with altitude»/ «Рассчитать цвета модели по высоте» позволяет рассчитать цвета модели в соответствии с высотами. Окно «Модель» обновляется автоматически после выполнения скрипта.

5 Colorize model with overlap
Скрипт «Colorize model with overlap»/ «Рассчитать цвета модели по перекрытию кадров» позволяет рассчитать цвета модели в соответствии с перекрытием кадров. Окно «Модель» обновляется автоматически после выполнения скрипта. Стоит отметить, что глобальная освещенность поверхности и расстояния между точками и снимками в работе скрипта не учитываются. В расчетах учитывается только число проекций каждой точки на всех снимках.

6 Coordinate system to bounding box
Скрипт «Coordinate system to bounding box»/ «Автоматическая подстройка координатной системы в соответствии с рабочей областью» позволяет повернуть координатную систему модели в соответствии с рабочей областью активного блока снимков. Масштаб остается неизменным. Система координат задается на панели Reference (Привязка).

7 Copy bounding box
Скрипт «Copy bounding box»/ «Копировать рабочую область» позволяет скопировать рабочую область с текущего блока снимков на другие блоки снимков. В диалоговом окне можно выбрать блок, из которого копировать, и блоки, в которые копировать.

8 Detect objects
Скрипт «Detect objects»/ «Обнаружить объекты» позволяет детектировать объекты (например, машины, деревья и т. д.) на ортофотоплане. Скрипт основан на предварительно обученной нейронной сети. Для последующего детектирования объектов необходима предварительная настройка. Требуется задать параметры для обучения нейросети: указать необходимые для поиска объекты, выбрать тренировочный датасет и область поиска. Скрипт можно использовать не только на всем ортофотоплане, но и на отдельных его частях.
Для вычислений нейросети потребуется графический процессор NVIDIA GPU.

9 Create footprint shape layer
Скрипт «Create footprint shape layer»/ «Создать слой положений» позволяет создать слой положений в выбранном блоке снимков. Результат работы скрипта представлен в окне «Орто» (см. рис. 3).
Рисунок 3. Использование скрипта Create footprint shape layer

10 Split in chunks
Скрипт «Split in chunks»/ «Разбить на блоки снимков» позволяет разбить все снимки на отдельные блоки. Пользователь может задать параметры разбиения: фильтрация, параметры трехмерной полигональной модели, параметры плотного облака точек, процент перекрытия, параметры сетки значений высот (см. рис. 4). Также пользователь может включить опцию сохранения проекта после выполнения каждого этапа скрипта.
Рисунок 4. Использование скрипта Split in chunks

11 Align model or dense point cloud
Скрипт «Align model or dense point cloud»/ «Выровнять модель или плотное облако точек» позволяет пользователю выполнить выравнивание двух независимо построенных моделей/ плотных облаков точек. Также возможно произвести выравнивание двух облаков точек LIDAR с хорошим перекрытием.

12 masking_by_color_dialog:
Создает маски для камер в активном фрагменте на основе определенного пользователем цвета и допуска.

13 model_style_transfer:
Учет положения камер (когда это возможно) вместо meshutil.sample_view

15 read_altitude_from_DJI_meta:
Скрипт позволяет считать информацию об относительной точности из метаданных DJI для всех активных камер. Эти данные загружаются в справочную панель вместо уже существующих данных.

16 region_control:
Скрипт позволяет масштабировать и смещать область рабочего пространства.

17 render_spherical_panorama:
Создает сферическую панораму с текущей точкой обзора.

18 save_estimated_reference:
Сохраняет в файл .txt оценочные значения каждой камеры.

19 split_calibration_by_order:
Данный скрипт группирует снимки в зависимости от параметров (разрешение изображения, фокусное расстояние) и порядком изображений. Применим только к группе последовательных снимков.


20 transfer_orientation:
Позволяет перенести ориентацию с одних камер на другие. Например, одновременно и в одном и том же направлении были сделаны фотографии на камеру RGB и тепловую. В таком случае возможно произвести выравнивание только с помощью RGB изображения.
Для использования необходимо добавить два вида изображений (например, RGB и тепловые снимки). Один из видов необходимо заблокировать и выровнять снимки. После этого активировать все камеры и запустить скрипт transfer_orientation.

Описание скриптов metashape-scripts-master из папки contrib:


Запуск данных скриптов доступен через меню Обработка на основной панели Agisoft Metashape (Обработка-Пакетная обработка-Добавить-Выполнить скрипт).

1 gradual_selection_tie_points
Данный скрипт является фильтром разреженного облака точек.
Параметры для ввода расположены в следующем порядке: Ошибка репрезентации (Reprojection error), реконструкционная неточность (Reconstruction Uncertainty), количество изображений (Image count), точность проекции (Projection Accuracy). Все параметры вводятся через пробел. Пример: 3 11 4 18

2 remove_disabled_photos
Данный скрипт позволяет удалить блокированные камеры. В директории с фотографиями создается новая папка “Disabled”, в нее помещаются все фотографии из директории проекта помеченные как блокированные и удаляет бездействующие камеры в проекте.


3 save_chunks
Сохраняет текущий проект (.psx)


4 change_chunk_names.py
Данный скрипт изменяет наименования блоков снимков в соответствии с именем первого снимка в блоке. Если имя снимка включает символ «_», то имя разбивается по данному символу, а затем в имя блока включаются первые три слова через «_».

5 disable_models.py
Данный скрипт позволяет деактивировать блоки снимков в модели.

6 gradual_selection_mesh.py
Данный скрипт получает число компонентов (локальных поднаборов данных) в модели и последовательно снижает их число до одного. Компоненты отображаются внутри папки Компоненты соответствующего блока на панели Проект.