Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Sen2Cor — программа для обработки снимков, сделанных со спутника Sentinel-2. В статье рассказывается, как установить, запустить и настроить её.
В магистратуре мне понадобилось сделать атмосферную коррекцию снимков со спутника Sentinel-2. Магистратура по экологии, поэтому можно было не углубляться в физику и математику, а использовать готовый инструмент. Такой инструмент нашёлся — Sen2Cor.
Проблема в том, что понятной инструкции для Sen2Cor нет. Авторы учебников по геоинформатике не лезут в такие дебри, как работа с конкретными программами, а авторы научных статей, напротив, полагают, что коррекция снимков — слишком простая часть методики, поэтому не описывают её подробно. На сайтах «для чайников» (и не совсем для чайников) о Sen2Cor тоже не пишут. Официальная документация запутанная: достаточно сказать, что раздел «Установка» на 26-й странице «Руководства пользователя» сразу отсылает к 60-й странице Release Notes. Чтобы разобраться, мне потребовалось время.
Я решил написать понятное руководство по установке, запуску и настройке Sen2Cor. Руководство ориентировано на биологов, экологов, специалистов по сельскому хозяйству и всех тех, кому может понадобиться обработка спутниковых снимков, но для кого она не является основной задачей. По сути, я делюсь собственным опытом. Абсолютную правильность и полноту не гарантирую. Специалисты по геоинформатике, думаю, сами мне что-то посоветуют.
Строго говоря, Sen2Cor делает не только атмосферную коррекцию, но и поправку на угол восхождения Солнца и рельеф местности, а также тематическую классификацию (scene classification), но для меня важнее всего была атмосферная коррекция. Поэтому для простоты я иногда вместо «обработка» пишу «атмосферная коррекция», хотя это неточно.
Sen2Cor работает в трёх режимах: как отдельное консольное приложение, как плагин в составе Sentinel-2 Toolbox и как консольное приложение, используемое в PDGS (Payload Data Ground Segment). PDGS — это наземный центр обработки данных, получаемых со спутников. Находится он в Италии в исследовательском институте. Теоретически можно запустить Sen2Cor в том же режиме, в котором его запускают в центре обработки данных, но для запуска понадобятся данные, которые просто так в интернете не скачать, поэтому мы данный вариант рассматривать не будем. Sentinel-2 Tolobox тоже обойдём стороной, потому что с этой программой я не работал. Она с графическим интерфейсом, поэтому полагаю, что разобраться в её работе несложно. Итак, в данной статье описано, как использовать Sen2Cor в режиме консольной программы.
Sen2Cor работает в 64-битных Windows, MacOS и Linux. У меня Linux, поэтому команды буду показывать на примере Linux. Впрочем, разница только в установщиках и в путях к файлам.
Sen2Cor требует 4 Гб оперативной памяти. Если меньше, то он запустится, но может аварийно завершиться на середине обработки. Расход оперативной памяти зависит от разрешения производимых снимков, поэтому если памяти мало и программа из-за этого выдаёт ошибку, то можно запустить обработку с меньшим разрешением. О том, как это сделать, написано далее. Аналогичных жёстких требований к процессору нет, но чем слабее процессор, тем больше времени займёт обработка.
Нужно скачать установщик и запустить его. Sen2Cor написан на Python, однако, интерпретатор и все необходимые пакеты находятся в установщике, поэтому самому устанавливать Python и настраивать окружение не нужно.
Предположим, что у нас есть пользователь user с домашним каталогом
Далее загрузим и запустим установщик. Открываем страницу Sen2Cor на сайте инструментов Европейского космического агентства. Есть две версии программы: 2.5.5 и 2.8. Лучше устанавливать 2.8: она расходует меньше оперативной памяти и содержит меньше ошибок. Версия 2.5.5 может понадобиться, если нужно обработать снимки, сделанные по старым спецификациям. Нажмем на «Sen2Cor v2.8». В конце страницы в пункте «Standalone Installers» находятся ссылки для скачивания установщиков. Загружаем тот, который подходит для нашей операционной системы. В данном случае это «Linux installer: Sen2Cor-02.08.00-Linux64.run». Сохраняем файл в
Далее открываем консоль, перемещаемся в каталог
По умолчанию программа устанавливается в текущий каталог. В нём создаётся папка
Если ошибок нет, то в консоли должна появиться надпись
В этой команде
Если появилось, то установка прошла нормально и программа готова к использованию. Единственное, что ещё не помешает сделать — упростить запуск программы. Пока что нужно указывать полный путь к основному файлу:
Чтобы исправить ошибку и запускать Sen2Cor по команде
В конец файла
Первая строка — комментарий, чтобы помнить, зачем нужна вторая. Вторая строка при каждом запуске системы выполняет скрипт, содержащийся в файле
Чтобы изменения в
Ещё можно изменить место, куда будет установлена программа. Для этого нужно при запуске установщика указать опцию
установит Sen2Cor в
Итак, мы установили Sen2Cor и сделали так, что он запускается по команде
После нажатия на Enter можно отдохнуть, потому что обработка занимает довольно много времени (на Яндекс.Облаке с Intel Cascade Lake и гарантированной долей 5% CPU — около часа). Sen2Cor выводит в консоль информацию о ходе работы, так что вы будете примерно понимать, что в данный момент делает программа.
Когда программа завершит работу, в
Теперь разберёмся, что делает программа и что за папку мы получили. Для этого нужно рассмотреть структуру снимков Sentinel-2.
Снимок со спутника Sentinel-2 — это zip-архив размером в несколько сотен мегабайт. В нашем случае архив называется L1C_T40VFJ_A016162_20180727T071939.zip. В названии закодирована информация: уровень обработки (L1C), код, обозначающий территорию (T40VFJ), номер орбиты (A016162), дата и время съёмки. Внутри этого архива есть папка с длинным названием, которое заканчивается на .SAFE. В папке *.SAFE есть папка GRANULE, в ней — ещё одна папка с длинным названием, внутри которой находится папка IMG_DATA, а в ней — 14 изображений в формате jp2. Среди них есть 13 пронумерованных — их названия заканчиваются на B01-B12 (плюс ещё одно с номером B8A). Это тайлы — снимки земной поверхности, сделанные на определённых длинах волн. Например, B04 — это снимок в красном диапазоне, а B08 — в ближнем инфракрасном, и вместе эти два снимка можно использовать для расчёта такого известного индекса, как NDVI. Название 14-го изображения заканчивается на TCI, что означает True Color Image — это полноцветный снимок, то есть примерно такой, какой получился бы на обычный фотоаппарат.
Sen2Cor получает в качестве исходных данных папку *.SAFE — именно она указывается в качестве единственного обязательного параметра при запуске программы. Если вместо папки *.SAFE указать что-то другое, например, исходный архив со снимком или конкретный тайл, то программа не запустится.
Дело в том, что для атмосферной коррекции используются не только сами тайлы, но и метаданные, а они находятся в файлах внутри папки *.SAFE, а не в тайлах.
Результатом работы программы также является папка *.SAFE с похожей структурой: внутри есть папка GRANULE, внутри неё — ещё одна папка, в которой находится папка IMG_DATA, а в ней скорректированные тайлы. Тайлы сгруппированы по пространственному разрешению: в папке R10m находятся те, у которых пространственное разрешение составляет 10 метров, в R20m — те, где разрешение 20 метров, в R60m — 60 метров. При определённых настройках какие-то разрешения не обрабатываются и соответствующие им папки не создаются — об этом чуть ниже.
Название папки *.SAFE, получающейся в результате, отличается от названия исходной только одним: в начале вместо _MSIL1C_ указано _MSIL2A_. L1C и L2A — это коды уровня обработки. Уровень L1C означает, что снимок обработан до уровня Top-of-Atmosphere reflectance, то есть значения пикселей на снимке соответствуют отражению, зафиксированному у верхней границы атмосферы — там, где летает спутник. Уровень L2A — это обработка до уровня Bottom-of-Atmoshpere reflectance, то есть до значений отражения у поверхности Земли — так, как будто атмосфера абсолютно прозрачна. В реальности это, конечно, не так, и атмосферная коррекция позволяет убрать только часть искажений, возникающих при прохождении света через атмосферу, но в целом значения Bottom-of-Atmosphere reflectance больше соответствуют реальному отражению от земной поверхности, чем значения Top-of-Atmosphere reflectance.
Помимо скорректированных тайлов, Sen2Cor производит ещё несколько изображений: полноцветное (TCI), карты аэрозольной оптической плотности атмосферы (AOT — Aerosol Optical Thickness) и содержания водяного пара (WV — Water Vapour), карту тематической классификации типов поверхности (SC — Scene Classification). Они также находятся в папке IMG_DATA в каталогах для соответствующего пространственного разрешения.
Если нужно, чтобы папка с результатом работы программы называлась не *.SAFE, а по-другому, то можно самостоятельно указать название с помощью опции
— и скорректированный снимок окажется в каталоге
Ещё одна полезная опция — это
При запуске с такими параметрами Sen2Cor обработает снимок и создаст скорректированные тайлы с разрешением 60 метров. В отличие от стандартного запуска, обработка занимает намного меньше времени — чуть больше четырёх минут. Расход памяти тоже меньше, поэтому если запуск со стандартным разрешением закончился ошибкой из-за нехватки памяти, то можно указать разрешение 60 метров. В папке IMG_DATA будет находиться только папка R60m, а внутри неё — тайлы с разрешением 60 метров и некоторые другие изображения: полноцветное, тематическая карта и карта содержания водяного пара.
Мы обработали спутниковый снимок с помощью Sen2Cor, используя настройки по умолчанию. Разрешение и папку для сохранения результатов работы можно поменять с помощью опций
Если запустить Sen2Cor и не указать путь к конфигурационному файлу, как мы делали раньше, то будет использоваться стандартный конфигурационный файл. Стандартным конфигурационный файл находится в домашнем каталоге — в нашем случае в папке /
Можно отредактировать напрямую стандартный конфигурационный файл, но лучше скопировать его и явно указать при запуске программы, что нужно использовать другой конфигурационный файл. Скопируем L2A_GIPP.xml в
Обратите внимание, что опция для конфигурационного файла называется
В конфигурационном файле много разных параметров. Рассмотрим некоторые из них.
Если Sen2Cor увидит, что в
Опция
Опция
Если DEM не используется, то следует указать параметр
Ещё два параметра, имеющие отношение к учёту рельефа — это
Параметр
Параметры
Параметр
В принципе все три параметра —
Параметр
Таким образом, в данной статье мы рассмотрели следующие вопросы: как установить Sen2Cor, как запустить его с настройками по умолчанию, как изменить некоторые параметры работы программы с помощью опций командной строки и конфигурационного файла. Для более глубокого изучения Sen2Cor можно обратиться к официальной документации, которая размещена на той же странице, что и установщики. Официальная документация включает четыре документа: более простые и понятные Release Note и Software User Manual и довольно сложные технические Product Definition и Input Output Data Definition. Последний файл также включает «The full reference of GIPP» в качестве вложенного pdf-файла. Полагаю, что технические специалисты найдут в этих документах ещё много полезного.
В магистратуре мне понадобилось сделать атмосферную коррекцию снимков со спутника Sentinel-2. Магистратура по экологии, поэтому можно было не углубляться в физику и математику, а использовать готовый инструмент. Такой инструмент нашёлся — Sen2Cor.
Что такое Sentinel-2
Sentinel-2 — пара спутников, запущенных Европейским космическим агентством (ESA) в 2015 году. Снимают в 13 диапазонах, пролетают над одним и тем же местом примерно раз в неделю. Область съёмки — все континенты, прибрежные зоны и внутренние моря. Каждый снимок охватывает территорию 100 на 100 километров. Максимальное пространственное разрешение — 10 метров на пиксель. Снимки распространяются бесплатно — их можно скачать после регистрации через Copernicus Open Access Hub или USGS Earth Explorer.
Проблема в том, что понятной инструкции для Sen2Cor нет. Авторы учебников по геоинформатике не лезут в такие дебри, как работа с конкретными программами, а авторы научных статей, напротив, полагают, что коррекция снимков — слишком простая часть методики, поэтому не описывают её подробно. На сайтах «для чайников» (и не совсем для чайников) о Sen2Cor тоже не пишут. Официальная документация запутанная: достаточно сказать, что раздел «Установка» на 26-й странице «Руководства пользователя» сразу отсылает к 60-й странице Release Notes. Чтобы разобраться, мне потребовалось время.
Я решил написать понятное руководство по установке, запуску и настройке Sen2Cor. Руководство ориентировано на биологов, экологов, специалистов по сельскому хозяйству и всех тех, кому может понадобиться обработка спутниковых снимков, но для кого она не является основной задачей. По сути, я делюсь собственным опытом. Абсолютную правильность и полноту не гарантирую. Специалисты по геоинформатике, думаю, сами мне что-то посоветуют.
Строго говоря, Sen2Cor делает не только атмосферную коррекцию, но и поправку на угол восхождения Солнца и рельеф местности, а также тематическую классификацию (scene classification), но для меня важнее всего была атмосферная коррекция. Поэтому для простоты я иногда вместо «обработка» пишу «атмосферная коррекция», хотя это неточно.
Sen2Cor работает в трёх режимах: как отдельное консольное приложение, как плагин в составе Sentinel-2 Toolbox и как консольное приложение, используемое в PDGS (Payload Data Ground Segment). PDGS — это наземный центр обработки данных, получаемых со спутников. Находится он в Италии в исследовательском институте. Теоретически можно запустить Sen2Cor в том же режиме, в котором его запускают в центре обработки данных, но для запуска понадобятся данные, которые просто так в интернете не скачать, поэтому мы данный вариант рассматривать не будем. Sentinel-2 Tolobox тоже обойдём стороной, потому что с этой программой я не работал. Она с графическим интерфейсом, поэтому полагаю, что разобраться в её работе несложно. Итак, в данной статье описано, как использовать Sen2Cor в режиме консольной программы.
Sen2Cor работает в 64-битных Windows, MacOS и Linux. У меня Linux, поэтому команды буду показывать на примере Linux. Впрочем, разница только в установщиках и в путях к файлам.
Sen2Cor требует 4 Гб оперативной памяти. Если меньше, то он запустится, но может аварийно завершиться на середине обработки. Расход оперативной памяти зависит от разрешения производимых снимков, поэтому если памяти мало и программа из-за этого выдаёт ошибку, то можно запустить обработку с меньшим разрешением. О том, как это сделать, написано далее. Аналогичных жёстких требований к процессору нет, но чем слабее процессор, тем больше времени займёт обработка.
Установка
Нужно скачать установщик и запустить его. Sen2Cor написан на Python, однако, интерпретатор и все необходимые пакеты находятся в установщике, поэтому самому устанавливать Python и настраивать окружение не нужно.
Предположим, что у нас есть пользователь user с домашним каталогом
/home/user
. Создадим в домашнем каталоге папку spaceshots
, в которой будем работать со снимками. Полный путь к папке будет /home/user/spaceshots
.Далее загрузим и запустим установщик. Открываем страницу Sen2Cor на сайте инструментов Европейского космического агентства. Есть две версии программы: 2.5.5 и 2.8. Лучше устанавливать 2.8: она расходует меньше оперативной памяти и содержит меньше ошибок. Версия 2.5.5 может понадобиться, если нужно обработать снимки, сделанные по старым спецификациям. Нажмем на «Sen2Cor v2.8». В конце страницы в пункте «Standalone Installers» находятся ссылки для скачивания установщиков. Загружаем тот, который подходит для нашей операционной системы. В данном случае это «Linux installer: Sen2Cor-02.08.00-Linux64.run». Сохраняем файл в
/home/user/spaceshots
.Далее открываем консоль, перемещаемся в каталог
spaceshots
и запускаем установщик.$ cd ~/spaceshots
$ ./Sen2Cor-02.08.00-Linux64.run
По умолчанию программа устанавливается в текущий каталог. В нём создаётся папка
Sen2Cor-02.08.00-Linux64
, куда извлекаются все файлы программы. По большому счёту установка сводится к распаковке архива. Кроме того, в домашнем каталоге создаётся папка для конфигурационных файлов и логов: /home/user/sen2cor/2.8
.Если ошибок нет, то в консоли должна появиться надпись
«Congratulations, Installation successful...»
и предложение протестировать установку. Сделаем тестовый запуск:$ /home/user/spaceshots/Sen2Cor-02.08.00-Linux64/bin/L2A_Process -h
В этой команде
/home/user/spaceshots/Sen2Cor-02.08.00-Linux64
— каталог, куда установился Sen2Cor. В папке bin
находятся основные запускаемые файлы программы, в том числе главный файл L2A_Process
. Опция -h
говорит, что нужно показать справочную страницу. В результате выполнения команды в консоли должно появиться примерно следующее:usage: L2A_Process.py [-h] [--mode MODE] [--resolution {10,20,60}]
[--datastrip DATASTRIP] [--tile TILE]
[--output_dir OUTPUT_DIR] [--work_dir WORK_DIR]
[--img_database_dir IMG_DATABASE_DIR]
[--res_database_dir RES_DATABASE_DIR]
[--processing_centre PROCESSING_CENTRE]
[--archiving_centre ARCHIVING_CENTRE]
[--processing_baseline PROCESSING_BASELINE] [--raw]
[--tif] [--sc_only] [--cr_only] [--debug]
[--GIP_L2A GIP_L2A] [--GIP_L2A_SC GIP_L2A_SC]
[--GIP_L2A_AC GIP_L2A_AC] [--GIP_L2A_PB GIP_L2A_PB]
input_dir
Sentinel-2 Level 2A Processor (Sen2Cor). Version: 2.8.0, created: 2019.02.20,
supporting Level-1C product version 14.2 - 14.5.
…
Если появилось, то установка прошла нормально и программа готова к использованию. Единственное, что ещё не помешает сделать — упростить запуск программы. Пока что нужно указывать полный путь к основному файлу:
/home/user/spaceshots/Sen2Cor-02.08.00-Linux64/bin/L2A_Process
. Это неудобно. Гораздо проще писать просто L2A_Process
. Однако если сделать так прямо сейчас, то появится ошибка:$ L2A_Process
bash: L2A_Process: команда не найдена
Чтобы исправить ошибку и запускать Sen2Cor по команде
L2A_Process
, нужно добавить одну команду в файл .bashrc
, который находится в домашнем каталоге (в нашем случае — по адресу /home/user/.bashrc
). Это скрытый файл, поэтому перед тем как открыть его, нужно включить в файловом менеджере показ скрытых файлов.В конец файла
.bashrc
добавим следующие строки:# Sen2Cor processor (v. 2.8.0)
source /home/user/spaceshots/Sen2Cor-02.08.00-Linux64/L2A_Bashrc
Первая строка — комментарий, чтобы помнить, зачем нужна вторая. Вторая строка при каждом запуске системы выполняет скрипт, содержащийся в файле
L2A_Bashrc
. Этот скрипт меняет некоторые переменные окружения так, что команда L2A_Process
становится доступна отовсюду, и указывать полный путь к ней не нужно.Чтобы изменения в
.bashrc
вступили в силу, нужно вернуться в консоль и выполнить команду$ source ~/.bashrc
Ещё можно изменить место, куда будет установлена программа. Для этого нужно при запуске установщика указать опцию
--target
. Например, команда# ./Sen2Cor-02.08.00-Linux64.run --target /usr/share/sen2cor
установит Sen2Cor в
/usr/share/sen2cor
. Мы запускаем команду от суперпользователя, потому что обычный пользователь, как правило, не может записывать файлы в /usr
. Правда, в таком случае придётся потом запускать Sen2Cor с правами суперпользователя или менять права доступа к /usr/share/sen2cor
.
Как установить в MacOS и Windows
В MacOS программа устанавливается так же, как в Linux.
В Windows установщик — это zip-архив, который нужно распаковать. При запуске вместо
Папка с конфигурацией и логами в Windows тоже будет находиться в домашнем каталоге пользователя:
Чтобы не указывать полный путь к запускаемому файлу, а писать просто
В Windows установщик — это zip-архив, который нужно распаковать. При запуске вместо
L2A_Process
указывается L2A_Process.bat
, и он находится не в папке bin
, а сразу в той папке, в которую установлена программа:C:\Users\user\spaceshots\Sen2Cor-02.08.00-Linux64/L2A_Process.bat -h
Папка с конфигурацией и логами в Windows тоже будет находиться в домашнем каталоге пользователя:
С:\Users\user\sen2cor\2.8
. Она создаётся при первом запуске программы.Чтобы не указывать полный путь к запускаемому файлу, а писать просто
L2A_Process.bat
, в Windows нужно добавить путь к файлу L2A_Bashrc.bat
в PATH
.Обработка снимка
Итак, мы установили Sen2Cor и сделали так, что он запускается по команде
L2A_Process
. Теперь сделаем атмосферную коррекцию. Предположим, что спутниковый снимок мы уже скачали и распаковали в /home/user/spaceshots
. Я взял снимок местности к западу от Екатеринбурга, сделанный 27 июля 2018 года. Файл со снимком называется L1C_T40VFJ_A016162_20180727T071939.zip. После распаковки появилась папка S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE. Тогда для атмосферной коррекции нужно выполнить такую команду:$ L2A_Process S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE/
После нажатия на Enter можно отдохнуть, потому что обработка занимает довольно много времени (на Яндекс.Облаке с Intel Cascade Lake и гарантированной долей 5% CPU — около часа). Sen2Cor выводит в консоль информацию о ходе работы, так что вы будете примерно понимать, что в данный момент делает программа.
Начало лога в консоли
Sentinel-2 Level 2A Processor (Sen2Cor). Version: 2.8.0, created: 2019.02.20, supporting Level-1C product version 14.2 - 14.5 started ...
Product version: 14.5
Operation mode: TOOLBOX
Processing baseline: 99.99
Progress[%]: 0.00 : Generating datastrip metadata
L1C datastrip found, L2A datastrip successfully generated
Selected resolution: 60 m
Progress[%]: 1.13 : PID-4202, L2A_ProcessTile: processing with resolution 60 m, elapsed time[s]: 2.299, total: 0:00:10.789933
Progress[%]: 1.13 : PID-4202, L2A_ProcessTile: start of pre processing, elapsed time[s]: 0.000, total: 0:00:10.790432
Progress[%]: 1.27 : PID-4202, L2A_Tables: start import, elapsed time[s]: 0.278, total: 0:00:11.068694
Progress[%]: 1.69 : PID-4202, L2A_Tables: band B01 imported, elapsed time[s]: 0.851, total: 0:00:11.919562
Progress[%]: 9.39 : PID-4202, L2A_Tables: band B02 imported, elapsed time[s]: 15.618, total: 0:00:27.537532
Progress[%]: 17.16 : PID-4202, L2A_Tables: band B03 imported, elapsed time[s]: 15.743, total: 0:00:43.280800
…
Когда программа завершит работу, в
/home/user/spaceshots
рядом с S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE/ должна появиться ещё одна папка с очень похожим названием — S2A_MSIL2A_20180727T071621_N9999_R006_T40VFJ_20200507T083341.SAFEТеперь разберёмся, что делает программа и что за папку мы получили. Для этого нужно рассмотреть структуру снимков Sentinel-2.
Снимок со спутника Sentinel-2 — это zip-архив размером в несколько сотен мегабайт. В нашем случае архив называется L1C_T40VFJ_A016162_20180727T071939.zip. В названии закодирована информация: уровень обработки (L1C), код, обозначающий территорию (T40VFJ), номер орбиты (A016162), дата и время съёмки. Внутри этого архива есть папка с длинным названием, которое заканчивается на .SAFE. В папке *.SAFE есть папка GRANULE, в ней — ещё одна папка с длинным названием, внутри которой находится папка IMG_DATA, а в ней — 14 изображений в формате jp2. Среди них есть 13 пронумерованных — их названия заканчиваются на B01-B12 (плюс ещё одно с номером B8A). Это тайлы — снимки земной поверхности, сделанные на определённых длинах волн. Например, B04 — это снимок в красном диапазоне, а B08 — в ближнем инфракрасном, и вместе эти два снимка можно использовать для расчёта такого известного индекса, как NDVI. Название 14-го изображения заканчивается на TCI, что означает True Color Image — это полноцветный снимок, то есть примерно такой, какой получился бы на обычный фотоаппарат.
Sen2Cor получает в качестве исходных данных папку *.SAFE — именно она указывается в качестве единственного обязательного параметра при запуске программы. Если вместо папки *.SAFE указать что-то другое, например, исходный архив со снимком или конкретный тайл, то программа не запустится.
$ L2A_Process T40VFJ_20180727T071621_B04.jp2
Product metadata file cannot be read.
Дело в том, что для атмосферной коррекции используются не только сами тайлы, но и метаданные, а они находятся в файлах внутри папки *.SAFE, а не в тайлах.
Результатом работы программы также является папка *.SAFE с похожей структурой: внутри есть папка GRANULE, внутри неё — ещё одна папка, в которой находится папка IMG_DATA, а в ней скорректированные тайлы. Тайлы сгруппированы по пространственному разрешению: в папке R10m находятся те, у которых пространственное разрешение составляет 10 метров, в R20m — те, где разрешение 20 метров, в R60m — 60 метров. При определённых настройках какие-то разрешения не обрабатываются и соответствующие им папки не создаются — об этом чуть ниже.
Название папки *.SAFE, получающейся в результате, отличается от названия исходной только одним: в начале вместо _MSIL1C_ указано _MSIL2A_. L1C и L2A — это коды уровня обработки. Уровень L1C означает, что снимок обработан до уровня Top-of-Atmosphere reflectance, то есть значения пикселей на снимке соответствуют отражению, зафиксированному у верхней границы атмосферы — там, где летает спутник. Уровень L2A — это обработка до уровня Bottom-of-Atmoshpere reflectance, то есть до значений отражения у поверхности Земли — так, как будто атмосфера абсолютно прозрачна. В реальности это, конечно, не так, и атмосферная коррекция позволяет убрать только часть искажений, возникающих при прохождении света через атмосферу, но в целом значения Bottom-of-Atmosphere reflectance больше соответствуют реальному отражению от земной поверхности, чем значения Top-of-Atmosphere reflectance.
Помимо скорректированных тайлов, Sen2Cor производит ещё несколько изображений: полноцветное (TCI), карты аэрозольной оптической плотности атмосферы (AOT — Aerosol Optical Thickness) и содержания водяного пара (WV — Water Vapour), карту тематической классификации типов поверхности (SC — Scene Classification). Они также находятся в папке IMG_DATA в каталогах для соответствующего пространственного разрешения.
Если нужно, чтобы папка с результатом работы программы называлась не *.SAFE, а по-другому, то можно самостоятельно указать название с помощью опции
--output_dir
. Предположим, что мы запускаем Sen2Cor три раза с разными настройками и хотим сохранить результаты в папки test1, test2 и test3. Тогда указываем --output_dir
при запуске:
$ L2A_Process --output_dir /home/user/spaceshots/test1 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE
— и скорректированный снимок окажется в каталоге
/home/user/spaceshots/test1
. При втором и третьем запуске указываем соответственно --output_dir /home/user/spaceshots/test2
и --output_dir /home/user/spaceshots/test3
.Ещё одна полезная опция — это
--resolution
. Она позволяет установить пространственное разрешение тайлов, которые будут получены в результате работы программы. Sen2Cor может создавать изображения с разным пространственным разрешением — 10, 20 или 60 метров на пиксель. По умолчанию делаются 10 и 20 метров. Предположим, что нам для разведочного анализа достаточно тайлов с разрешением 60 метров на пиксель. Тогда можно указать целевое разрешение с помощью опции --resolution
:$ L2A_Process --resolution 60 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE
При запуске с такими параметрами Sen2Cor обработает снимок и создаст скорректированные тайлы с разрешением 60 метров. В отличие от стандартного запуска, обработка занимает намного меньше времени — чуть больше четырёх минут. Расход памяти тоже меньше, поэтому если запуск со стандартным разрешением закончился ошибкой из-за нехватки памяти, то можно указать разрешение 60 метров. В папке IMG_DATA будет находиться только папка R60m, а внутри неё — тайлы с разрешением 60 метров и некоторые другие изображения: полноцветное, тематическая карта и карта содержания водяного пара.
Конфигурационный файл
Мы обработали спутниковый снимок с помощью Sen2Cor, используя настройки по умолчанию. Разрешение и папку для сохранения результатов работы можно поменять с помощью опций
--resolution
и --output_dir
. Есть ещё несколько опций командной строки, однако, с их помощью можно настроить не всё. Есть множество других параметров, важных при обработке, например: учитывать ли рельеф, удалять ли облака, как оценивать состояние атмосферы. В Sen2Cor они настраиваются с помощью конфигурационного файла.Если запустить Sen2Cor и не указать путь к конфигурационному файлу, как мы делали раньше, то будет использоваться стандартный конфигурационный файл. Стандартным конфигурационный файл находится в домашнем каталоге — в нашем случае в папке /
home/user/sen2cor/2.8/cfg
. Файл называется L2A_GIPP.xml
. L2A означает уровень обработки, GIPP расшифровывается как Ground Image Processing Parameters — параметры наземной обработки изображения. Это обычный xml-файл, внутри которого есть несколько секций, а в секциях — элементы для разных настроек. Для каждой настройки прямо в файле написано пояснение. Кроме того, подробное описание настроек содержится в документации — правда, разобраться в ней непросто. Можно отредактировать напрямую стандартный конфигурационный файл, но лучше скопировать его и явно указать при запуске программы, что нужно использовать другой конфигурационный файл. Скопируем L2A_GIPP.xml в
/home/user/spaceshots
, переименуем в custom.xml и запустим программу с этим конфигурационным файлом:$ L2A_Process --GIP_L2A /home/user/spaceshots/custom.xml --resolution 60 S2A_MSIL1C_20180727T071621_N0206_R006_T40VFJ_20180727T092607.SAFE
Обратите внимание, что опция для конфигурационного файла называется
--GIP_L2A
— с одной буквой «P». Поскольку мы не редактировали конфигурационный файл, то процесс и результат работы программы ничем не отличаются от запуска с конфигурацией по умолчанию.В конфигурационном файле много разных параметров. Рассмотрим некоторые из них.
Логи
Log_Level
— параметр, который определяет, насколько подробным будет журнал работы программы. Лог отображается в консоли во время работы и дополнительно сохраняется в папке для логов (в нашем случае — /home/user/sen2cor/2.8/log
). Значение по умолчанию — INFO. Обычно нет необходимости менять эту настройку, если вы не столкнулись с ошибками в работе программы.Учёт рельефа и угла восхождения Солнца
DEM_Directory
— папка, в которой находится цифровая карта рельефа (DEM — Digital Elevetion Model). Результаты обработки с использованием цифровой карты рельефа обычно получаются более точными. По умолчанию — NONE, то есть рельеф не учитывается. Если у вас есть своя цифровая карта рельефа, то указываете путь к ней. Папка для DEM должна находиться там же, где и папки cfg
и log
, то есть в нашем случае — в каталоге /home/user/sen2cor/2.8
. Следовательно, если у вас есть цифровая карта рельефа, то нужно поместить её в /home/user/sen2cor/2.8/dem
и в DEM_Directory указать dem. Если её нет, но все равно хочется использовать, то можно указать любой путь (например, тоже написать dem) и настроить следующий параметр.DEM_Reference
— URL, с которого нужно скачать цифровую модель рельефа, если её нет в папке, указанной в предыдущем пункте. Разработчики Sen2Cor предлагают использовать http://data_public:GDdci@data.cgiar-csi.org/srtm/tiles/GeoTIFF/— это ссылка на STRM DEM, свободно распространяемую цифровую карту рельефа с 90-метровым пространственным разрешением. Учитывая, что масштаб ненамного мельче, чем у самих спутниковых снимков, эта модель должна давать хороший результат.
Если Sen2Cor увидит, что в
DEM_Directory
указано какое-то значение, помимо NONE, то он попытается открыть файлы с картой рельефа из указанного каталога. Если открыть файлы не получится, то он попытается скачать их по URL, указанному в DEM_Reference
. Если не получится скачать, то в логе появится сообщение об ошибке и обработка продолжится без учёта рельефа. Файлы, скачанные с URL, сохраняются в DEM_Directory
и не удаляются после завершения работы программы. Следовательно, если вы захотите ещё раз обработать тот же снимок с той же картой рельефа (например, изменив другие настройки коррекции), то Sen2Cor не будет повторно скачивать цифровую карту рельефа, а воспользуется её офлайн-копией.Опция
Generate_DEM_Output
позволяет получить в результате работы программы отдельный тайл с цифровой картой рельефа. По умолчанию FALSE.Опция
DEM_Terrain_Correction
частично отключает использование цифровой карты рельефа: рельеф по-прежнему будет учитываться при тематической классификации (SC) и построении карты AOT, но не при корректировке значений отражения от поверхности.Если DEM не используется, то следует указать параметр
Altitude
— это средняя высота над уровнем моря в районе, запечатлённом на снимке. Высота указывается в километрах.Ещё два параметра, имеющие отношение к учёту рельефа — это
BRDF_Correction
и BRDF_Lower_Bound
. BRDF расшифровывается как bidirectional reflectance distribution function и означает уравнение, моделирующее отражение света от непрозрачной поверхности. Разные значения BRDF_Correction
соответствует разным значениям одного из коэффициентов в этом уравнении. В официальной документации рекомендуют в большинстве случаев использовать 21. BRDF_Lower_Bound
отвечает за ещё один коэффициент в уравнении, и его можно оставить по умолчанию, за исключением случаев, когда вы точно знаете, почему и зачем его нужно поменять.Красивая картинка
Параметр
Generate_TCI_Output
включает и выключает создание полноцветного изображения. По умолчанию TRUE, но если красивая картинка не нужна, то можно выбрать FALSE.Учёт состояния атмосферы
Параметры
Aerosol_Type
, Mid_Latitude
, Ozone_Content
указывают на состояние атмосферы в момент съёмки. Aerosol_Type
можно установить по территории: если континент, то RURAL, если океан, то MARINE. Mid_Latitude
аналогично определяется по времени года: если летом, то SUMMER, если зимой, то WINTER.Параметр
Ozone_Content
указывает на содержание озона. Содержание озона можно поискать в онлайн-архиве Всемирного центра данных по озону и ультрафиолетовому излучению. На карте можно найти станцию, наиболее близкую к району съёмки, далее скачать набор с данными за нужное время и посмотреть результаты измерений в день съёмки. Однако установить реальный результат измерений в конфигурационном файле нельзя — нужно выбрать одно значение из списка для соответствующего времени года. Следовательно, нужно сначала узнать реально измеренное значение, а потом подобрать наиболее близкое из доступных. Например, по данным станции в Екатеринбурге, 27 июня 2018 года (время съёмки) содержание озона составляло 316 DU. В пояснении в конфигурационном файле указано: для лета в средних широтах доступные варианты — 250, 290, 331 (по умолчанию), 370, 410, 450. Наиболее близкое к 316 — это 331. Оно идёт по умолчанию, поэтому в данном случае можно ничего не менять. Если бы снимок был сделан несколькими днями раньше, когда содержание озона уменьшалось до 302 DU, следовало бы установить Ozone_Content
в 290.В принципе все три параметра —
Aerosol_Type
, Mid_Latitude
, Ozone_Content
— в большинстве случаев можно выставлять по умолчанию — AUTO для Aerosol_Type
и Mid_Latitude
и 0 для Ozone_Content
. В таком случае Sen2Cor сам определит наиболее подходящие значения по метаданным снимка. Удаление облачности
Параметр
Cirrus_Correction
говорит, удалять или нет перистые облака со снимка. Работает в паре с WV_Threshold_Cirrus
— это порог содержания водяного пара, ниже которого удаление облаков автоматически отключается, даже если Cirrus_Correction
установлено в TRUE. Следовательно, если есть основания полагать, что содержание водяного пара в атмосфере в момент съёмки было низкое, но небольшие облака всё же есть, и их нужно удалить, то лучше уменьшить значение WV_Threshold_Cirrus
. WV_Threshold_Cirrus
может быть от 0.1 до 1.Заключение
Таким образом, в данной статье мы рассмотрели следующие вопросы: как установить Sen2Cor, как запустить его с настройками по умолчанию, как изменить некоторые параметры работы программы с помощью опций командной строки и конфигурационного файла. Для более глубокого изучения Sen2Cor можно обратиться к официальной документации, которая размещена на той же странице, что и установщики. Официальная документация включает четыре документа: более простые и понятные Release Note и Software User Manual и довольно сложные технические Product Definition и Input Output Data Definition. Последний файл также включает «The full reference of GIPP» в качестве вложенного pdf-файла. Полагаю, что технические специалисты найдут в этих документах ещё много полезного.