Автоматизация обработки данных Lansat 8

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 17 мар 2014, 21:20

Как выполнить пересчёт исходных материалов Landsat в сопоставимые значения, что необходимо для детального анализа, понятно. Теперь возникла проблема — как выполнить это преобразование для большого числа сцен. Например, имеется архив сцен по одному району за 30 лет и требуется оценить динамику состояния экосистемы за этот период. Число сцен при этом в идеале должно быть тоже равным 30. Однако, т.к. подобрать сцены на одну и ту же дату невозможно, то приходится брать несколько смежных по времени. Затем, так вышло, что изучаемая территория полностью или частично перекрывается несколькими смежными в пространстве сценами. Если всё это учесть, то число сцен, подлежащих обработке, оценивается в 300.

Налицо проблема необходимости автоматизации! Нашёл очень интересную функцию GRASS — i.atcorr. Посмотрев форум по GRASS, увидел, что людям она знакома. Однако, описание функции прямо отсылает к файлу метаданных, прилагаемому к сцене для того чтобы взять из него параметры QCAL, LMINλ, LMAXλ, QCALMIN, QCALMAX. А есть ли возможность автоматизировать и это действие? Ведь формат файлов метаданных формализован. Напрашивается функция (программа, скрипт), которая сама берёт необходимые параметры из текстового файла сцены и применяет их к графическим файлам каналов.

Кто-нибудь знаком с подобными функциями?

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Статьи: 18
Проекты: 4
Репутация: 122
Откуда: Казань

Re: Автоматизация обработки данных Lansat 8

Сообщение KolesovDmitry » 21 мар 2014, 11:00

Константин Силкин писал(а):...
Однако, описание функции прямо отсылает к файлу метаданных, прилагаемому к сцене для того чтобы взять из него параметры QCAL, LMINλ, LMAXλ, QCALMIN, QCALMAX. А есть ли возможность автоматизировать и это действие? Ведь формат файлов метаданных формализован. Напрашивается функция (программа, скрипт), которая сама берёт необходимые параметры из текстового файла сцены и применяет их к графическим файлам каналов.
Я готового скрипта не встречал, но может быть потому, что и не искал. Вообще, извлечение нужных параметров из метафайла делается довольно просто, если вы знакомы с программированием. Начало метафайла --- обычный текст, содержащий оприсание параметров в виде строк. Поэтому все, что требуется от программы --- найти в тексте нужный параметр и выделить его значение. Если использовать командную строку в Linux, то скрипт займет две-три строки кода, что-то вроде такого (проверял на метафайле 7-го ландсата):

Код: Выделить всё

eval $(cat MTL.txt | grep QCAL | tr -d " " )
echo $QCALMAX_BAND1
Первая команда считывает файл MTL.txt, отфильтровывает все строки, содержащие QCAL, удаляет из них пробелы, и интерпретирует как команды. Вторая строка -- пример использования полученной переменной (вывод на экран)

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 21 мар 2014, 20:02

Спасибо, Дмитрий! С программированием знаком. Но делаю это главным образом в MatLab. С Python пока не сталкивался, но похоже пора приступать к освоению… Просто хотел не начинать с изобретательства велосипеда — вдруг что готовое уже имеется. Неужели все, кто рассчитывает NDVI, так вручную параметры и вынимают? Или вообще никто этими параметрами и не забивает себе голову? Однако в связи с появлением Landsat 8 эта проблема встала остро

gamm
Гуру
Сообщения: 2946
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 686
Ваше звание: программист
Откуда: Казань

Re: Автоматизация обработки данных Lansat 8

Сообщение gamm » 21 мар 2014, 20:07

Константин Силкин писал(а):Неужели все, кто рассчитывает NDVI, так вручную параметры и вынимают?
нет, конечно. Все программы, работающие с космическими снимками, позволяют пересчитать "попугаи" (DN) в reflectance/radiance ...

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 21 мар 2014, 20:14

gamm, пожалуйста, поясните, что вы имели в виду. Во-первых, "все программы" — это какие, например? Во-вторых, программы, что вы имели в виду, просто выполняют пересчёт по простой формуле, введённой пользователем (вместе со всеми константами) вручную? Или самостоятельно извлекают значения нужных коэффициентов из файла с метаданными, лежащего в той же папке, что и файлы каналов?
Только что заметил, что тему переместили в форум по GRASS. Не думаю, что имеет смысл ограничиваться только этой ГИС, т.к. могут быть другие программы, с необходимыми возможностями. Поэтому, уважаемый модератор, верните тему, пожалуйста, назад или в другое более подходящее место

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Проекты: 1
Репутация: 18
Откуда: Кострома

Re: Автоматизация обработки данных Lansat 8

Сообщение xen87 » 21 мар 2014, 20:22

Поправьте меня, если я не прав, но чтобы
пересчитать "попугаи" (DN) в reflectance/radiance ...
для Ландсата в Grass можно воспользоваться модулем: i.landsat.toar.
Или я не прав?
Модуль поддерживает: Landsat MSS/TM/ETM+/OLI.

gamm
Гуру
Сообщения: 2946
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 686
Ваше звание: программист
Откуда: Казань

Re: Автоматизация обработки данных Lansat 8

Сообщение gamm » 22 мар 2014, 07:02

Константин Силкин писал(а):gamm, пожалуйста, поясните, что вы имели в виду. Во-первых, "все программы" — это какие, например?
все программы, предназначенные для работы с космоснимками. И это написано у них в инструкции, достаточно ее прочитать (пример см. постом выше) ...

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 22 мар 2014, 07:38

xen87, спасибо! Я правильно понял, что этот модуль сам читает файлы метаданных?

gamm, "пример см. постом выше" — это GRASS?

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Статьи: 18
Проекты: 4
Репутация: 122
Откуда: Казань

Re: Автоматизация обработки данных Lansat 8

Сообщение KolesovDmitry » 22 мар 2014, 09:26

xen87 писал(а):чтобы
пересчитать "попугаи" (DN) в reflectance/radiance ...
для Ландсата в Grass можно воспользоваться модулем: i.landsat.toar.
Точно! При этом модуль может дать гораздо больше, просто пересчет DN.

Аватара пользователя
gimran
Гуру
Сообщения: 1899
Зарегистрирован: 07 июл 2010, 15:43
Статьи: 1
Репутация: 236
Откуда: Уфа

Re: Автоматизация обработки данных Lansat 8

Сообщение gimran » 22 мар 2014, 09:39

i.landsat.toar не всегда корректно читает метафайлы (в некоторых при чтении ошибки есть в самих файлах), на практике сталкивался с этим.

[ Сообщение с мобильного устройства ]

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 24 мар 2014, 11:15

Спасибо, KolesovDmitry и gimran! Похоже функция i.landsat.toar — это то, что нужно. Однако с большим сожалением обнаружил, что SEXTANTE не предоставляет к ней доступ. Можно ли как-то добавить её в SEXTANTE, а, если нет, то как организовать её использование?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 786
Ваше звание: званий не имею
Откуда: Москва

Re: Автоматизация обработки данных Lansat 8

Сообщение Александр Мурый » 24 мар 2014, 11:20

Константин Силкин писал(а):Не думаю, что имеет смысл ограничиваться только этой ГИС, т.к. могут быть другие программы, с необходимыми возможностями. Поэтому, уважаемый модератор, верните тему, пожалуйста, назад или в другое более подходящее место
Ваше сообщение было скопировано сюда, т.к. речь зашла о GRASS. В исходной теме оно осталось.
Редактор материалов, модератор форума

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 24 мар 2014, 11:23

Александр Мурый, я просто спросил совета и GRASS упомянул только ради примера. Ведь совершенно не обязательно, что автоматизация обработки материалов Landsat возможно только в этой ГИС

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 786
Ваше звание: званий не имею
Откуда: Москва

Re: Автоматизация обработки данных Lansat 8

Сообщение Александр Мурый » 24 мар 2014, 11:31

Константин Силкин писал(а):Александр Мурый, я просто спросил совета и GRASS упомянул только ради примера. Ведь совершенно не обязательно, что автоматизация обработки материалов Landsat возможно только в этой ГИС
Совершенно верно. Вот я и оставил исходное сообщение на месте, а про GRASS унёс для отдельного обсуждения. Дабы не городить кучу в одной теме.
Редактор материалов, модератор форума

Константин Силкин
Активный участник
Сообщения: 218
Зарегистрирован: 21 мар 2012, 07:37
Статьи: 3
Репутация: 41
Откуда: Воронеж

Re: Автоматизация обработки данных Lansat 8

Сообщение Константин Силкин » 24 мар 2014, 19:49

xen87 писал(а):Поправьте меня, если я не прав, но чтобы для Ландсата в Grass можно воспользоваться модулем: i.landsat.toar.
Жалко конечно, что SEXTANTE не имеет выхода на эту функцию. Странно только работает она в самой GRASS. Задал все параметры, выполнение закончилось успешно.

Код: Выделить всё

(Mon Mar 24 20:52:31 2014)                                                      
i.landsat.toar --verbose input_prefix=LT51860131986211XXX03_B output_prefix=LT51860131986211XXX03_toar_B metfile=..\p186r013\LT51860131986211XXX03\LT51860131986211XXX03_MTL.txt
Metada file is MTL file: new format
RADIANCE & QUANTIZE from data of the metadata file
 LANDSAT: 5 SENSOR: TM
 ACQUISITION DATE 1986-07-30 [production date 2014-03-04]
   earth-sun distance    = 1.01524789
   solar elevation angle = 40.12529841
   Atmospheric correction: UNCORRECTED
-------------------
 BAND 1 (code 1)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -1.520 to 169.000
   at-sensor radiance = 0.67133858 * DN + -2.191
   mean solar exoatmospheric irradiance (ESUN): 1957.000
   at-sensor reflectance = radiance / 389.48758
-------------------
 BAND 2 (code 2)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -2.840 to 333.000
   at-sensor radiance = 1.32220472 * DN + -4.162
   mean solar exoatmospheric irradiance (ESUN): 1826.000
   at-sensor reflectance = radiance / 363.41559
-------------------
 BAND 3 (code 3)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -1.170 to 264.000
   at-sensor radiance = 1.04397638 * DN + -2.214
   mean solar exoatmospheric irradiance (ESUN): 1554.000
   at-sensor reflectance = radiance / 309.28140
-------------------
 BAND 4 (code 4)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -1.510 to 221.000
   at-sensor radiance = 0.87602362 * DN + -2.386
   mean solar exoatmospheric irradiance (ESUN): 1036.000
   at-sensor reflectance = radiance / 206.18760
-------------------
 BAND 5 (code 5)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -0.370 to 30.200
   at-sensor radiance = 0.12035433 * DN + -0.490
   mean solar exoatmospheric irradiance (ESUN): 215.000
   at-sensor reflectance = radiance / 42.78990
-------------------
 BAND 6 thermal (code 6)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): 1.238 to 15.303
   at-sensor radiance = 0.05537402 * DN + 1.183
   at-sensor temperature = 1260.56000 / log[(607.76000 /
radiance) + 1.0]
-------------------
 BAND 7 (code 7)
   calibrated digital number (DN): 1.0 to 255.0
   calibration constants (L): -0.150 to 16.500
   at-sensor radiance = 0.06555118 * DN + -0.216
   mean solar exoatmospheric irradiance (ESUN): 80.670
   at-sensor reflectance = radiance / 16.05517
-------------------
Calculating...
WARNING: 'cell/LT51860131986211XXX03_B1' был найден в нескольких наборах (также найден в <PERMANENT>)
WARNING: Используется<LT51860131986211XXX03_B1@Const>
Writing reflectance of <LT51860131986211XXX03_B1> to <LT51860131986211XXX03_toar_B1>...
Writing reflectance of <LT51860131986211XXX03_B2> to <LT51860131986211XXX03_toar_B2>...
Writing reflectance of <LT51860131986211XXX03_B3> to <LT51860131986211XXX03_toar_B3>...
Writing reflectance of <LT51860131986211XXX03_B4> to <LT51860131986211XXX03_toar_B4>...
Writing reflectance of <LT51860131986211XXX03_B5> to <LT51860131986211XXX03_toar_B5>...
WARNING: Растровый слой <LT51860131986211XXX03_B6> не найден
WARNING: Растровый слой <LT51860131986211XXX03_B7> не найден
(Mon Mar 24 20:56:57 2014) Операция завершена (4 min 25 sec)       
А дальше что, где результат? Я полагал, что должны были быть созданы растровые файлы, но не нашёл. В проекте ничего не добавилось

Ответить

Вернуться в «GRASS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость