(Mise à jour) Mise à jour de la méthode de création d'une image composite.
Jusqu'à présent, nous avons introduit l'acquisition d'images satellitaires de la série de satellites artificiels européens Sentinel à l'aide de Google Earth Engine et de sa méthode d'analyse. Cette fois, nous présenterons la méthode d'acquisition et d'analyse des images satellites de Sentinel-2, qui est un satellite d'observation optique familier à tous les membres de la série Sentinel. Cette fois, jetons un coup d'œil sur l'incendie de forêt sur la côte ouest des États-Unis rapporté dans les nouvelles d'outre-mer.
Il s'agit d'une image satellite d'un site d'incendie de forêt près de Portland sur la côte ouest des États-Unis (prise le 9 septembre 2020).
Il est rapporté comme suit sur les sites d'information à l'étranger. Ce site a une histoire d'incendies de forêt, et vous pouvez découvrir où l'incendie s'est produit. Fire Maps: Glass and Zogg Wildfire Tracker
Quant à la situation du site, les sites suivants peuvent être réels et pressés. Le New York Times a beaucoup d'articles intéressants que je lis tous les jours. Historic Wild Fires Range in Western States
Ici, nous allons présenter un exemple de la façon d'acquérir l'image observée de Sentinel-2 avec Google Earth Engine et comment convertir les données d'image en une image couleur. De plus, le code introduit dans l'article est placé sur Github, donc si vous voulez l'essayer vous-même, veuillez l'utiliser. ** Google colaboratory est utilisé **, vous pouvez donc l'utiliser quel que soit le PC tant que vous disposez d'un environnement réseau **.
Auparavant, en utilisant l'API de Sentinel, j'ai acquis une image capturée par un satellite artificiel d'un feu de forêt australien au début de 2020 et en ai créé une animation GIF.
J'ai fait un laps de temps d'images satellites des incendies de forêt australiens.
Ici, l'image carrée standard de 100 km de Sentinel-2 a été acquise à l'aide de l'API, et la partie d'intérêt a été découpée et le traitement de la composition des couleurs a été effectué. À ce stade, la scène sera différente en fonction de la synchronisation de l'image, de sorte que l'image présente quelques encoches. Même s'il s'agit de scènes différentes, vous pouvez obtenir une image de l'ensemble de la zone d'intérêt en acquérant et en fusionnant chacune d'elles. Cependant, la gestion de plusieurs images de grande taille n'est pas très efficace compte tenu du temps d'acquisition. Par conséquent, cette fois, nous allons acquérir l'image découpée dans la zone d'intérêt à partir du moteur Google Earth Engine (ci-après désigné GEE) et créer une image composite couleur. La série Sentinel est une série d'observation de la Terre développée et exploitée par l'Agence spatiale européenne, et a déjà été lancée et exploitée de 1 à 5. Cette fois, nous allons introduire le traitement d'image à partir de l'acquisition d'images satellites de Sentinel-2, qui capture des images d'observation optique ainsi que des images d'appareils photo numériques.
Sentinel-2 ©ESA 2000-2018.
Pour plus de détails sur le plan d'observation et les images d'observation de Sentinel-2, voir Comment obtenir gratuitement les dernières images satellite. .
Sentinel-2 capture des images de 12 longueurs d'onde différentes.
(Credit: European Space Agency)
Une image satellite générale (True color) peut être créée en définissant les bandes 4, 3 et 2 sur R, V et B.
Cette fois, nous nous concentrerons sur les incendies de forêt et essayerons de visualiser les incendies à l'aide d'images d'observation des longueurs d'onde infrarouges. Cette fois, je me réfère aux articles suivants.
À partir de cet article, jetons un coup d'œil à la scène des feux de forêt en utilisant des images des longues bandes de longueurs d'onde 12 et 11 qui sont sensibles au feu et 8A qui est sensible à la forêt.
Veuillez vous référer à l'article suivant pour plus de détails sur la façon d'acquérir des images satellite avec GEE. Analyse d'images satellites artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (Introduction) -
Veuillez également vous référer à l'article suivant pour la méthode d'analyse des images satellites obtenues auprès de GEE.
J'ai vérifié l'état d'utilisation du parking à partir d'images satellite.
Bien qu'il y ait quelques chevauchements, nous allons introduire l'acquisition d'images satellites et leur traitement.
import ee
import numpy as np
import matplotlib.pyplot as plt
ee.Authenticate()
ee.Initialize()
Tout d'abord, exécutez ceci pour authentifier la connexion GEE. Lorsque vous l'exécutez, le lien sera retourné. Cliquez dessus pour effectuer la procédure d'authentification, copiez le code d'accès et saisissez-le.
Ensuite, authentifiez la connexion à Google Drive. Encore une fois, le flux est le même que celui de la certification GEE.
from google.colab import drive
drive.mount('/content/drive')
Ensuite, nous effectuerons des tâches telles que la visualisation des images satellites acquises et l'installation des modules nécessaires à leur numérisation et à leur analyse.
#Installation du package&importer
!pip install rasterio
import numpy as np
import matplotlib.pyplot as plt
import rasterio
import json
import os
import glob
import time
from datetime import datetime
from dateutil.parser import parse
Les modules fréquemment utilisés sont déjà installés dans Google Colaboratory, donc aucun travail supplémentaire n'est requis, mais cette fois nous utiliserons Geotiff, qui est une image avec des informations cartographiques ajoutées, donc il est nécessaire pour le traitement d'image ** Rasterio Installez **.
Ensuite, installez un module appelé ** folium ** pour vérifier la zone cible définie sur la carte.
!pip install folium
import folium
Maintenant que l'environnement est prêt, prenez l'image satellite de GEE.
Afin d'acquérir des images satellite de GEE, vous devez entrer les informations de latitude / longitude de la zone cible qui vous intéresse. Cette fois également, nous l'obtiendrons en utilisant le site suivant créé pour vérifier et obtenir facilement la ** latitude et longitude ** de la zone d'intérêt.
#Acquisition des informations polygonales de la zone d'intérêt.
from IPython.display import HTML
HTML(r'<iframe width="1000" height="580" src="https://gispolygon.herokuapp.com/" frameborder="0"></iframe>')
Lorsque vous exécutez cela, l'écran suivant s'affiche.
Après avoir élargi la zone d'intérêt, sélectionnez le polygone carré dans l'icône de gauche pour afficher le polygone de la zone d'intérêt. Après cela, cliquez sur ** Afficher les entités ** pour afficher les informations géographiques du polygone dans la fenêtre de droite. Cliquez ensuite sur ** Copier ** en bas pour copier ces informations géographiques. Cette fois, nous allons acquérir des images satellites de ** la zone est de Portland ** dans l'Oregon, aux États-Unis.
Collez ensuite les informations cartographiques copiées ci-dessous et entrez-les.
A = {"type":"FeatureCollection","features":[{"properties":{"note":"","distance":"210025.76 m","drawtype":"rectangle","area":"520197.34 ha"},"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-122.60860204696657,44.80966973731369],[-122.60860204696657,45.400920907537866],[-121.60266637802125,45.400920907537866],[-121.60266637802125,44.80966973731369],[-122.60860204696657,44.80966973731369]]]}}]}
Ces informations géographiques sont traitées dans le format d'entrée pour GEE et pour l'affichage dans Folium.
#Définissez n'importe quel nom de fichier à utiliser ultérieurement. Par exemple, le nom de la zone.
object_name = 'Portland'
with open(str(object_name) +'_2.geojson', 'w') as f:
json.dump(A, f)
json_file = open(str(object_name) +'_2.geojson')
json_object = json.load(json_file)
#Seules les informations de latitude / longitude de la zone d'intérêt sont extraites de json.
AREA = json_object["features"][0]["geometry"]['coordinates'][0]
Maintenant, vérifions la zone d'intérêt définie.
m = folium.Map([(AREA[0][1]+AREA[len(AREA)-2][1])/2,(AREA[0][0]+AREA[len(AREA)-3][0])/2], zoom_start=9)
folium.GeoJson(str(object_name) +'_2.geojson').add_to(m)
m
production
De nombreuses images satellites et de nombreuses informations déjà analysées sont définies dans GEE. Pour plus de détails, veuillez consulter Data Catalog. Sentinel-1 et 2 sont les suivants.
Sentinel-2 MSI: MultiSpectral Instrument, Level-1C
À partir de cette page, vous pouvez utiliser les données de ** Image d'observation Sentinel-2 du 23 juin 2015 **.
Maintenant, récupérez l'image de Sentinel-2 de GEE et enregistrez-la dans le colaboratoire Google.
Tout d'abord, préparez le format des informations géographiques à définir dans GEE.
region=ee.Geometry.Polygon(AREA)
Ensuite, définissez les paramètres des informations à acquérir. Cette fois, la période de l'image acquise et la destination de sauvegarde de l'image acquise sont spécifiées. Cette fois, nous avons confirmé que nous observions la zone le 9 septembre, nous avons donc fixé la période pour acquérir uniquement cette image.
#Précisez la période
from_date='2020-09-08'
to_date='2020-09-10'
#Nom du dossier à enregistrer
dir_name_s2 = 'GEE_Sentinel2_' + object_name
Maintenant, définissons les conditions d'image pour Sentinel-2.
def ImageExport(image,description,folder,region,scale):
task = ee.batch.Export.image.toDrive(image=image,description=description,folder=folder,region=region,scale=scale)
task.start()
Sentinel2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(parse(from_date),parse(to_date)).filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than', 80).select(['B12','B11','B8A'])
imageList_s2 = Sentinel2.toList(300)
Ici, nous avons décidé d'acquérir les images composites couleur de ** B12 **, ** B11 ** et ** B8A ** qui sont utilisées pour la composition des couleurs parmi les images d'observation de Sentinel-2. De plus, s'il est possible de filtrer la proportion de nuages dans l'image de Sentinel-2, elle est fixée à 80%, ce qui est plus élevé que d'habitude, afin d'éviter une reconnaissance erronée de la fumée du feu comme des nuages. Maintenant, dans les conditions d'acquisition d'image satellite ci-dessus, l'image de la zone d'intérêt de Sentinel-2 est acquise.
for i in range(imageList_s2.size().getInfo()):
image = ee.Image(imageList_s2.get(i))
ImageExport(image.reproject(crs='EPSG:4326',scale=10),image.get('system:index').getInfo(),dir_name_s2,region['coordinates'][0],10)
Affichez et confirmez l'image satellite acquise. Les images satellites sont enregistrées dans le répertoire (dossier) défini dans mon lecteur de Google Drive. Appelez-le et affichez-le.
#Visualisation par ordre chronologique
s2_path = '/content/drive/My Drive/' + dir_name_s2 + '/'
files =os.listdir(s2_path)
files.sort()
plt.figure(figsize=(25, 25))
j=0
v = len(files)//5 +1
for i in range(len(files)):
#Acquérir et visualiser des images une scène à la fois
with rasterio.open(s2_path + files[i]) as src:
arr = src.read()
j+=1#Décaler et placer la position de tracé de l'image
plt.subplot(v,5,j)
arrayImg = np.asarray(arr).transpose(1,2,0).astype(np.float16)/10000
plt.imshow(arrayImg)
plt.title(files[i][0:8])#Obtenir la date à partir du nom du fichier
plt.tight_layout()
Nous avons acquis quatre images de la région. La raison pour laquelle il est divisé en quatre est que Sentinel-2 est enregistré en divisant l'image en 100 km carrés, et cette zone d'intérêt contient les quatre images divisées. En synthétisant les première et deuxième images, la zone d'intérêt est couverte, alors créez une ** image composite ** de ces deux images. Tout d'abord, vérifiez chaque image.
#Vérifiez l'image
s2_path = '/content/drive/My Drive/' + dir_name_s2 + '/'
files =os.listdir(s2_path)
files.sort()
#Lire les données
n = 0
with rasterio.open(s2_path + files[n]) as src:
arr = src.read()
print(files[n][0:8])
#Visualisation
arrayImg0 = np.asarray(arr).transpose(1,2,0).astype(np.float16)/10000
plt.imshow(arrayImg0)
#Vérifiez l'image
s2_path = '/content/drive/My Drive/' + dir_name_s2 + '/'
files =os.listdir(s2_path)
files.sort()
#Lire les données
n = 1
with rasterio.open(s2_path + files[n]) as src:
arr = src.read()
print(files[n][0:8])
#Visualisation
arrayImg1 = np.asarray(arr).transpose(1,2,0).astype(np.float16)/10000
plt.imshow(arrayImg1)
Ensuite, combinez ces deux images. ** (Mise à jour) ** Je pense qu'il existe plusieurs façons de combiner des images, mais j'avais l'habitude de les combiner avec numpy auparavant, mais je les combinerai avec la commande de fusion de rasterio qui a été conseillée dans les commentaires.
import rasterio.merge
dest, out_transform = rasterio.merge.merge([s2_path + files[0], s2_path + files[1]])
L'image composite est convertie par la fonction de transposition en raison de l'ordre du canal RVB, vertical, horizontal.
image = dest/10000
img_transformed = image.transpose((1, 2, 0))
img_transformed.shape
production
(6596, 11199, 3)
Sortez l'image.
plt.imshow(img_transformed)
Vous pouvez bien le synthétiser. (Avant la mise à jour, il y avait une partie noire au niveau de l'articulation.) Maintenant, enregistrez cette image composite au format jpeg.
import cv2
new_image = ((img_transformed - img_transformed.min()) * (1/(img_transformed.max() - img_transformed.min()) * 255)).astype('uint8')
im_rgb = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB)
cv2.imwrite(str(object_name) +'.jpg', im_rgb )
img = Image.open(str(object_name) +'.jpg')
plt.figure(figsize=(15, 20))
plt.imshow(img)
plt.show()
Ensuite, je mettrai la date d'imagerie du satellite artificiel et le crédit de l'image sur cette image.
Ensuite, la date de prise de vue et le crédit de l'image satellite sont décrits dans cette image. La police utilisée ici est celle qui est ouverte au public gratuitement sur le net. C'est aussi votre préféré.
#Téléchargez et configurez les fichiers de polices
!wget https://osdn.net/dl/mplus-fonts/mplus-TESTFLIGHT-063a.tar.xz
!xz -dc mplus-TESTFLIGHT-*.tar.xz | tar xf -
fontfile = "./mplus-TESTFLIGHT-063a/mplus-1c-bold.ttf"
Maintenant, écrivez les caractères sur l'image.
date = files[n][0:8]
img = Image.open(str(object_name) +'.jpg')
img = img.convert('RGB')
x = int(img.size[0]/1.3) #Réglage de la position de la description de la date
y = int(img.size[1]/20) #Réglage de la position de la description de la date
fs = int(img.size[0]/70) #Définition de la taille de la police pour la date
obj_draw = ImageDraw.Draw(img)
obj_font = ImageFont.truetype(fontfile, fs)
obj_draw.text((x, y), 'Observation Date: '+str(date), fill=(255, 255, 255), font=obj_font)
obj_draw.text((img.size[0]/1.6, img.size[1]-y*0.1 - img.size[1]/30 ), 'Contains modified Copernicus Sentinel data (2020)', fill=(255, 255, 255), font=obj_font)
img = img.resize((int(img.size[0] / 2) , int(img.size[1] / 2)))
img.save(str(object_name) +'.jpg')
plt.figure(figsize=(15, 20))
plt.imshow(img)
plt.show()
Vous avez maintenant les informations nécessaires sur l'image. Modifiez le code ci-dessus pour ajuster la position, la taille, la couleur, etc. des caractères à votre guise. Le fichier image créé peut être téléchargé sur votre PC en cliquant avec le bouton droit sur le nom du fichier cible dans la liste des fichiers à gauche et en sélectionnant ** Télécharger **.
À l'aide de ** Google Earth Engine ** fourni par Google, nous avons présenté comment acquérir des images satellite de ** Sentinel-2 ** et traiter des images de ** feu de forêt ** sur la côte ouest des États-Unis à titre d'exemple d'analyse. .. Les incendies de forêt sont toujours en cours et d'importants dégâts ont été signalés. Je prie pour que les activités des pompiers soient fructueuses et qu’ils reviennent bientôt à leur vie normale. Si vous avez des commentaires ou des questions, n'hésitez pas à commenter. Je suis heureux.
Comment obtenir gratuitement les dernières images satellite. J'ai essayé d'acquérir automatiquement l'image d'observation du satellite artificiel (Sentinel-2) en utilisant l'API. Créer une carte de distribution estimée des voitures à partir d'images satellites artificielles de PyTorch. J'ai vérifié l'état d'utilisation du parking à partir d'images satellite. J'ai fait un laps de temps d'images satellites des incendies de forêt australiens.
[Sequel] Analyse d'images satellitaires artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite commençant gratuitement (pratique) - Analyse d'images satellites artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (Introduction) - [6. Exécution GEE locale par Python](https://sites.google.com/site/mizuochipublic/%E5%AE%9F%E8%B7%B5%E3%82%B3%E3%83%B3 % E3% 83% 86% E3% 83% B3% E3% 83% 84-tutoriels-de-télédétection / moteur-google-earth% E5% 85% A5% E9% 96% 80/6-python% E3% 81 % AB% E3% 82% 88% E3% 82% 8B% E3% 83% AD% E3% 83% BC% E3% 82% AB% E3% 83% AB% E3% 81% 8B% E3% 82% 89 % E3% 81% AEgee% E5% AE% 9F% E8% A1% 8C)
Kihon de données satellitaires - Compréhension, type, fréquence, résolution, cas d'utilisation ~ Pouvez-vous voir des gens depuis le satellite artificiel? ~ Par satellite, résolution au sol / résumé de l'heure locale ~
Sentinel-2 MSI: MultiSpectral Instrument, Level-1C
Recommended Posts