Обсудить в форуме Комментариев 47Редактировать в вики
Описание расширения QGIS позволяющего использовать алгоритм автоматической оценки облачности
Содержание |
Расширение доступно из официального репозитория.
Исходный код можно взять на GitHub: https://github.com/sergey-bastrakov/Acca_Plugin
Установка модулей подробно описана в статье Установка модулей расширения в QGIS.
Весь интерфейс представляет собой две формы, первая позволяет указать параметры алгоритма, вторая выводит прогресс выполнения.
После установки плагина в Quantum GIS, в меню появится пункт, вызывающий главное окно модуля. В появившемся главном окне необходимо указать два обязательных параметра:
Остальные параметры можно оставить по-умолчанию:
После запуска алгоритма будет выведен прогресс выполнения, после чего программа завершается.
Функционально плагин можно разбить на несколько частей:
Блок-схема модуля:
Для решения задачи преобразования данных LANDSAT был написан класс CToar, который включает в себя все необходимое для работы над снимком.
Снимок открывается с помощью библиотеки Gdal, она же предоставляет интерфейс для работы со слоями. Снимок в программе представляет собой набор двумерных массивов чисел – от 0 до 255 для каждого слоя. Каждый канал обрабатывается отдельно. С целью ускорения обработки канал разбивается на блоки 2000 на 2000 точек. Блоки обрабатываются сверху вниз слева направо.
Каждый блок обрабатывается целиком, библиотека NumPy позволяет выполнять поэлементные операции над массивами.
В зависимости от обрабатываемого слоя к снимку применяется свой набор операций. Сначала для каждого слоя рассчитывается плотность потока у датчика по формуле (1), далее для 2-5 каналов считается спектральная отражательная способность (2), а для теплового слоя температура (3).
Результат сохраняется в формате входных данных, кроме типа значений, у выходных данных тип float32.
UML диаграмма класса CToar:
Обработка снимка происходит в функции processing, которая выполняется в своем потоке. Непосредственно вычисления производятся в функции toar.
Кроме обработки данных LANDSAT, необходимо произвести разбор метаданных и сохранить нужные для дальнейшей работы с алгоритмом ACCA. Разбор данных осуществляет функция parsing, а сохраняет нужные – save_metadata.
Процесс обработки снимков достаточно длительный, поэтому предусмотрен отладочный вывод, который становится активным при debuglevel=1. Так же в процессе обработки экземпляр класса CToar испускает сигнал progress, который может передавать информацию о прогрессе выполнения.
Алгоритм содержится в классе CAcca. В состав класса входит весь необходимый для решения задачи функционал.
Обработка снимка происходит так же, как и в классе CToar. Снимок разбивается на блоки 2000 на 2000 точек. Но все каналы обрабатываются вместе. Так как в фильтрах проверяются значения из различных каналов.
При реализации класса CAcca основной проблемой являлась проверка каждой точки, проходит она фильтр или нет. Поточечная обработка заняла бы слишком много времени. Поэтому было принято решение использовать маски - двумерный массив булевых элементов. Для каждого фильтра строилась такая маска. Если значения элемента в маске True, то соответствующая точка снимка фильтр проходит. После каждого фильтра маска умножается на маску с предыдущего шага. В результате те точки, которые прошли все фильтры, будут иметь True в соответствующей точке маски. Классификация точек производится при помощи функции NumPy – putmask. Эта функция заменяет значения точек в маске облачности, соответствующих значениям True в маске фильтра, на заданное значение.
В процессе обработки снимка на первом шаге ведется статистика различных классов точек. На её основе делается вывод, что нужно сделать на втором шаге. Например, строится гистограмма для точек температурного слоя. Из неё берутся пороговые температуры для второго шага.
Процесс вычисления получился ресурсоемким, для запуска алгоритма требуется минимум 1ГБ оперативной памяти и порядка 1,5ГБ на жестком диске. От процессора зависит только скорость расчетов. На 4-х ядерном процессоре AMD A6 – 1,5 ГГц время выполнения составляет порядка 10 минут.
UML-диаграмма класса CAcca:
Точно так же как и в классе CToar функция processing, которая производит обработку снимка, выполняется в отдельном потоке. Здесь так же происходит вывод прогресса, если debuglevel=1 и точно так же испускается сигнал progress.
Результат работы алгоритма:
Обсудить в форуме Комментариев 47Редактировать в вики
Последнее обновление: 2014-05-14 22:12
Дата создания: 01,07,2012
Автор(ы): Сергей Бастраков
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).