Спутник ДЗЗ
3.13K subscribers
2.44K photos
139 videos
187 files
2.19K links
Человеческим языком о дистанционном зондировании Земли.

Обратная связь: @sputnikDZZ_bot
加入频道
GEE-10. Библиотека Awesome Spectral Indices

Код примера

В прошлый раз мы вычисляли вегетационные индексы. Есть способ сделать это еще проще — с помощью библиотеки Awesome Spectral Indices (документация).

Создадим коллекцию снимков Sentinel-2 L2A, покрывающих интересующий район (ROI — region of interest):

var col = ee.ImageCollection('COPERNICUS/S2_SR')
.filterDate('2021-06-01', '2021-09-01')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))
.filter(ee.Filter.bounds(ROI))
.select('B.*');

Вычислим медиану коллекции и обрежем ее по границам ROI. Медиана коллекции — снимок, каналы которого являются медианами соответствующих каналов коллекции (вычисления в каждом канале происходят попиксельно). В итоге получим некий типичный летний снимок Небраски.

var image = col.median().clip(ROI);

Загружаем библиотеку Awesome Spectral Indices. Путь к ней указан в параметре функции require.

var spectral = require("users/dmlmont/spectral:spectral");

Awesome Spectral Indices — сторонняя библиотека. Она создана не разработчиками Earth Engine, а пользователем с ником dmlmont. Вы можете создать свою библиотеку и загрузить ее на GEE, но об этом поговорим позже. Сейчас же масштабируем значения пикселей.

var image = spectral.scale(image, "COPERNICUS/S2_SR");

Помните, у нас была функция applyScaleFactors для масштабирования значений пикселей? scale из библиотеки spectral делает то же самое.

Зададим параметры для расчета индексов. Мы хотим рассчитать NDVI, NDWI и EVI. Для этого понадобится несколько каналов и числовых констант.

Список спектральных индексов можно посмотреть здесь. В списке приведена формула, каждой букве которой мы сопоставим канал или число.

var parameters = {
"N": image.select("B8"),
"R": image.select("B4"),
"G": image.select("B3"),
"B": image.select("B2"),
"L": 1,
"g": 2.5,
"C1": 6,
"C2": 7.5
};

Вот формула для расчета EVI:

2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))

А вот как она выглядит в списке:

g * ((N - R) / (N + C1 * R - C2 * B + L))

Думаю, принцип понятен. Зеленый канал нужен нам для расчета NDWI.

spectral.computeIndex вычисляет индексы по списку и добавляет к снимку.

var image = spectral.computeIndex(image, ["NDVI","NDWI","EVI"], parameters);

Для GEE Python API есть несколько библиотек, реализующих расчет спектральных индексов.

#GEE #индексы
Обнаружился пакет R для доступа к немецким метеоданнымrdwd. Хотя, там все и так просто.

Python’овский пакет тоже есть: Wetterdienst. Он служит для доступа к открытым метеоданным разных стран (список). В R это делается с помощью отдельных пакетов для каждого источника.

#R #python #погода
⭐️ СТРАНЫ / КОМПАНИИ / СПУТНИКИ

Страны: #австралия #германия #индия #иран #испания #канада #китай #португалия #россия #США #япония и т. п.
Но:
#корея обозначает Северную и Южную Кореи
#РБ — Республика Беларусь
#UK — Великобритания

Компании: #planet #maxar

Спутники: #landsat #sentinel1 #sentinel2

⭐️ ДЗЗ

Методы и приборы
#альтиметр
#гиперспектр — гиперспектральная оптическая съемка
#лидар
#оптика — мультиспектральная оптическая съемка
#радиометр — микроволновой радиометр
#dnb — ночная съёмка (day / night band)
#SIF — солнечно-индуцированная флуоресценция хлорофилла
#ro — радиозатменный метод
#SAR — радарная съемка
#InSAR — радарная интерферометрия
#LST — съемка в тепловом инфракрасном диапазоне
#GNSSR — ГНСС-рефлектометрия
#sigint — радиоэлектронная разведка

Виды орбит: #ГСО — геостационарная, #VLEO — сверхнизкая

#основы — обучающие материалы по ДЗЗ
#обучение курсы, обучающие сервисы и т. п.
#история — в основном, история ДЗЗ
#индексы — спектральные индексы
#комбинация — комбинации каналов

Данные
#данные — коллекции данных ДЗЗ, наземных данных, карты и т.п.
#датасет — набор данных для машинного обучения
Дополнительные хештеги, описывающие данные:
#LULC — Land Use & Land Cover
#осадки
#SST — Sea Surface Temperature
#nrt — (near real time) изображения, получаемые в режиме, близком к реальном времени
#debris — космический мусор
#границы — административные границы
#DEM — цифровая модель рельефа (ЦМР)
#keyhole — рассекреченные снимки разведспутников

Литература, справочная информация
#справка — спектральные каналы, орбиты спутников, поиск данных и т.п.
#обзор
#книга — текст книги прикреплён к сообщению.
#журнал — статьи по ДЗЗ, опубликованные в выпуске журнала
Дополнительные хештеги:
#наблюдение — ресурсы для наблюдения спутников и орбиты спутников
#космодромы

#конференции — анонс конференций/семинаров/школ, посвященных ДЗЗ и анализ их материалов.
#конкурсы — анонс конкурсов/чемпионатов/олимпиад.
#МВК — материалы заседаний Межведомственной комиссии (МВК) по использованию результатов космической деятельности.

#снимки — поучительные (хоть в чем-то интересные) снимки, первые снимки

Программные инструменты / Языки
#нейронки #софт #GEE #R #tool #python #ГИС
#ИИ #FM — Foundation Model (Remote Sensing Foundation Model)

⭐️ ОТРАСЛИ / ТЕМАТИЧЕСКИЕ ЗАДАЧИ

#археология #атмосфера #вода #война #засуха #климат #лед #лес #нефть #океан #оползни #наводнение #пожары #почва #растительность #севморпуть #сельхоз #снег
#AGB — надземная биомасса
#ЧС — мониторинг стихийных бедствий и катастроф
#GHG — парниковые газы
Отдельные газы: #CO2 #NO2
#энергетика — космическая энергетика
#SSA — Space Situational Awareness
This media is not supported in your browser
VIEW IN TELEGRAM
Python-библиотека StreamJoy (https://ahuang11.github.io/streamjoy/) создаёт анимации MP4/GIF на основе списка изображений, каталогов, xr.Dataset, pd.DataFrame, hv.DynamicMap/HoloMap и даже напрямую из URL.

Анимация снимков геостационарного спутника Himawari:

from streamjoy import stream

if __name__ == "__main__":
URL_FMT = "https://www.goes.noaa.gov/dimg/jma/fd/vis/{i}.gif"
resources = [URL_FMT.format(i=i) for i in range(1, 11)]
stream(resources, uri="goes.gif") # .gif and .mp4 supported


#python
DeepForest (https://deepforest.readthedocs.io/en/latest/) — это пакет на языке Python для обнаружения и классификации объектов на RGB-снимках (сверх)высокого пространственного разрешения. Он использует сети глубокого обучения и построен на основе модуля обнаружения объектов из пакета torchvision.

DeepForest предназначен для упрощения обучения моделей обнаружения природных объектов, в частности, деревьев. Разработчики старались сделать его простым, настраиваемым и модульным, скрывая ненужные сложности от пользователя. Вот, например, как выглядит разметка снимка предобученной моделью:

from deepforest import main
from deepforest import get_data
import matplotlib.pyplot as plt

model = main.deepforest()
model.use_release()

sample_image_path = get_data("OSBS_029.png")
img = model.predict_image(path=sample_image_path, return_plot=True)

plt.imshow(img[:,:,::-1])


DeepForest содержит две предобученные модели: Bird Detection и Tree Crown Detection.

Пакет неплохо документирован, снабжен примерами использования, а также советами по настройке, обучению и расширению возможностей.

🖥 Пример работы DeepForest в Google Colab (с инсталляцией пакетов)

В документах есть ссылки на публикации с описанием DeepForest, использованные для обучения снимки находятся в открытом доступе. Есть и “сторонние” примеры использования DeepForest:

🔗 Tree crown detection using DeepForest

#нейронки #python #лес
Joerd (https://github.com/tilezen/joerd) — консольная программа для загрузки, объединения и создания тайлов из цифровых моделей рельефа.

🗺 В документации есть список ссылок на источники ЦМР: https://github.com/tilezen/joerd/blob/master/docs/data-sources.md

#DEM #данные #python
CoastSat

CoastSat (http://coastsat.wrl.unsw.edu.au) — это набор программных средств с открытым исходным кодом на языке Python (https://github.com/kvos/CoastSat), который позволяет пользователям получать временные ряды положения береговой линии на любом побережье по всему миру за 39 лет (и далее) на основе общедоступных спутниковых снимков.

#python
Статистика открытых радарных данных Capella [ссылка]

Mark Litwintschik описывает процесс получения открытых данных радарных спутников Capella и классифицирует доступные снимки по регионам мира, форматам, уровням обработки, типу поляризации и т. п.

🌍 Распространение открытых данных спутников Capella.

#SAR #capella #python
This media is not supported in your browser
VIEW IN TELEGRAM
Новые возможности geemap

Д-р. Qiusheng Wu, автор питоновского пакета geemap (https://geemap.org) для работы с Google Earth Engine (GEE) через Python API, сообщил об обновлении пакета.

Теперь с помощью geemap можно создавать интерактивные графики для различных типов данных GEE: feature, image, array, list и table.

#GEE #python
Введение в ГИС-программирование на Python

Д-р. Qiusheng Wu, создатель нескольких известных пакетов Python 🐍 для работы с пространственными данными — geemap, leafmap и segment-geospatial — создал официальный сайт своего курса 📖 “Introduction to GIS Programming“ (https://geog-312.gishub.org/) по обучению применению языка Python для работы с пространственными данными.

Семестровый курс предполагает всестороннее изучение ГИС-программирования на языке Python. Студенты начнут с изучения основ языка, освоят использование библиотек и фреймворков, необходимых для обработки, анализа и визуализации пространственных данных. В частности, научатся создавать интерактивные веб-карты с помощью Leafmap, визуализировать векторные и растровые данные с помощью MapLibre, получат практический опыт работы с GeoPandas, Rasterio, WhiteboxTools, Geemap, SAMGeo, HyperCoast, DuckDB, Xarray и другими библиотеками.

📹 Видеоматериалы курса

#python #основы
В Alaska Satellite Facility завершено создание архива “импульсов” Sentinel-1 [ссылка]

Работа, проделанная Alaska Satellite Facility (ASF), позволяет существенно сэкономить время и вычислительные ресурсы, необходимые для анализа радарных данных Sentinel-1. Что же было сделало?

Типичный файл радарных данных Sentinel-1 Single-Look Complex (SLC) содержат три полосы (swath) данных по 8–10 импульсов (burst) в каждой. Такие файлы имеют довольно большой объем (4–5 Гб) и используются, в частности, для радарной интерферометрии.

Вырезать нужный фрагмент из данных Sentinel-1 SLC не так просто, как из оптического снимка. “Виноват” метод получения данных, TopSAR, при которым данные собираются импульсами путем циклического переключения луча антенны между несколькими соседними полосами. На рисунке 1️⃣ показана схема сканирования в трёх полосах (а) и сканирование импульсами в пределах одной полосы (b). Результат выглядит примерно так, как показано на рисунке 2️⃣ (источник).

Таким образом, импульс (burst) является атомарной единицей данных Sentinel-1 SLC. При изучении небольших объектов, таких как вулканы или оползни, достаточно взять из соседних по времени снимков только импульсы, покрывающие исследуемый объект, и построить по ним интерферограмму. Размер одного импульса составляет около 4% от общего размера файл данных.

До сих пор, прежде чем выбрать нужный импульс, мы должны были сначала скачать весь файл. Теперь этого делать не нужно, достаточно использовать новый продукт 🌍 Sentinel-1 Burst SLC 3️⃣.

Особенно приятно, что с импульсами уже работает HyP3: HyP3 Burst InSAR. С его помощью можно заказать генерацию InSAR-данных по одиночным импульсам.

Пакет burst2safe для 🐍 Python позволяет конвертировать данные импульсов в SAFE-файл, для использования в SAR-процессоре (например, в SNAP). В будущем SAFE станет для импульсов форматом по умолчанию.

#InSAR #python #данные
Scikit-eo

Python-библиотека Scikit-eo (https://github.com/yotarazona/scikit-eo) предоставляет универсальные инструменты для анализа данных дистанционного зондирования Земли 🛰.

Страница библиотеки содержит серию примеров и руководств в виде jupyter-ноутбуков.

#python
Прогнозирование погоды с помощью моделей ИИ на основе открытых данных ECMWF

Команда специалистов системы прогнозирования погоды AIFS (Artificial Intelligence/Integrated Forecasting System) в Европейском центре среднесрочных прогнозов погоды (ECMWF) объявила, что теперь пользователи могут самостоятельно запускать модели прогноза погоды, использующие методы искусственного интеллекта (ИИ) и опирающиеся на открытые данные ECMWF.

Это позволит генерировать прогнозы на собственном компьютере пользователя, изучать методы прогнозирования с помощью ансамблей моделей и проводить сравнительный анализ моделей.

Установка python-пакетов традиционна:

pip install ai-models 

pip install ai-models-panguweather # Or another model

ai-models panguweather --input ecmwf-open-data


Поддерживаются следующие модели прогнозирования погоды, использующие методы ИИ: Pangu-Weather, FourCastNet (версия 2), GraphCast, FuXi и Aurora.

В будущем ожидается поддержка системы AIFS. Пока можно получить готовые прогнозы, сделанные с помощью AIFS.

#погода #ИИ #python
object-store-rs: интерфейс с сервисами хранения объектов и локальных файлов

Python-пакет object-store-rs (https://github.com/developmentseed/object-store-rs), разработанный компанией Development Seed, предоставляет унифицированный API для взаимодействия с сервисами хранения объектов и локальных файлов. Пакет обеспечивает простую и быструю интеграцию с такими сервисами хранения объектов, как Amazon S3, Google Cloud Storage, Azure Blob Storage, и S3-совместимыми API, например Cloudflare R2.

#python
Open Earth Engine Library (OEEL) — коллекция полезных функций для Google Earth Engine (GEE).

Для использования OEEL с GEE JavaScript API достаточно импортировать ее код

var oeel=require('users/OEEL/lib:loadAll')


а затем использовать нужные функции.

По мере роста библиотеки время загрузки также увеличивается. Чтобы решить эту проблему, разработчики предлагают версию библиотеки с быстрой загрузкой

var oeel=require('users/OEEL/lib:loadAllSF')


Отметим, что эта версия не должна использоваться для отладки.

Чтобы получить информацию о функциях, добавьте в конец кода следующую строку

print('List of functions used',oeel.refs())


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

OEEL существует в виде Python-пакета.

Установка:

pip install oeel


Импорт:

from oeel import oeel


🖥 Репозиторий кода OEEL
🖥 Код примеров

#GEE #python
Open Earth Engine Library (продолжение)

OEEL насчитывает десятки функций. Вот некоторые из них, относящиеся к объектам Image, ImageCollection, Feature и FeatureCollection:

🌍 Image

arrayDTW — возвращает DTW (dynamic time warping) bмежду двумя изображениями, для каждого пикселя
inverseDistanceInterpolation — пространственная интерполяция методом IDW (inverse distance weighting)
kriging — пространственная интерполяция с помощью кригинга
propertyAsBand — создает новый слой (канал) изображения из свойств этого изображения
semivariogram — вычисляет семивариограмму

🌍 ImageCollection

OtsuThreshold — рассчитывает порог Оцу (Otsu) для коллекции
SavatskyGolayFilter — фильтрация снимков коллекции фильтром Савицкого-Голая (Savitsky-Golay). В названии функции содержится ошибка)
enhancingCollection — алгоритм, расширяющий коллекцию, добавляя к ней новую коллекцию. Каждое изображение первой коллекции сливается с изображением второй коллекции
fromSingleImage —  загрузка изображения как коллекции
medoid — вычисляет медоид коллекции
movingWindow — фильтрация коллекции методом “скользящего окна”

🌍 Feature

asLabel — генерирует функцию, преобразующую Feature в аннотацию на изображении

🌍 FeatureCollection

fromList — преобразует List в FeatureCollection

#GEE #python
Introduction to Environmental Data Science

Книга Introduction to Environmental Data Science (https://bookdown.org/igisc/EnvDataSci/) Джерри Дэвиса (Jerry Davis) посвящена анализу пространственных данных, связанных с исследованиями окружающей среды, на языке программирования R.

В книге есть краткое введение в R, описана работа с векторными и растровыми данными, моделирование, анализ спутниковых снимков и временных рядов.

Environmental Data Science book (https://edsbook.org/welcome) — аналогичный ресурс на Python.

Спасибо коллегам за наводку!

#R #python