[PYTHON] Schauen wir uns den Waldbrand an der Westküste der USA mit Satellitenbildern an.

(Aktualisieren) Die Methode zum Erstellen eines zusammengesetzten Bildes wurde aktualisiert.

Überblick

Bisher haben wir die Erfassung von Satellitenbildern der europäischen Sentinel-Serie für künstliche Satelliten mit Google Earth Engine und deren Analysemethode eingeführt. Dieses Mal werden wir die Erfassungs- und Analysemethode von Satellitenbildern von Sentinel-2 vorstellen, einem optischen Beobachtungssatelliten, der allen in der Sentinel-Serie bekannt ist. Schauen wir uns diesmal den Waldbrand an der Westküste der Vereinigten Staaten an, über den in den Nachrichten aus Übersee berichtet wurde.  Portland (1).jpg

Dies ist ein Satellitenbild einer Waldbrandstelle in der Nähe von Portland an der Westküste der Vereinigten Staaten (aufgenommen am 9. September 2020).

Auf Nachrichtenseiten in Übersee wird wie folgt berichtet. Diese Seite hat eine Geschichte von Waldbränden, und Sie können herausfinden, wo der Brand aufgetreten ist.  Fire Maps: Glass and Zogg Wildfire Tracker

In Bezug auf die Situation der Site können die folgenden Sites real und gequetscht sein. Die New York Times hat viele interessante Artikel, die ich jeden Tag lese.  Historic Wild Fires Range in Western States

Hier stellen wir Ihnen ein Beispiel vor, wie Sie das beobachtete Bild von Sentinel-2 mit Google Earth Engine erfassen und die Bilddaten in ein Farbbild konvertieren. Der im Artikel eingeführte Code befindet sich auch auf Github. Wenn Sie ihn also selbst ausprobieren möchten, verwenden Sie ihn bitte. ** Google Colaboratory wird verwendet **, sodass Sie es unabhängig vom PC verwenden können, solange Sie über eine Netzwerkumgebung verfügen **.

1. Zuallererst

Zuvor habe ich mithilfe der API von Sentinel ein Bild aufgenommen, das Anfang 2020 von einem künstlichen Satelliten eines australischen Waldbrands aufgenommen wurde, und eine GIF-Animation davon erstellt.

Ich habe Zeitrafferaufnahmen von Satellitenbildern australischer Waldbrände gemacht.

Hier wurde das 100 km² große Standardbild von Sentinel-2 unter Verwendung der API aufgenommen, und der interessierende Teil wurde ausgeschnitten und die Verarbeitung der Farbzusammensetzung durchgeführt. Zu diesem Zeitpunkt ist die Szene je nach Abbildungszeitpunkt unterschiedlich, sodass das Bild einige Kerben aufweist. Selbst wenn es sich um unterschiedliche Szenen handelt, können Sie sich ein Bild des gesamten Interessensgebiets machen, indem Sie jede einzelne Szene erfassen und zusammenführen. Die Verarbeitung mehrerer großer Bilder ist jedoch angesichts der Erfassungszeit nicht sehr effizient. Daher werden wir dieses Mal das im interessierenden Bereich ausgeschnittene Bild von der Google Earth Engine (im Folgenden als GEE bezeichnet) erfassen und ein zusammengesetztes Farbbild erstellen.   Die Sentinel-Serie ist eine Erdbeobachtungsserie, die von der Europäischen Weltraumorganisation entwickelt und betrieben wird und bereits von 1 bis 5 gestartet und betrieben wurde. Dieses Mal werden wir die Bildverarbeitung aus der Erfassung von Satellitenbildern von Sentinel-2 einführen, die sowohl optische Beobachtungsbilder als auch Digitalkamerabilder erfassen.

sentinel2.jpeg Sentinel-2 ©ESA 2000-2018.

Einzelheiten zum Beobachtungsplan und zu den Beobachtungsbildern von Sentinel-2 finden Sie unter So erhalten Sie kostenlos die neuesten Satellitenbilder. .

Sentinel-2 nimmt Bilder mit 12 verschiedenen Wellenlängen auf.

スクリーンショット 2020-02-15 17.45.33.png (Credit: European Space Agency)

Ein allgemeines Satellitenbild (True Color) kann erstellt werden, indem die Bänder 4, 3 und 2 auf R, G und B eingestellt werden.

Dieses Mal konzentrieren wir uns auf Waldbrände und versuchen, die Brände mithilfe von Beobachtungsbildern von Infrarotwellenlängen zu visualisieren. Dieses Mal verweise ich auf die folgenden Artikel.

How to use open source satellite data for your investigative reportingHow to use open source satellite data for your investigative reporting

In diesem Artikel werfen wir einen Blick auf die Waldbrandszene mit Bildern der langwelligen Bänder 12 und 11, die feuerempfindlich sind, und 8A, die empfindlich auf Wald reagieren.

2. Erfassung und Auswertung von Satellitenbildern

2.1 Umweltvorbereitung (Bau).

Weitere Informationen zum Erfassen von Satellitenbildern mit GEE finden Sie im folgenden Artikel. Künstliche Satellitenbildanalyse durch Google Earth Engine und kostenlose Google Colab-Satellitenbildanalyse (Einführung) -

Weitere Informationen zur Analysemethode von Satellitenbildern von GEE finden Sie im folgenden Artikel.

Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.

Obwohl es einige Überschneidungen gibt, werden wir die Erfassung von Satellitenbildern und deren Verarbeitung einführen.

import ee
import numpy as np
import matplotlib.pyplot as plt

ee.Authenticate()
ee.Initialize()

Führen Sie dies zunächst aus, um die GEE-Verbindung zu authentifizieren. Wenn Sie es ausführen, wird der Link zurückgegeben. Klicken Sie darauf, um den Authentifizierungsvorgang durchzuführen, kopieren Sie den Zugangscode und geben Sie ihn ein.

Authentifizieren Sie anschließend die Verbindung zu Google Drive. Auch hier entspricht der Ablauf der GEE-Zertifizierung.

from google.colab import drive
drive.mount('/content/drive')

Als nächstes führen wir Arbeiten wie das Betrachten des erfassten Satellitenbilds und das Installieren der für die Digitalisierung und Analyse erforderlichen Module durch.

#Paketinstallation&importieren
!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

Häufig verwendete Module sind bereits in Google Colaboratory installiert, sodass keine zusätzlichen Arbeiten erforderlich sind. Dieses Mal verwenden wir jedoch Geotiff, ein Bild mit hinzugefügten Karteninformationen, das für die Bildverarbeitung erforderlich ist ** Rasterio Installieren **.

Installieren Sie als Nächstes ein Modul namens ** folium **, um den festgelegten Zielbereich auf der Karte zu überprüfen.

!pip install folium

import folium

Nachdem die Umgebung bereit ist, nehmen Sie das Satellitenbild von GEE auf.

2.2 Festlegen des interessierenden Bereichs (Zielbereich)

Um Satellitenbilder von GEE zu erfassen, müssen Sie die Breiten- / Längengrade des Zielgebiets eingeben, an dem Sie interessiert sind. Auch dieses Mal erhalten wir es über die folgende Website, die erstellt wurde, um den ** Breiten- und Längengrad ** des interessierenden Gebiets einfach zu überprüfen und zu ermitteln.

#Erfassung von Polygoninformationen des interessierenden Bereichs.
from IPython.display import HTML
HTML(r'<iframe width="1000" height="580" src="https://gispolygon.herokuapp.com/" frameborder="0"></iframe>')

Wenn Sie dies ausführen, wird der folgende Bildschirm angezeigt.

Screenshot from 2020-08-16 11-17-18.png

Wählen Sie nach dem Erweitern des interessierenden Bereichs das quadratische Polygon aus dem Symbol links aus, um das Polygon des interessierenden Bereichs anzuzeigen. Klicken Sie anschließend auf ** Features anzeigen **, um die geografischen Informationen des Polygons im rechten Fenster anzuzeigen. Klicken Sie dann unten auf ** Kopieren **, um diese geografischen Informationen zu kopieren. Dieses Mal werden wir Satellitenbilder des östlichen Gebiets von Portland in Oregon, USA, aufnehmen.

Screenshot from 2020-10-02 18-46-16.png

Fügen Sie dann die kopierten Karteninformationen unten ein und geben Sie sie ein.

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]]]}}]}

Diese geografischen Informationen werden im Eingabeformat für GEE und zur Anzeige in Folium verarbeitet.

#Legen Sie einen beliebigen Dateinamen fest, der in Zukunft verwendet werden soll. Zum Beispiel der Name des Gebiets.
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)

#Nur die Breiten- / Längengradinformationen des interessierenden Gebiets werden aus json extrahiert.
AREA = json_object["features"][0]["geometry"]['coordinates'][0]

Lassen Sie uns nun den eingestellten Bereich von Interesse überprüfen.

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

Ausgabe

Screenshot from 2020-10-02 18-55-56.png

2.3 Aufnahme von Satellitenbildern von GEE

Viele Satellitenbilder und viele bereits analysierte Informationen werden in GEE eingestellt. Weitere Informationen finden Sie unter Datenkatalog. Sentinel-1 und 2 sind wie folgt.

Sentinel-2 MSI: MultiSpectral Instrument, Level-1C

Auf dieser Seite können Sie die Daten des ** Sentinel-2-Beobachtungsbilds vom 23. Juni 2015 ** verwenden.

Holen Sie sich jetzt das Bild von Sentinel-2 von GEE und speichern Sie es im Google-Labor.

Bereiten Sie zunächst das Format der in GEE einzustellenden geografischen Informationen vor.

region=ee.Geometry.Polygon(AREA)

Stellen Sie als Nächstes die Parameter der zu erfassenden Informationen ein. Dieses Mal werden der Zeitraum des erfassten Bildes und das Speicherziel des erfassten Bildes angegeben. Dieses Mal haben wir bestätigt, dass wir das Gebiet am 9. September beobachtet haben, also haben wir den Zeitraum festgelegt, um nur dieses Bild aufzunehmen.

#Geben Sie den Zeitraum an
from_date='2020-09-08'
to_date='2020-09-10'

#Ordnername zum Speichern
dir_name_s2 = 'GEE_Sentinel2_' + object_name

Lassen Sie uns nun die Bildbedingungen für Sentinel-2 festlegen.

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) 

Hier setzen wir die Farbverbundbilder von ** B12 **, ** B11 ** und ** B8A ** ein, die für die Farbzusammensetzung unter den Beobachtungsbildern von Sentinel-2 verwendet werden. Obwohl es möglich ist, den Wolkenanteil im Bild von Sentinel-2 zu filtern, ist er auf 80% eingestellt, was höher als üblich ist, um zu vermeiden, dass Rauch aus Feuer als Wolken falsch erkannt wird. Unter den obigen Bedingungen für die Satellitenbildaufnahme wird nun das Bild des interessierenden Bereichs von Sentinel-2 aufgenommen.

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)

2.4 Anzeige von Satellitenbildern

Zeigen Sie das aufgenommene Satellitenbild an und bestätigen Sie es. Satellitenbilder werden in dem Verzeichnis (Ordner) gespeichert, das auf meinem Laufwerk von Google Drive festgelegt ist. Rufen Sie es an und zeigen Sie es an.

#Visualisierung in chronologischer Reihenfolge
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)):
  #Erfassen und visualisieren Sie Bilder Szene für Szene
  with rasterio.open(s2_path + files[i]) as src:
      arr = src.read()
  j+=1#Verschieben und platzieren Sie die Plotposition des Bildes
  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])#Datum vom Dateinamen abrufen
  plt.tight_layout()

Screenshot from 2020-10-02 19-02-04.png Wir haben vier Bilder der Gegend aufgenommen. Der Grund, warum es in vier Teile unterteilt ist, besteht darin, dass Sentinel-2 registriert wird, indem das Bild in ein Quadrat von 100 km unterteilt wird. Dieser interessierende Bereich enthält die vier Teilbilder. Durch die Synthese des ersten und des zweiten Bildes wird der interessierende Bereich abgedeckt. Erstellen Sie daher ein ** zusammengesetztes Bild ** dieser beiden Bilder. Überprüfen Sie zunächst jedes Bild.

#Überprüfen Sie das Bild
s2_path = '/content/drive/My Drive/' + dir_name_s2 + '/'
files =os.listdir(s2_path)
files.sort()

#Daten lesen
n = 0

with rasterio.open(s2_path + files[n]) as src:
    arr = src.read()

print(files[n][0:8])
#Visualisierung
arrayImg0 = np.asarray(arr).transpose(1,2,0).astype(np.float16)/10000
plt.imshow(arrayImg0)
#Überprüfen Sie das Bild
s2_path = '/content/drive/My Drive/' + dir_name_s2 + '/'
files =os.listdir(s2_path)
files.sort()

#Daten lesen
n = 1

with rasterio.open(s2_path + files[n]) as src:
    arr = src.read()

print(files[n][0:8])
#Visualisierung
arrayImg1 = np.asarray(arr).transpose(1,2,0).astype(np.float16)/10000
plt.imshow(arrayImg1)

Kombinieren Sie als Nächstes diese beiden Bilder. ** (Update) ** Ich denke, es gibt mehrere Möglichkeiten, Bilder zu kombinieren, aber zuvor habe ich numpy verwendet, um sie zu kombinieren, aber ich werde sie mit dem Befehl rasterio merge kombinieren, den Sie in den Kommentaren empfohlen haben.

import rasterio.merge

dest, out_transform = rasterio.merge.merge([s2_path + files[0], s2_path + files[1]])

Das zusammengesetzte Bild wird aufgrund der Reihenfolge der RGB-Kanäle Vertikal und Horizontal durch die Transponierungsfunktion konvertiert.

image = dest/10000

img_transformed = image.transpose((1, 2, 0))
img_transformed.shape

Ausgabe

(6596, 11199, 3)

Geben Sie das Bild aus.

plt.imshow(img_transformed)

Screenshot from 2020-10-03 16-57-14.png

Sie können es gut synthetisieren. (Vor dem Update befand sich an der Verbindungsstelle ein schwarzer Teil.) Speichern Sie nun dieses zusammengesetzte Bild als 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()

Als nächstes werde ich das Datum der Bildgebung des künstlichen Satelliten und die Gutschrift des Bildes auf dieses Bild setzen.

2.5 Geben Sie das Bilddatum und die Credits auf dem Satellitenbild ein.

Als nächstes werden das Aufnahmedatum und das Guthaben des Satellitenbildes in diesem Bild beschrieben. Die hier verwendete Schriftart ist diejenige, die im Internet kostenlos für die Öffentlichkeit zugänglich ist. Dies ist auch dein Favorit.

#Laden Sie Schriftdateien herunter und konfigurieren Sie sie
!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"

Schreiben Sie nun die Zeichen auf das Bild.

date = files[n][0:8]

img = Image.open(str(object_name) +'.jpg')

img = img.convert('RGB')

x = int(img.size[0]/1.3) #Einstellen der Datumsbeschreibungsposition
y = int(img.size[1]/20) #Einstellen der Datumsbeschreibungsposition
fs = int(img.size[0]/70) #Einstellen der Schriftgröße für das Datum

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()

Screenshot from 2020-10-03 16-59-15.png

Jetzt haben Sie die notwendigen Informationen auf dem Bild. Ändern Sie den obigen Code, um die Position, Größe, Farbe usw. der Zeichen nach Ihren Wünschen anzupassen. Die erstellte Bilddatei kann auf Ihren PC heruntergeladen werden, indem Sie mit der rechten Maustaste auf den Namen der Zieldatei in der Dateiliste links klicken und ** Herunterladen ** auswählen.

3. Schließlich

Mit der von Google bereitgestellten ** Google Earth Engine ** haben wir als Analysebeispiel eingeführt, wie Satellitenbilder von ** Sentinel-2 ** erfasst und Bilder von ** Waldbränden ** an der Westküste der USA verarbeitet werden. .. Waldbrände dauern immer noch an und es wurden große Schäden gemeldet. Ich bete, dass die Aktivitäten der Feuerwehr fruchtbar werden und dass sie bald zu ihrem normalen Leben zurückkehren. Wenn Sie Kommentare oder Fragen haben, können Sie diese gerne kommentieren. Ich bin glücklich.

Referenzartikel

So erhalten Sie kostenlos die neuesten Satellitenbilder. Ich habe versucht, das Beobachtungsbild des künstlichen Satelliten (Sentinel-2) mithilfe der API automatisch zu erfassen. Erstellen Sie eine geschätzte Verbreitungskarte von Autos aus künstlichen Satellitenbildern von PyTorch. Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft. Ich habe Zeitrafferaufnahmen von Satellitenbildern australischer Waldbrände gemacht.

[Fortsetzung] Künstliche Satellitenbildanalyse von Google Earth Engine und Google Colab-Satellitenbildanalyse ab kostenlos (Übung) - Künstliche Satellitenbildanalyse durch Google Earth Engine und kostenlose Google Colab-Satellitenbildanalyse (Einführung) - [6. Lokale GEE-Ausführung durch 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-Fernerkundungs-Tutorials / Google Earth-Engine% 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 der Satellitendaten - Verständnis, Typ, Frequenz, Auflösung, Anwendungsfall ~ Kannst du Leute vom künstlichen Satelliten sehen? ~ Per Satellit, Bodenauflösung / Ortszeitübersicht ~

Sentinel-2 MSI: MultiSpectral Instrument, Level-1C

Recommended Posts

Schauen wir uns den Waldbrand an der Westküste der USA mit Satellitenbildern an.
Werfen wir einen Blick auf die Feature-Map von YOLO v3
Werfen wir einen Blick auf den Scapy-Code. Überladung spezieller Methoden __div__, __getitem__.
Werfen wir einen Blick auf den Scapy-Code. Wie bearbeiten Sie die Struktur?
Werfen Sie einen Blick auf die Verarbeitung von LightGBM Tuner
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
Sehen Sie sich das Profiling und Dumping mit Dataflow an
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 2 heraus ~ Schauen wir uns die Eingabedaten genauer an ~
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Sehen Sie sich die in Python integrierte Ausnahmebaumstruktur an
Werfen wir einen Blick auf die Infektionstendenz des neuen Coronavirus COVID-19 in jedem Land und den Status der medizinischen Reaktion (zusätzliche Informationen).
Sehen Sie sich die in Python 3.8.2 integrierte Ausnahmebaumstruktur an
Schauen Sie sich die Django-Vorlage an.
Fassen Sie den Titel von Hottentori in Hateb zusammen und schauen Sie sich die Gegenwart des Web an