Почему фотограмметрия начинается с RAW: обработка исходных кадров на GPU

Автор: Серженко Фёдор
Tags: Аэрофотосъёмка, Фотограмметрия, Обработка RAW, ALTMapper, CUDA, GPU

Когда ортофотоплан получается недостаточно точным, причину чаще всего ищут в настройках фотограмметрического ПО. Но Agisoft Metashape, Pix4D и RealityCapture работают ровно с тем материалом, который им дали: они не могут извлечь признаки оттуда, где деталей уже нет. Если в тенях на кадре ничего не видно, если дымка съела контраст, если часть маршрута снята с другой экспозицией — эти потери произошли до запуска фотограмметрии, и внутри неё они уже не восстанавливаются.

Поэтому этап между камерой и фотограмметрическим ПО — не техническая формальность, а место, где реально определяется качество итоговой карты. Ниже — о том, что именно происходит с кадром на этом этапе, и почему обработку имеет смысл начинать с RAW, а не с камерного JPEG.

кадр аэрофотосъёмки: дорога через лес с тенями от деревьев

Типичный кадр аэрофотосъёмки: длинные тени от деревьев ложатся поперёк дороги. Всё, что попало в эти тени, фотограмметрическое ПО увидит ровно настолько, насколько его вытянули при обработке

Что теряется до фотограмметрии

Кадры с БПЛА и пилотируемых носителей почти всегда несут на себе объективные проблемы съёмки, и каждая из них бьёт по конкретному месту в фотограмметрическом конвейере.

Глубокие тени. Объекты и рельеф в затенённых участках малозаметны. Алгоритмы сопоставления признаков опираются на видимый локальный контраст, поэтому из тёмных областей извлекается заметно меньше надёжных точек — а значит, эти участки хуже привязываются к соседним кадрам.

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

Неравномерная экспозиция вдоль маршрута. Освещённость меняется в течение полёта, и отдельные кадры оказываются пере- или недоэкспонированными — «выпадают» из общего ряда. Обычно такие кадры отбирают и правят вручную, что тормозит пакетную обработку всего массива.

Камерный JPEG вместо RAW. Внутрикамерная обработка принимает решения за вас — со своим шумоподавлением, своей демозаикой и своей тональной кривой, — и делает это до того, как кадр попадёт к вам. Часть информации, которая была в сыром сигнале сенсора, к этому моменту уже необратимо потеряна.

Каждая из проблем по отдельности кажется терпимой. Вместе они снижают число точек для сшивки и точность итоговых карт, а в худшем случае приводят к самому дорогому исходу во всём процессе — повторному вылету.

Обработка RAW на GPU: что делает конвейер

Фаствидео разрабатывает ПО для быстрой обработки изображений на видеокартах NVIDIA по технологии CUDA. Для аэрофотосъёмки и фотограмметрии мы используем связку из двух продуктов: Fast CinemaDNG Processor — полный конвейер обработки RAW/DNG на GPU — и ALTMapper — модуль адаптивного локального контраста.

Обработка идёт от сырых данных сенсора и выполняется целиком на видеокарте: от распаковки RAW и вычитания тёмнового кадра — через выравнивание яркости, демозаику высокого качества, индивидуальную экспокоррекцию, шумоподавление и цветокоррекцию — до адаптивного локального контраста ALTMapper и сжатия в JPEG или TIFF. Для итоговой карты важен, однако, не столько сам перечень операций, сколько то, в каком порядке и над какими данными они выполняются. Полную последовательность этапов по шагам, поддерживаемые форматы и системные требования мы собрали на странице «Софт для аэрофотосъёмки»; здесь важнее разобраться, почему это вообще работает.

Принципиальный момент — порядок. Демозаика, шумоподавление и тональная обработка выполняются над данными с полной разрядностью, а не над уже сжатым 8-битным JPEG, в котором часть информации отсутствует. Расчёты идут с 32-битной точностью ISP, результат сохраняется в 16 бит. Именно поэтому обработка «с RAW» даёт другой результат, а не просто другой порядок тех же операций.

Работает это независимо от модели камеры: поддерживаются RAW-форматы SONY, Nikon, Canon, Olympus, открытые DNG и CinemaDNG, а также RAW камер машинного зрения — XIMEA, Basler, Hikrobot, Lucid, FLIR.

Локальный контраст — и почему без ИИ

Отдельного разговора заслуживает ALTMapper — этап, на котором кадр приобретает информативность, критичную для сопоставления признаков.

ALTMapper восстанавливает детали в тенях, не разрушая структуру светлых участков; управляет глобальным, локальным и микроконтрастом; ослабляет атмосферную дымку; корректирует точку чёрного; выравнивает освещение по кадру. Применять его можно двумя способами — как встроенный этап внутри GPU-конвейера Fast CinemaDNG Processor или как внешнюю программу, уже к готовым кадрам, перед их передачей в фотограмметрическое ПО. Второй вариант удобен, если менять существующий конвейер обработки не хочется.

 

восстановление деталей в тенях на аэрофотоснимке

Слева исходный кадр, справа результат работы ALTMapper: глубокие тени стали светлее, теней от облаков на поле больше нет

Это классический детерминированный алгоритм: никаких нейросетей. Для фотограмметрии это не идеологический выбор, а требование к результату:

При этом ALTMapper не вносит артефактов — ни ореолов, ни цветовых сдвигов, — и полностью сохраняет цвет и метаданные EXIF, так что выходные файлы остаются совместимы с фотограмметрическим ПО.

Частный, но важный сценарий — подавление теней от лёгких облаков; ему посвящён отдельный подробный разбор в статье «Удаление слабых теней от облаков в аэрофотосъёмке и фотограмметрии».

Дымка, точка чёрного и неравномерная яркость кадра

Усиление теней — самая заметная, но не единственная работа, которую ALTMapper делает внутри кадра. Три остальные поправки менее очевидны, а на аэрофотоснимках встречаются едва ли не чаще.

Атмосферная дымка

Съёмка с высоты почти всегда идёт сквозь толщу воздуха, и рассеянный в ней свет добавляется к полезному сигналу. Результат — молочная пелена, которая гасит локальный контраст: дальние планы и нижняя часть кадра теряют детализацию сильнее, чем ближние. Для глаза это просто «мутный кадр», а для фотограмметрии — область, из которой почти не извлекаются характерные точки.

Мы разработали свой алгоритм dehaze для более интеллектуальной работы с дымкой. Этот алгоритм предназначен именно для изображений аэрофотосъёмки, когда камера направлена перпендикулярно поверхности земли. Он отличается от стандартной математической модели дымки, но он даёт интересные результаты.

ALTMapper оценивает и вычитает вклад дымки, восстанавливая локальный контраст и резкость границ на дальних деталях. Кадр становится не просто «контрастнее»: возвращается сама фактура — границы объектов, рисунок растительности, линии дорог, — то есть ровно то, за что цепляются алгоритмы сопоставления признаков.

 

удаление атмосферной дымки на аэрофотоснимке

Слева исходный кадр (14192 × 10640, 151 МПикс), справа результат обработки ALTMapper: дымка убрана, вернулись фактура растительности и границы объектов

Коррекция точки чёрного

Дымка и паразитная засветка осветляют кадр: самые тёмные участки кадра перестают быть по-настоящему тёмными. Из-за этого весь тональный диапазон сжимается, и весь кадр выглядит малоконтрастным. В простейшем варианте ALTMapper корректирует точку чёрного, сдвигая гистограмму влево, а также после этого усиливает тени, что положительно сказывается на визуальном восприятии результата обработки.

Выравнивание яркости по кадру

Яркость редко бывает одинаковой по всему кадру, и причин обычно две. Первая — оптическая: спад яркости к краям кадра, виньетирование объектива. Вторая — сцена: освещение внутри одного кадра само по себе неравномерно, например склон освещён, а долина в полутени.

Для одиночного снимка это косметический дефект, а для фотограмметрии — системная проблема. При съёмке с перекрытием одна и та же точка местности попадает в центр одного кадра и на край соседнего, и из-за виньетирования она имеет там разную яркость. Сопоставление признаков от этого становится менее надёжным, а на готовом ортофотоплане проступает характерный «сотовый» рисунок — видны границы отдельных кадров.

Обе причины устраняются, но на разных этапах. Виньетирование объектива снимается в самом начале RAW-конвейера (шаг 2 в списке выше), когда данные ещё линейны и спад яркости описывается простой моделью — это классическая flat-field коррекция. Неравномерность освещения самой сцены убирает уже ALTMapper: он обрабатывает каждую область кадра сбалансированно, выравнивая освещение по кадру и не разрушая при этом локальный контраст. Порядок здесь принципиален: пытаться исправить виньетирование после тональной обработки — значит бороться со следствием.

 

выравнивание яркости по кадру и компенсация виньетирования

Слева исходный кадр: заметен спад яркости к краям — углы примерно на треть темнее центра. Справа после ALTMapper: яркость выровнена по всему полю кадра, фактура читается и в углах.

Все четыре поправки — тени, дымка, точка чёрного и яркость по кадру — действуют внутри одного кадра. Отдельный вопрос — согласовать между собой кадры всего маршрута.

Индивидуальная экспокоррекция вместо ручной правки

«Выпавшие» по экспозиции кадры — отдельная головная боль пакетной обработки: массив нельзя прогнать одним пресетом, потому что часть кадров после него окажется испорчена, и приходится вручную отбирать проблемные и править их по одному.

Fast CinemaDNG Processor применяет индивидуальную коррекцию экспозиции при обработке всей серии: освещённость выравнивается по всему массиву автоматически. Фотограмметрическое ПО получает единообразный, предсказуемый входной материал, а ручной этап из процесса просто исчезает.

Сколько это стоит по времени

Главное возражение против ещё одного этапа в конвейере — «он всё замедлит». На видеокарте оно снимается: полный конвейер RAW→JPEG для 65-мегапиксельного кадра проходит примерно за 32 мс — это 60–70 кадров в секунду, и в эти миллисекунды уже уложены демозаика высокого качества, шумоподавление, тональная обработка и сжатие. Сам ALTMapper успевает работать в реальном времени даже на бортовом модуле NVIDIA Jetson AGX Orin. Иначе говоря, качественная подготовка кадров перестаёт быть отдельной длительной стадией — она растворяется в общем времени обработки.

Развёрнутые бенчмарки по каждому модулю (демозаика, ALTMapper, кодеки JPEG и JPEG2000) и методику измерений мы держим на странице «Софт для аэрофотосъёмки». Все цифры воспроизводимы — их можно проверить на своём GPU на демо-версии.

Измеримый эффект

Всё вышесказанное имеет смысл ровно в той мере, в какой оно меняет итоговые цифры. Один из наших заказчиков перевёл свой процесс на полную обработку RAW на GPU — с ALTMapper и индивидуальной экспокоррекцией — и результат оказался вполне конкретным. Число точек для сшивки (tie points) выросло примерно на треть: более информативные кадры дали алгоритмам сопоставления больше, за что зацепиться, и привязка соседних снимков стала надёжнее. Повторных вылетов стало примерно на пятую часть меньше — а именно пересъёмка из-за брака по качеству исходников остаётся самой дорогой статьёй в аэрофотосъёмке. И сами ортофотопланы вышли точнее — просто потому, что на вход фотограмметрии пошёл заметно более чистый материал.

Попробовать на своих данных

Проверить всё это на бумаге невозможно — эффект зависит от вашей камеры, вашей местности и ваших условий съёмки. Поэтому мы предлагаем бесплатное демо: вы обрабатываете собственные RAW-снимки на собственном GPU и сравниваете результат в вашем фотограмметрическом ПО.

Подробное описание решения, поддерживаемые форматы и системные требования — на странице «Софт для аэрофотосъёмки». Запросить демо, техническую документацию и консультацию можно через форму ниже.

Дополнительные материалы

Проверьте скорость сами — наши цифры воспроизводимы на вашем GPU.

Форма для отправки запроса

Эта форма сохраняет вашу должность и адрес электронной почты.