Таким образом, эта статья покажет вам, как подготовить спутниковые изображения для машинного обучения путем их нормализации, начиная с разрешения и заканчивая проекцией. Мы будем использовать Google Earth Engine (GEE) с Python для подключения к GEE. Наслаждаться!

Мотивация

Увидеть Землю из космоса - это способ лучше понять нашу планету. Спутник используется для получения снимков нашей Земли из космоса, а дистанционное зондирование - это технология сбора информации с Земли путем фиксации отражения от солнца. Это отражение будет представлено в виде частот, причем каждая частота может иметь различное значение.

Есть очень много спутников, которые вращались вокруг Земли, например, Landsat, Sentinel, MODIS и многие другие. Эти спутники захватывают разные частоты, и они также используют другую конфигурацию для захвата частот, начиная от проекции, круговой орбиты, разрешения и многого другого.

Машинное обучение (ML) - отличный способ выявить закономерности или взаимосвязь между данными. Чистые данные необходимы, прежде чем мы сможем применить машинное обучение к проблеме. Как я уже упоминал выше, каждый спутник имеет разные конфигурации. Следовательно, нам нужно нормализовать его, чтобы мы могли использовать машинное обучение для решения проблем.

В статье показано, как использовать Google Earth Engine (GEE) для очистки наших спутниковых данных. Мы будем использовать Python API для подключения к GEE. Без дальнейших действий, приступим!

Google Earth Engine

Прежде чем мы перейдем к реализации, я познакомлю вас с Google Earth Engine (GEE). GEE - это платформа для обработки и анализа спутниковых данных от Google. Кроме того, GEE собирает очень много данных, связанных со спутниковыми изображениями, например, Landsat, MODIS, Sentinel и многими другими.

Преимущество использования GEE заключается в том, что вам не нужно выделять так много ресурсов, как компьютер или хранилище. Все, что вам нужно сделать, это подключиться к GEE с тем языком программирования, который вам нравится. До сих пор Python и Javascript - это языки программирования, которые мы можем использовать для подключения к GEE. Итак, в этом случае мы будем использовать только язык Python для подключения к GEE.

Реализация

Постановка задачи

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

  • Данные об осадках с TRMM 3B43. Он имеет разрешение 25 км на пиксель. Эти данные будут уменьшены до 1 км, чтобы мы могли видеть подробные данные об осадках (ссылка).
  • Нормализованный индекс разницы растительности (NDVI) от MODIS. Он записывает качество растительности в определенной области и имеет разрешение 1 км на пиксель. Эти данные будут предсказывать данные об осадках (ссылка).
  • Цифровая модель рельефа (ЦМР) от SRTM. Он фиксирует высоту на Земле и имеет разрешение 90 M на пиксель. Эти данные будут предсказывать данные об осадках (ссылка).
  • Земельный покров от MODIS. Он записывает тип земного покрова для местоположения и имеет разрешение 500 M на пиксель. Эти данные будут предсказывать данные об осадках (ссылка).

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

Короче говоря, пространственное масштабирование - это метод увеличения разрешения в пикселях спутникового изображения путем изучения связи с другими переменными. Машинное обучение может помочь установить связь между спутниковым изображением и другими переменными.

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

Кроме того, чтобы уменьшить наш прицел, мы берем данные только из провинции Риау, Индонезия. Вот предварительный просмотр окончательного результата этого урока.

Подготовьте данные и библиотеки

После того, как мы получили формулировку проблемы, следующим шагом будет импорт библиотеки GEE. Вот код для этого.

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

To authorize access needed by Earth Engine, open the following URL in a web browser and follow the instructions. If the web browser does not start automatically, please manually browse the URL below.      
 
  <LINK TO THE VERIFICATION CODE>  
The authorization workflow will generate a code, which you should paste in the box below.  
Enter verification code: <THE VERIFICATION CODE>  
Successfully saved authorization token.

Получить данные из шейп-файла

Следующим шагом будет получение данных из шейп-файла. Как я уже упоминал выше, мы будем брать данные только из провинции Риау. Следовательно, нам нужен шейп-файл в формате .shp для удаления данных за пределами этой провинции. Мы возьмем данные из GADM. Вот код для загрузки данных.

! wget https://biogeo.ucdavis.edu/data/gadm3.6/shp/gadm36_IDN_shp.zip
! unzip gadm36_IDN_shp.zip

Вот код для загрузки данных и их фильтрации, чтобы получить только провинцию Риау.

Вот результат,

Чтобы использовать шейп-файл в движке Земли, нам нужно сохранить этот файл в формате GeoJSON. Затем мы помещаем файл GeoJSON в объект с именем ee.Geometry. Для этого мы можем использовать такой код,

Теперь мы можем использовать объект для обрезки наших спутниковых изображений, поэтому он удаляет изображения, не принадлежащие этому объекту.

Получите спутниковые данные

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

Для данных, содержащих только одно изображение, мы можем получить к ним доступ с помощью класса ee.Image. Для данных с большим количеством изображений мы можем получить к ним доступ с помощью класса ee.ImageCollection.

Чтобы агрегировать данные из класса ee.ImageCollection, мы можем использовать метод reduce для преобразования объекта ee.ImageCollection в объект ee.Image, будь то путем их агрегирования с использованием среднего, медианного и т. Д.

Вот код для загрузки данных.

Уменьшите разрешение спутниковых данных

Следующим шагом будет уменьшение разрешения наших спутниковых снимков. Цель этого шага - добиться того, чтобы спутниковые изображения имели одинаковое разрешение друг с другом. Этот шаг также нормализует проекцию нашего спутника, что является решающим шагом перед тем, как мы сможем моделировать наши данные с помощью машинного обучения.

Шаг, который нам нужно сделать для всех спутниковых изображений:

  1. Перепроецируйте каждое изображение, используя проекцию из нашего шейп-файла, используя метод reproject
  2. Уменьшите разрешение для каждого спутникового изображения до 25 км (25000 M), вычислив среднее значение для каждого пикселя с помощью метода reduceResolution.
  3. Обрезайте изображения, чтобы у нас были только изображения, которые пересекаются с шейп-файлом, используя метод clip.

Вот код для уменьшения разрешения спутников:

Теперь посмотрим, имеют ли наши изображения такую ​​же проекцию, что и шейп-файл. Вот код и результат до и после изменения проекции и уменьшения разрешения изображения.

Как вы можете видеть выше, теперь наши изображения имеют ту же проекцию (CRS), что и наш шейп-файл. Кроме того, наши изображения уже имеют аналогичное разрешение - 25 км. Вы можете увидеть это в разделе «преобразование». Теперь мы можем сохранить результат в формате GeoTIFF.

Сохраните результат

Чтобы сохранить результат на нашем Google Диске, мы можем использовать для этого метод ee.batch.Export.image.toDrive. Вот код для сохранения наших изображений в формате GeoTIFF.

Заключительные замечания

Отличная работа! Теперь мы закончили реализацию перепроецирования и уменьшения разрешения наших спутниковых изображений с помощью Google Earth Engine на Python. Имея эти данные, теперь мы можем использовать их для моделирования с помощью машинного обучения, независимо от того, хотите ли вы выполнить пространственное масштабирование или даже классификацию земного покрова.

Я надеюсь, что это было полезно для вас, и если вам интересна моя работа, вы можете подписаться на меня на Medium. Также вы можете связаться со мной в LinkedIn.

Спасибо, что прочитали мою статью!

использованная литература

[1] Горелик, Н., Ханчер, М., Диксон, М., Ильющенко, С., Тау, Д., и Мур, Р. (2017). Google Earth Engine: геопространственный анализ планетарного масштаба для всех. Дистанционное зондирование окружающей среды.