[PYTHON] [Suite] Analyse d'images satellite artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (pratique) -

introduction

Code pour obtenir les données satellite

--Utilisez le code ci-dessous (voir Article précédent pour une explication détaillée du code)

Définition des fonctions

#Importer l'API Earth Engine Python
import ee

#Certification / initialisation GEE
ee.Authenticate()
ee.Initialize()

#Chargement de données GEE
def load_data(snippet, from_date, to_date, geometry, band):
    #Extraire les données selon les conditions des paramètres
    dataset = ee.ImageCollection(snippet).filter(
    ee.Filter.date(from_date, to_date)).filter(
    ee.Filter.geometry(geometry)).select(band)
    #Convertir en type de liste
    data_list = dataset.toList(dataset.size().getInfo())
    #Sortie du nombre de données cibles et de la liste de données
    return dataset.size().getInfo(), data_list

#Enregistrer les images satellite sur Google Drive
def save_on_gdrive(image, geometry, dir_name, file_name, scale):
    task = ee.batch.Export.image.toDrive(**{
        'image': image,#Informations satellite à charger
        'description': file_name,#Nom de fichier à enregistrer
        'folder':dir_name,#Enregistrer le nom du dossier de destination
        'scale': scale,#résolution
        'region': geometry.getInfo()['coordinates'],#Zone cible
        'crs': 'EPSG:4326'
    })
    # Run exporting
    task.start()
    print('Done.')

Réglage variable (paramètre)

##Spécification des paramètres
#Désigner un satellite
snippet = 'NOAA/DMSP-OLS/NIGHTTIME_LIGHTS'
#Spécifiez le nom du groupe
band = 'avg_vis'
#Précisez la période
from_date='2010-01-01'
to_date='2012-12-31'
#Spécifiez la zone(Spécifiez la latitude / longitude pour la région du Japon)
geometry = ee.Geometry.Rectangle([128.60, 29.97, 148.43, 46.12])
#Nom du dossier à enregistrer
dir_name = 'GEE_download'
#nom de fichier
file_name = 'file_name'
#résolution
scale = 1000

Exécution du traitement

##Exécution du traitement----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

Analyse des données satellitaires ① ~ Image optique ~

Aperçu

base de données

code

--Changez les paramètres et essayez d'obtenir TCI_R (bande rouge de lumière visible)

##Spécification des paramètres
#Désigner un satellite
snippet = 'COPERNICUS/S2_SR'
#Spécifiez le nom du groupe
band = 'TCI_R'

#Précisez la période
from_date='2020-04-01'
to_date='2020-04-15'
#Spécifiez la zone(Spécifiez la latitude / longitude pour la région du Japon)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

#Nom du dossier à enregistrer
dir_name = 'GEE_Sentinel_Red'
#nom de fichier
file_name = 'file_name'
#résolution
scale = 10

##Exécution du traitement----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)
#Installation du package&importer
!pip install rasterio
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import rasterio
import glob

#Lire les données
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Red/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    arr = src.read()

#Visualisation
plt.imshow(arr[0], cmap='Reds')

Image optique de Tokyo (autour du palais impérial) (bande rouge) image.png

――Vous pouvez voir la zone qui semble être le palais impérial au centre, et le parc Yoyogi et Shinjuku Gyoen du côté ouest.

#Obtenez des données de bande verte
##Spécification des paramètres
#Spécifiez le nom du groupe
band = 'TCI_G'
#Nom du dossier à enregistrer
dir_name = 'GEE_Sentinel_Green'

##Exécution du traitement----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

#Acquisition de données en bande bleue
##Spécification des paramètres
#Spécifiez le nom du groupe
band = 'TCI_B'
#Nom du dossier à enregistrer
dir_name = 'GEE_Sentinel_Blue'

##Exécution du traitement----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

«J'ai pu obtenir la bande verte et la bande bleue ainsi que la bande rouge.

#Lire les données
# Red
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Red/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    red = src.read()
# Green
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Green/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    green = src.read()
# Blue
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Blue/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    blue = src.read()

#Visualisation
plt.figure(figsize=(15, 10))
plt.subplot(131); plt.imshow(red[0], cmap='Reds'); plt.title('Red')
plt.subplot(132); plt.imshow(green[0], cmap='Greens'); plt.title('Green')
plt.subplot(133); plt.imshow(blue[0], cmap='Blues'); plt.title('Blue')

Image optique de Tokyo (autour du palais impérial) (bande rouge, bande verte, bande bleue) image.png

--Enfin, ces trois images couleur sont combinées RVB et converties en une image couleur.

#Composition RVB
## np.Connectez-vous avec dstack (rouge, Green,Notez l'ordre du bleu)
rgb = np.dstack((red[0], green[0], blue[0]))

#Visualisation de l'image composite RVB
plt.imshow(rgb); plt.title('RGB Image')

Image optique de Tokyo (autour du palais impérial) (composition RVB) image.png

―― En synthétisant RVB, cela ressemble à une image satellite. ――Cette fois, nous n'avons visualisé qu'à un moment précis de la zone, mais les données peuvent être acquises à tout moment pendant la période pendant laquelle le satellite artificiel est en fonctionnement. ――Il semble que vous puissiez voir diverses choses en changeant les saisons ou en comparant avant et après la catastrophe (les images optiques sont facilement affectées par les nuages, de sorte que les images peuvent devenir floues pendant la saison des pluies ou par mauvais temps. Il y a)

Analyse des données satellitaires ② ~ indice de végétation ~

Aperçu

――Indicateur montrant la distribution et l'activité des plantes

base de données

code

##Spécification des paramètres
#Désigner un satellite
snippet = 'MODIS/006/MOD13Q1'
#Spécifiez le nom du groupe
band = 'NDVI'

#Précisez la période
from_date='2005-01-01'
to_date='2005-12-31'
#Spécifiez la zone(Spécifiez la latitude / longitude pour la région du Japon)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

#Nom du dossier à enregistrer
dir_name = 'GEE_NDVI'
#résolution
scale = 250

##Exécution du traitement----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

```python
## Spécification des paramètres
# Désigner un satellite
snippet = 'MODIS/006/MOD13Q1'
# Spécifiez le nom du groupe
band = 'NDVI'
# Précisez la période
from_date='2005-01-01'
to_date='2005-12-31'
# Spécifiez la zone (spécifiez la latitude / longitude pour la zone Japon)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

# Nom du dossier à enregistrer
dir_name = 'GEE_NDVI'
# résolution
scale = 250

## Exécution du traitement ------------------------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

## Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

-Je vais lire les données acquises de la même manière et les visualiser

# Lire les données
with rasterio.open('/content/drive/My Drive/GEE_NDVI/MODIS_006_MOD13Q1_2005_01_01.tif') as src:
    arr = src.read()

# Visualisation
plt.figure(figsize=(20, 8))
plt.subplot(121); plt.imshow(rgb); plt.title('RGB Image'); plt.title('Optical Image')
plt.subplot(122); plt.imshow(arr[0], cmap='YlGn'); plt.title('NDVI')

Image RVB optique et indice de végétation de Tokyo (autour du palais impérial) image.png

-L'indice de végétation est élevé dans le palais impérial et les parcs de Tokyo. -Ensuite, visualisons toutes les données de la période acquise (1 an en 2005) -Généralement, la végétation est au début de l'été~Il s'active à l'automne et diminue en hiver, alors vérifions à quoi il ressemble.

# Visualisation par ordre chronologique
files = glob.glob('/content/drive/My Drive/GEE_NDVI/*tif')
files.sort()

plt.figure(figsize=(15, 10))
j=0
for i in range(len(files)):
 # Acquérir et visualiser des images une scène à la fois
  with rasterio.open(files[i]) as src:
      arr = src.read()
 j + = 1 # Décale et place la position de tracé de l'image
  plt.subplot(5,6,j)
  plt.imshow(arr[0], cmap='YlGn', vmin=-2000, vmax=10000)
 plt.title (files [i] [-14:]) # Récupère la date à partir du nom du fichier
  plt.tight_layout()

Évolution de l'indice de végétation à Tokyo (autour du palais impérial) (janvier)~Décembre) image.png

# Obtenez la valeur totale du NDVI dans la région
sum_NDVI = []
label_NDVI = []
for i in range(len(files)):
 # Acquérir et visualiser des images une scène à la fois
  with rasterio.open(files[i]) as src:
      arr = src.read()
  sum_NDVI.append(arr.sum())
  label_NDVI.append(files[i][-14:-4])

# Visualisation
fig,ax = plt.subplots(figsize=(15,3))
plt.plot(sum_NDVI, marker='o')
ax.set_xticks(np.arange(0,23))
ax.set_xticklabels(label_NDVI, rotation=90)
plt.show()

Changements de l'indice de végétation (janvier)~Décembre) image.png

-Vous pouvez voir comment l'indice de végétation culmine au cours de l'été -Il est possible que la raison pour laquelle juin soit un grand phénomène soit que le satellite ne puisse pas acquérir correctement les données en raison de l'influence de la saison des pluies (nuages). -Le point faible des satellites optiques est qu'ils sont facilement affectés par les nuages, mais ils ont l'avantage de pouvoir acquérir une variété d'informations (par contre, il existe également un type de satellite appelé SAR qui n'est pas affecté par les nuages). -Comme il est difficile de comprendre le changement de saisonnalité en une seule année, j'ai essayé d'acquérir et de visualiser les données pendant 15 ans. -Si vous affichez également la moyenne mobile en couches, vous pouvez voir les changements saisonniers de l'indice de végétation de manière plus visible.

Changements de l'indice de végétation (pendant 15 ans) image.png

##Analyse des données satellitaires ③~Température de surface du sol~ ###Aperçu

###base de données -Satellite= "Terra(MODIS)" -bande= LST (Land Surface Temerature) -résolution: 1000m -zone:Tokyo (principalement le palais impérial)

###code -Essayez d'obtenir LST en modifiant divers paramètres -Visualisez les données acquises de la même manière

## Spécification des paramètres
# Désigner un satellite
snippet = 'MODIS/006/MOD11A2'
# Spécifiez le nom du groupe
band = 'LST_Day_1km'

# Précisez la période
from_date='2005-01-01'
to_date='2005-12-31'
# Spécifiez la zone (spécifiez la latitude / longitude pour la zone Japon)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

# Nom du dossier à enregistrer
dir_name = 'GEE_LST'
# résolution
scale = 1000

## Exécution du traitement ------------------------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

## Enregistrer tout (le nom du fichier utilise l'ID satellite)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

# Lire les données
with rasterio.open('/content/drive/My Drive/GEE_LST/MODIS_006_MOD11A2_2005_08_05.tif') as src:
    arr = src.read()

# Visualisation
plt.figure(figsize=(20, 8))
plt.subplot(121); plt.imshow(rgb); plt.title('RGB Image'); plt.title('Optical Image')
plt.subplot(122); plt.imshow(arr[0], cmap='inferno'); plt.title('Land Surface Temperature')

Image RVB optique et température de surface du sol à Tokyo (autour du palais impérial) image.png -C'est un peu difficile à comprendre car la résolution est faible par rapport à d'autres données. -En regardant toutes les périodes applicables, il semble que la température a tendance à être plus élevée du côté ouest. -L'une des caractéristiques de la température de la surface du sol est que si la résolution temporelle est élevée (les données sont acquises fréquemment), il existe de nombreuses images pour lesquelles les données ne peuvent pas être acquises correctement en raison de l'influence des nuages.

Changements de température de surface à Tokyo (autour du palais impérial) (janvier)~Décembre) image.png

Changements de température de surface à Tokyo (autour du palais impérial) (pendant 15 ans) image.png

-J'ai également acquis des données à long terme ainsi que l'indice de végétation et j'ai essayé de le visualiser en incluant la moyenne mobile. -Comme la végétation, elle semble être saisonnière (plus élevée en été et plus basse en hiver) -La résolution étant faible, il semble préférable de calculer la température de surface du sol sur une zone plus large et d'analyser la tendance globale.

##à la fin -Introduction d'une analyse d'image satellite typique à l'aide de Google Earth Engine et Google Colab -En utilisant GEE et Colab comme décrit ci-dessus,**Diverses données satellites peuvent être analysées simplement en changeant le nom de variable du nom du satellite ou du nom de la bande.Je pense que tu peux voir -AussiAprès avoir acquis des données satellites, vous pouvez utiliser la bibliothèque d'analyse pratique de Python dans le même environnement.**Est très pratique -Dans l'analyse proprement dite, un prétraitement détaillé est ajouté en fonction des besoins et un modèle est créé pour supprimer le biais, mais en utilisant ces services, l'étape initiale d'introduction est grandement simplifiée. Je pense que je peux le faire -Aussi,Analyse du téléchargement des données d'entreprise disponibles sur Google Drive et de leur fusion avec les données satellites sur ColabCela semble facile à faire -J'espère que cet article vous aidera à utiliser des données satellitaires artificielles dans divers domaines.

Recommended Posts

[Suite] Analyse d'images satellite artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (pratique) -
Analyse d'images satellites artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (Introduction) -