[PYTHON] Lassen Sie uns den Entwicklungsstatus der Stadt anhand des Satellitenbildes erraten.

Überblick

Bisher haben wir Beobachtungsbilder vom ** Copernicus Hub ** aufgenommen, einem Hub für Sentinel-Satellitenbilder, und Trends beim Parkstatus von Parkplätzen in Tokio Disneyland und der Anzahl der Schiffe in Tokyo Bay erhalten.

Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft. Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.

Dieses Mal werden wir wie in der vorherigen Zeit Satellitenbilder von ** Google Earth Engine ** erhalten und den Entwicklungsstatus der Vororte von Tokio in den letzten fünf Jahren anhand von Satellitenbildern abschätzen.

Informationen zur Verwendung von Google Earth Engine (im Folgenden: GEE) finden Sie auf der oben genannten Website. ** Wenn Sie ein Google-Konto haben, können Sie es mit Google Colaboratory ** verwenden, sodass Sie keine schwierige Umgebung erstellen müssen, damit Sie es relativ einfach erleben können **.  Screenshot from 2020-09-22 10-44-47.png Dies ist ein zusammengesetztes Bild des ** Beobachtungsbildes von Sentinel-1 am 12. September 2020 ** und des ** Beobachtungsbildes am 21. September 2015 ** vor ungefähr 5 Jahren. Das vergangene Bild ist rot und das aktuelle Bild ist blau. Daraus sind einige relativ große blaue Teile in Odaiba und Tokio Disneyland zu sehen. Es wird geschätzt, dass diese Orte in den letzten 5 Jahren entwickelt wurden.

Ich werde die Erstellungsmethode einschließlich der Erklärung dieses zusammengesetzten Bildes vorstellen. Die endgültige Ausgabe erstellt eine kmz-Datei zum Anzeigen der oben genannten Satellitenbilder in Google Earth. Diese Datei befindet sich unter hier. Wenn Sie sie also auf Google Earth ausprobieren möchten, laden Sie sie bitte herunter. 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

Dieses Mal verwenden wir das vom ** SAR-Satelliten ** aufgenommene Bild, den so genannten Funkwellensensor, aus den Satellitenbildern. Das aufgenommene Bild des SAR-Satelliten ist ** schwer zu strukturieren **, kann jedoch qualitativ bewertet werden, ob es viele Strukturen gibt, und es ist stabil, da es nicht von Wolken beeinflusst wird. tun können. Es gibt jedoch auch bei demselben SAR-Bild einen Unterschied in der Auflösung, und ich möchte, wenn möglich, ein hochauflösendes SAR-Bild verwenden, diesmal jedoch auch ** das Beobachtungsbild des Sentinel-1-Satelliten, das frei ist und regelmäßig beobachtet wird ** Ich werde es benutzen. Die Dichte der Strukturen durch SAR-Bilder kann zu einem gewissen Grad aus den Bildern abgeleitet werden. Ich habe kein zeichnendes Herz, daher werde ich auf verwandte Artikel verweisen.

Screenshot from 2020-08-16 10-34-57.png Kihon der Satellitendaten - Verständnis, Typ, Frequenz, Auflösung, Anwendungsfall ~

Der SAR-Satellit bestrahlt die Erde mit Radiowellen und bildet die Intensität des reflektierten Signals ab. Zu diesem Zeitpunkt werden ** Radiowellen aus einer schrägen Richtung in Bezug auf die Bodenoberfläche emittiert **. Wenn also die Bodenoberfläche flach ist, wie in der Abbildung gezeigt, liegen viele Dinge in der Einfallsrichtung der Radiowellen, dh des Satelliten, der die emittierten Radiowellen empfängt. Es reflektiert in die entgegengesetzte Richtung. Daher ** Wenn die Zielbodenfläche flach ist, ist das empfangene Signal schwach und das Bild dunkel. Die Wasseroberfläche von Seen und Meer ist extrem flach, daher sieht es dunkler aus **. Wenn es dagegen eine Struktur wie ein Gebäude, ein Gebäude oder ein Auto gibt, ist das Objekt uneben, sodass mehr Funkwellen in die gleiche Richtung wie die Einfallsrichtung reflektiert werden und das Bild hell aussieht. Zum Beispiel ist das Beobachtungsbild des Radiosatelliten von Tokyo Disneyland wie folgt.

Screenshot from 2020-08-16 10-41-01.png

Sie können die Einrichtungen in Disneyland sehen. Wie Sie wahrscheinlich wissen, wenn Sie nach Disneyland gefahren sind, können Sie sehen, dass es einen Parkplatz gibt, der breit und flach ist, so dass es dunkel aussieht. Mit Blick auf die Disneyland-Homepage ist geplant, an der Stelle, an der 2015 ein Parkplatz war, ein umfangreiches Expansionsprojekt für Tokyo Disney Sea zu entwickeln. , Es stellte sich heraus, dass die Attraktion zu diesem Zeitpunkt hier gebaut wird. Darüber hinaus werden Odaiba und die Golfregion im Einklang mit Ereignissen wie den Olympischen Spielen in Tokio entwickelt, und Sie können das Muster möglicherweise anhand von Satellitenbildern erkennen. Die diesmal verwendeten künstlichen Satelliten sind Sentinel-1 und 2, die von der Europäischen Weltraumorganisation entwickelt und betrieben werden. Einzelheiten hierzu finden Sie in den folgenden Artikeln.

So erhalten Sie kostenlos die neuesten Satellitenbilder.

Das beobachtete Bild der Analysebewertung ist Sentinel-1, ein SAR-Satellit. Sentinel-1 besteht aus zwei Satelliten, ** einer hat 12 Tage Rückgabetage ** (was bedeutet, dass er alle 12 Tage unter denselben Bedingungen denselben Bereich durchquert), aber er besteht aus zwei. Daher beobachten wir viele Gebiete ** einmal alle 6 Tage **. Diese ** regelmäßige Beobachtung ** ist ein Hauptmerkmal des Sentinel-Satelliten und ein Vorteil für die Benutzer. Screenshot from 2020-08-16 10-50-29.png [Sentinel-1 Observation Scenario] (https://sentinel.esa.int/web/sentinel/missions/sentinel-1/observation-scenario)

Außerdem ist die Beobachtungszeit künstlicher Satelliten nahezu festgelegt ** für optische Satelliten gegen 10:30 Uhr und für SAR-Satelliten gegen 6:00 Uhr und 18:00 Uhr **. Kannst du Leute vom künstlichen Satelliten sehen? ~ Per Satellit, Bodenauflösung / Ortszeitzusammenfassung ~ Screenshot from 2020-09-22 11-03-12.png

Für Sentinel-1, das zuvor eingeführt wurde, beträgt die Beobachtungszeit für Satellit A ca. 6 Uhr und für Satellit B ca. 18 Uhr. Da die Bestrahlungsrichtung von Funkwellen für jeden Satelliten unterschiedlich ist, ist es nicht angebracht, beide Satellitenbilder zu vergleichen, da der Unterschied erfasst werden kann. Daher verwenden wir dieses Mal nur das Bild von Satellit B, um das vergangene Bild zu erfassen, das mit dem aktuellen Satellitenbild verglichen werden soll, und um ein zusammengesetztes Bild davon zu erstellen. Der Zweck der Erstellung eines zusammengesetzten Bildes besteht darin, die Änderungen visuell leicht verständlich zu machen. Wenn Sie das aktuelle Bild blau und das vergangene Bild rot machen, zeigt der blau erscheinende Teil an, dass das Signal stärker geworden ist, und der rot erscheinende Teil zeigt an, dass das Signal schwächer geworden ist. Da die Stärke des Signals von der Anwesenheit oder Abwesenheit von Gebäuden und der Dichte abhängt, ** zeigt der blaue Teil an, dass die Entwicklung fortgeschritten ist **, und ** der rote Teil zeigt an, dass die Struktur verschwunden ist ** (abgeflacht). Es ist. Als nächstes werden wir die Erfassung von Satellitenbildern von GEE und deren Auswertung vorstellen.

2. Erfassung und Auswertung von Satellitenbildern

2.1 Umweltvorbereitung (Bau).

Ich habe es bisher eingeführt, aber da einige von Ihnen neu in diesem Artikel sind, werde ich es duplizieren. Wenn Sie wissen, fahren Sie bitte mit 2.4 fort. 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) - ** Einfach kostenlos zu verwenden, wenn Sie ein Google-Konto haben **. Es ist eine erstaunliche Welt geworden. Die erfassten Daten wie Satellitenbilder werden in Google Drive gespeichert. Da der Code und die Daten bei jeder Verwendung von Google Colaboratory gelöscht werden, ist es praktisch, die Daten in Ihrem eigenen Google Drive zu haben. Da die Kapazität von Google dirve für die kostenlose Nutzung jedoch 20 GB beträgt, wird es leer, sobald ein großes Satellitenbild heruntergeladen wird. Löschen Sie es daher gegebenenfalls. Lassen Sie mich nun den Code vorstellen.

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 Aufgaben wie das Anzeigen der erfassten Satellitenbilder und das Installieren der für deren Digitalisierung und Analyse erforderlichen Module aus.

#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 erhalten, müssen Sie ** Breiten- / Längengradinformationen ** des Zielgebiets eingeben, an dem Sie interessiert sind. Ich erinnere mich irgendwie an den Breiten- und Längengrad Japans aus dem Geographieunterricht in der Schule und auf der ganzen Welt, aber wie groß ist der Längen- und Breitengrad meines Zuhauses? Selbst wenn es gesagt wird, denke ich, dass Sie es endlich herausfinden können, indem Sie suchen und suchen. (Natürlich erinnere ich mich auch nicht.) Deshalb habe ich Folgendes gemacht, damit der Breiten- und Längengrad des interessierenden Gebiets leicht untersucht und ermittelt werden kann.

#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. Im Fall des Parkplatzes von Tokyo Disneyland, der das Ziel dieser Zeit ist, wird dies beispielsweise wie folgt sein. Screenshot from 2020-09-22 11-07-07.png

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

A = {"type":"FeatureCollection","features":[{"properties":{"note":"","distance":"56641.31 m","drawtype":"rectangle","area":"38085.35 ha"},"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[139.7144973278046,35.51642373317183],[139.7144973278046,35.6731886200871],[139.95559573173526,35.6731886200871],[139.95559573173526,35.51642373317183],[139.7144973278046,35.51642373317183]]]}}]}

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 = 'TokyoBay_RGB'
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]

area = pd.DataFrame(AREA, columns=['longtitude', 'latitude'])

area_d =[[area['longtitude'].min(), area['latitude'].max()],
 [area['longtitude'].max(), area['latitude'].max()],
 [area['longtitude'].max(), area['latitude'].min()],
 [area['longtitude'].min(), area['latitude'].min()],
 [area['longtitude'].min(), area['latitude'].max()]]

AREA = area_d

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=11)

folium.GeoJson(str(object_name) +'_2.geojson').add_to(m)
m

Ausgabe Screenshot from 2020-09-22 11-05-54.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-1 SAR GRD: C-band Synthetic Aperture Radar Ground Range Detected, log scaling Sentinel-2 MSI: MultiSpectral Instrument, Level-1C

Auf dieser Seite können ** Sentinel-1-Beobachtungsbilder ab dem 3. Oktober 2014 ** und ** Sentinel-2-Daten ab dem 23. Juni 2015 ** verwendet werden. Für das Beobachtungsbild von Sentinel-2 wird auch ein Bild der Stufe 2A der atmosphärischen Korrektur mit entferntem Nebel der Atmosphäre erstellt, aber nur das Bild nach dem 28. März 2017, als die Analyse zum Standard wurde, wird anvisiert. Es wird. Wenn Sie ein älteres Beobachtungsbild verwenden möchten, verwenden Sie dieses Bild.

Holen Sie sich jetzt die Bilder von Sentinel-1 und 2 von GEE und speichern Sie sie in Google Colaboratory.

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

region=ee.Geometry.Rectangle(area['longtitude'].min(),area['latitude'].min(), area['longtitude'].max(), area['latitude'].max())

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 werden wir zuerst die neuesten Satellitenbilder aufnehmen, um Satellitenbilder verschiedener Tage aufzunehmen. Hier ist es der 20. September 2020.

#Geben Sie das Fälligkeitsdatum an
import datetime

date = datetime.date(2020, 9, 20)

dt_now = datetime.date.today()
dt = dt_now - date

if dt.days < 6:
  dt_nd = datetime.timedelta(days=12)
  dt_pd = datetime.timedelta(days=0)
else:
  dt_nd = datetime.timedelta(days=6)
  dt_pd = datetime.timedelta(days=6)

#Beobachtungszeitraum
from_date= date - dt_nd
to_date= date + dt_pd

from_date = from_date.strftime('%Y-%m-%d')
to_date = to_date.strftime('%Y-%m-%d')


#Ordnername zum Speichern
dir_name_s1 = 'GEE_Sentinel1_' + object_name
dir_name_s2 = 'GEE_Sentinel2_' + object_name

Da die Beobachtungshäufigkeit von Sentinel-1 alle 12 Tage beträgt, wird das vergangene Bild erfasst, wenn das festgelegte Datum nahe am Zeitpunkt der Analyse liegt, und wenn es sich um ein bestimmtes vorheriges Bild handelt, wird das Bild für 6 Tage davor und danach erfasst. tat.

Lassen Sie uns nun die Bildbedingungen für Sentinel-1 und 2 festlegen. Ich werde das Bild von Sentinel-2 dieses Mal nicht verwenden, aber ich werde es als Referenz erhalten.

def cloudMasking(image):
    qa = image.select('QA60')
    cloudBitMask = 1 << 10  
    cirrusBitMask = 1 << 11
    mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0))
    return image.updateMask(mask).divide(10000)

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

#Nur aufsteigend oder absteigend wird verwendet, um die beobachteten Bilder auf demselben Satelliten zu vergleichen.
Sentinel1 = ee.ImageCollection('COPERNICUS/S1_GRD').filterBounds(region).filterDate(parse(from_date),parse(to_date)).filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING')).select(['VV'])
Sentinel2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(parse(from_date),parse(to_date)).filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than', 10).map(cloudMasking).select(['B4','B3','B2'])

imageList_s1 = Sentinel1.toList(300)
imageList_s2 = Sentinel2.toList(300) 

Da hier das Beobachtungsbild von Sentinel-1 nur das Beobachtungsbild des ** B-Satelliten um 18 Uhr ** verwendet, wird ** 'ASCENDING' ** in'orbitProperties_pass 'ausgewählt. Wenn Sie "Absteigend" einstellen, wird das Beobachtungsbild um 6:00 Uhr angezeigt.

Unter den oben genannten Bedingungen für die Satellitenbildaufnahme werden nun die Bilder der interessierenden Bereiche von Sentinel-1 und Sentinel-2 aufgenommen.

for i in range(imageList_s1.size().getInfo()):
    image = ee.Image(imageList_s1.get(i))
    ImageExport(image.reproject(crs='EPSG:4326',scale=10),image.get('system:index').getInfo(),dir_name_s1,region['coordinates'][0],10)
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 und Glättungsverarbeitung durch Filter

Lassen Sie uns nun das in 2.3 aufgenommene Satellitenbild anzeigen und bestätigen. 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. Zunächst aus dem Beobachtungsbild von Sentinel-2.

#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.float32)*2 #Die Helligkeit wird durch Verdoppeln der Helligkeit korrigiert.
  plt.imshow(arrayImg)
  plt.title(files[i][0:8])#Datum vom Dateinamen abrufen
  #plt.tight_layout()

Screenshot from 2020-09-22 11-13-15.png

** Die Auflösung des beobachteten Bildes von Sentinel-2 beträgt 10 m **. Wenn es sich jedoch um eine große Struktur handelt, wissen Sie möglicherweise, ob es erstellt wurde. Da uns die Beobachtungsbilder von optischen Satelliten auf Google Map bekannt sind, können wir sie leicht finden, da der Zweck (Standort) bei der Nutzung dieses Dienstes angegeben wird. Dies kann jedoch bemerkt werden, wenn Informationen vorliegen, dass ** die Struktur dort gebaut worden wäre **, aber herausfinden, ob die Struktur irgendwo in diesem Bereich gebaut wurde. Wird schwierig sein **, weil es keinen ** Index gibt. Daher verwenden wir dieses Mal nicht das beobachtete Bild von Sentinel-2 zur Bewertung, aber indem wir die Änderung durch Vergleichen des beobachteten Bildes von Sentinel-1 zeigen, ** können wir den Unterschied leicht finden **. Lassen Sie uns nun das beobachtete Bild von Sentinel-1 anzeigen.

#Visualisierung in chronologischer Reihenfolge
s1_path = '/content/drive/My Drive/' + dir_name_s1 + '/'
files =os.listdir(s1_path)
files.sort()

plt.figure(figsize=(20, 40))
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(s1_path + files[i]) as src:
      arr = src.read()
  #print(arr[0].shape)
  j+=1#Verschieben und platzieren Sie die Plotposition des Bildes
  plt.subplot(v,5,j)
  plt.imshow(arr[0], cmap='gray')
  plt.title(files[i][33:41])#Datum vom Dateinamen abrufen
  date0 = files[i][33:41]
  plt.tight_layout()

Screenshot from 2020-09-22 11-39-26.png Daraus wurden zwei Beobachtungsbilder mit demselben Beobachtungsdatum aufgenommen. Es wird angenommen, dass der Grund, warum die beiden Beobachtungsbilder im selben Bereich getrennt sind, darin besteht, dass die Standardgröße des Satellitenbilds von Sentinel-1 100 km × 100 km beträgt und der interessierende Bereich diesmal dieses Gebiet überquerte. Daher werden die in zwei Teile unterteilten Satellitenbilder zunächst zu einem kombiniert.

#Daten lesen
n = 0

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

print(files[n][33:41])
#Visualisierung
plt.imshow(arr[0], cmap='gray')

type(arr[0])
image1 =np.zeros(arr[0].shape)

image_1 = np.nan_to_num(arr[0])
#Daten lesen
n = 1

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

print(files[n][33:41])
#Visualisierung
plt.imshow(arr[0], cmap='gray')

type(arr[0])
image2 =np.zeros(arr[0].shape)

image_2 = np.nan_to_num(arr[0])

Hier ist der Bereich (weißer Teil), der im interessierenden Bereich nicht erfasst wurde, ** (Nan) ** ohne Daten, daher wird dieser durch ** 0 ** ersetzt. Kombinieren Sie als Nächstes diese beiden Bilder.

image_BG = image_1 + image_2
plt.imshow(image_BG, cmap='gray')

Screenshot from 2020-09-22 11-43-36.png

Sie haben jetzt das Satellitenbild des SAR-Satelliten am 12. September 2020 vorbereitet. Das Bild des SAR-Satelliten erzeugt aufgrund von Reflexionen von Strukturen auf dem Boden eine große Anzahl von Lichtfleckgeräuschen, die als ** Speckle-Rauschen ** bezeichnet werden. Dies wird durch Interferenzen während der Reflexion verursacht, da die vom SAR-Satelliten verwendeten Funkwellen Wellen sind. ** Glättungsverarbeitung ** ist erforderlich, da dieses Rauschen die nachfolgende Verarbeitung beeinträchtigen kann. Dieses Mal haben wir den ** Lee-Filter ** verwendet, einen allgemeinen SAR-Bildglättungsprozess. Die vorbereitete Lee-Filterfunktion ist wie folgt.

from scipy.ndimage.filters import uniform_filter
from scipy.ndimage.measurements import variance

def lee_filter(img, size):
    img_mean = uniform_filter(img, (size, size))
    img_sqr_mean = uniform_filter(img**2, (size, size))
    img_variance = img_sqr_mean - img_mean**2

    overall_variance = variance(img)

    img_weights = img_variance / (img_variance + overall_variance)
    img_output = img_mean + img_weights * (img - img_mean)
    return img_output

Lassen Sie uns nun den Glättungsprozess durchführen. Hier wurde eine Glättungsverarbeitung innerhalb von 3 Pixeln durchgeführt.

image_BG_lee = lee_filter(image_BG, 3)

plt.imshow(image_BG_lee,cmap='gray')

Screenshot from 2020-09-22 11-48-40.png

Sie können den Effekt des Filters bei der Größe dieses Satellitenbilds nicht sehen. Bitte überprüfen Sie den Unterschied, indem Sie das erstellte Bild herunterladen. Als nächstes werden die vergangenen Satellitenbilder verglichen. Hier wurde das Bild vor 5 Jahren aufgenommen.

#Geben Sie das Beobachtungsdatum des Basisbilds an
date = datetime.date(2015, 9, 20)
print(date)
#Beobachtungszeitraum

from_date= date - dt_nd
to_date= date + dt_pd

from_date = from_date.strftime('%Y-%m-%d')
to_date = to_date.strftime('%Y-%m-%d')


#Ordnername zum Speichern
dir_name_s1 = 'GEE_Sentinel1_R_' + object_name
dir_name_s2 = 'GEE_Sentinel2_R_' + object_name
for i in range(imageList_s1.size().getInfo()):
    image = ee.Image(imageList_s1.get(i))
    ImageExport(image.reproject(crs='EPSG:4326',scale=10),image.get('system:index').getInfo(),dir_name_s1,region['coordinates'][0],10)

Lassen Sie uns nun das aufgenommene Bild anzeigen.

#Visualisierung in chronologischer Reihenfolge
s1_path = '/content/drive/My Drive/' + dir_name_s1 + '/'
files =os.listdir(s1_path)
files.sort()

plt.figure(figsize=(20, 40))
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(s1_path + files[i]) as src:
      arr = src.read()
  print(arr[0].shape)
  #print(image)
  j+=1#Verschieben Sie die Plotposition des Bildes
  plt.subplot(v,5,j)
  #image =  arr[0].fillna(0)
  plt.imshow(arr[0], cmap='gray')
  plt.title(files[i][33:41])#Datum vom Dateinamen abrufen
  date1 = files[i][33:41]
  plt.tight_layout()

Screenshot from 2020-09-22 11-51-34.png

Dieses Mal wird das Bild, das sich vom vorherigen unterscheidet, nicht geteilt, und es ist ein Bild, das den gesamten interessierenden Bereich enthält. Dieses Bild wird wie zuvor auch mit einem ** Filter ** geglättet.

image_R_lee = lee_filter(image_BG, 3)
plt.imshow(image_R_lee,cmap='gray')

Erstellen Sie als Nächstes ein ** RGB-Bild **, das aktuelle Satellitenbilder und frühere Satellitenbilder kombiniert. Dieses Mal werden ** vergangene Bilder auf Rot ** und ** aktuelle Bilder auf Blau und Grün ** gesetzt.

2.5 Erstellen Sie ein zusammengesetztes RGB-Bild der letzten und vergangenen Satellitenbilder

Erstellen Sie nun aus jedem Satellitenbild ein ** RGB-Verbundbild **.

#RGB-Zusammensetzung
RGB = np.dstack((image_R, np.dstack((image_BG_lee, image_BG_lee))))

print(RGB.shape)
plt.figure(figsize=(15, 20))
plt.imshow(RGB)
plt.show()

Screenshot from 2020-09-22 12-00-05.png

Auf diesem Bild sehen Sie die blauen Flecken in Odaiba und Maihama. ** Die roten und blauen Punkte in der Bucht von Tokio zeigen das Schiff an **, das das Schiff am Aufnahmedatum anzeigt. Es gibt andere Orte, die rot erscheinen, und es scheint, dass die Gebäude verschwunden sind oder sich versammelt haben, um aufgrund der Entwicklung eine große Sache zu werden. Man kann sagen, dass die rote Farbe auch in diesem Sinne eine Entwicklung anzeigt.

Speichern Sie nun das hier aufgenommene Bild in JPEG mit dem Beobachtungsdatum und den Credits.

import cv2
from PIL import Image, ImageDraw, ImageFont

img_bgr = np.dstack((image_R, np.dstack((image_BG_lee, image_BG_lee))))

new_arr = ((img_bgr - img_bgr.min()) * (1/(img_bgr.max() - img_bgr.min()) * 255)).astype('uint8')


im_rgb = cv2.cvtColor(new_arr, 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()

Screenshot from 2020-09-22 13-03-09.png So wie es ist, ist das Bild insgesamt weiß und es ist schwierig, das wechselnde Blau und Rot zu erkennen. Gehen Sie nun wie folgt vor, um den Kontrast zu ändern. Das ist dein Favorit.

import PIL.Image
from PIL import ImageEnhance

IMAGE_PATH = str(object_name) +'.jpg'
CONTRAST = 2.0

img = PIL.Image.open(IMAGE_PATH)

#Ändern Sie den Kontrast
contrast_converter = ImageEnhance.Contrast(img)
contrast_img = contrast_converter.enhance(CONTRAST)

#Bild speichern
contrast_img.save(str(object_name) +'.jpg')

plt.figure(figsize=(15, 20))

plt.imshow(contrast_img)
plt.show()

Screenshot from 2020-09-22 13-04-41.png Der Wechsel zwischen Blau und Rot ist leichter zu erkennen als zuvor. 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.

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

img = img.convert('RGB')


x = int(img.size[0]/1.21) #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), 'R: '+str(date1), fill=(255, 255, 255), font=obj_font)
obj_draw.text((x, y+1.1*fs), 'G: '+str(date0), fill=(255, 255, 255), font=obj_font)
obj_draw.text((x, y+2.2*fs), 'B: '+str(date0), fill=(255, 255, 255), font=obj_font)
obj_draw.text((img.size[0]/2.0, 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 = img.convert('L')


img.save(str(object_name) +'.jpg')

plt.figure(figsize=(15, 20))

plt.imshow(img)
plt.show()

Screenshot from 2020-09-22 13-07-23.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. Erstellen Sie als Nächstes eine ** kmz-Datei **, damit die hier aufgenommenen Bilder auf einem lokalen PC mit einer ** GIS-App ** (z. B. ** Google Earth **) angezeigt werden können.

2.6 Erstellen Sie eine kmz-Datei zur Anzeige mit der GIS-Software

Informationen zum Erstellen einer kmz-Datei finden Sie in dem folgenden Artikel, der zuvor ausführlich beschrieben wurde.

Datenanalyse auf der freien Umgebungsplattform "Tellus" für künstliche Satellitenbilder. -Google Earth-](https://qiita.com/nigo1973/items/4bee0280b2569709d836)

Ich denke, es gibt verschiedene Möglichkeiten, eine kmz-Datei zu erstellen, aber dieses Mal werde ich ** simplekml ** verwenden, das von Python bereitgestellt wird. Installieren und verwenden Sie das Modul

!pip install simplekml

import simplekml
import zipfile

Lesen Sie als Nächstes die Breiten- / Längengradinformationen des Bildes.

area = pd.DataFrame(AREA,
                  columns=['longtitude', 'latitude'])

north = area["latitude"].max()
south = area["latitude"].min()
east = area["longtitude"].max()
west = area["longtitude"].min()

Erstellen Sie als Nächstes eine kml-Datei (Breiten- / Längengradinformationen) des oben genannten Interessensgebiets.

#Geografische Informationen in kml ausgeben.
kml = simplekml.Kml()
ground = kml.newgroundoverlay(name=str(object_name))
ground.icon.href = str(object_name) +'.jpg'
ground.latlonbox.north = north
ground.latlonbox.south = south
ground.latlonbox.east = east
ground.latlonbox.west = west
ground.latlonbox.rotation = 0
kml.save(str(object_name)+".kml")

Definieren Sie dann die Verknüpfung zwischen der erstellten ** kml-Datei ** und dem anzuzeigenden Bild und erstellen Sie eine ** kmz-Datei **.

#Gibt kmz aus, das geografische Informationen und Bilder kombiniert.
with zipfile.ZipFile(str(object_name)+'.kmz', "w", zipfile.ZIP_DEFLATED) as zf:
    zf.write(str(object_name)+".kml", arcname=str(object_name)+".kml")
    zf.write(str(object_name) +'.jpg', arcname=str(object_name) +'.jpg')

Die kmz-Datei wird jetzt erstellt. Sie können die von Google Colaboratory erstellte kmz-Datei überprüfen. Wenn Sie die rechte Seite dieser Datei mit der Maus auswählen, wird ** download ** angezeigt. Laden Sie die Datei herunter.

Screenshot from 2020-09-22 13-17-24.png

Wenn ** Google Earth ** auf Ihrem Gerät installiert ist, doppelklicken Sie auf die heruntergeladene ** kmz-Datei **, um Google Earth automatisch zu starten und das erstellte Bild in die Karte einzufügen.

Screenshot from 2020-09-22 13-19-43.png Sie können im Bild überprüfen, wo der Speicherort blau oder rot ist, und die Auswahl der kmz-Datei aufheben, um zu sehen, wo sie sich befindet. ** Ist der blaue Teil von Odaiba der Ort, an dem der Container abgestellt werden kann? Es stellte sich heraus **. Davon abgesehen ist der Parkplatz von Tokyo Disneyland teilweise blau **, was vermutlich die geplante Baustelle für die ** neue Attraktion ** von Disney Sea ** ist. (Luftbilder von Google Earth haben einen Zeitschieberegler. Überprüfen Sie daher bitte das Aufnahmedatum und die vergangenen des jeweiligen Teils.)

3. Schließlich

Wir haben vorgestellt, wie Sie mit der von Google bereitgestellten Google Earth Engine Satellitenbilder des gewünschten Tages erfassen und sehen können, wie sich die Stadt verändert und wo sie sich erheblich verändert. Hier haben wir hauptsächlich Tokyo Bay evaluiert und festgestellt, dass die Entwicklung in ** Odaiba und Tokyo Disneyland ** aktiv voranschreitet. Wenn Sie einen anderen Ort auf die gleiche Weise betrachten, können Sie die sich entwickelnde Stadt extrahieren. Da die zeitliche Änderung der Stadtsituation erkennbar ist, können außerdem Schäden, die durch andere Katastrophenfaktoren als die Entwicklung verursacht wurden, mit derselben Methode identifiziert werden.

Leitfaden zur Verwendung künstlicher Satelliten im Falle eines Hochwasserschadens bei Katastrophen / Satellitengrundlagen

Persönlich denke ich, dass der beste Weg, Satellitenbilder zu verwenden, darin besteht, diese Änderungen zu extrahieren. Satellitenbilder sind Oberflächeninformationen, und es ist möglich, über einen langen Zeitraum den Unterschied zwischen vergangenen und gegenwärtigen Bildern und den Trend zwischen ihnen (z. B. die Anzahl der im vorherigen Artikel eingeführten Parkplätze auf dem Parkplatz) zu ermitteln. Es gibt verschiedene Zwecke, aber die Methode ist ** Änderungsextraktion **. Es macht nicht nur Spaß, Satellitenbilder zu durchsuchen, sondern auch Vergangenheit und Gegenwart zu vergleichen und zu erraten, was passiert. Ich hoffe, dass dies eine Gelegenheit für mehr Menschen sein wird, sich für Satellitenbilder zu interessieren. Wenn Sie Kommentare oder Fragen haben, können Sie diese gerne kommentieren.

Referenzartikel

Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft. Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln. So erhalten Sie kostenlos die neuesten Satellitenbilder.

Kihon der Satellitendaten - Verständnis, Typ, Frequenz, Auflösung, Anwendungsfall ~ Kannst du Leute vom künstlichen Satelliten sehen? ~ Per Satellit, Bodenauflösung / Ortszeitzusammenfassung ~

Sentinel-1 SAR GRD: C-band Synthetic Aperture Radar Ground Range Detected, log scaling Sentinel-2 MSI: MultiSpectral Instrument, Level-1C

Leitfaden zur Verwendung künstlicher Satelliten im Falle eines Hochwasserschadens bei Katastrophen / Satellitengrundlagen

Recommended Posts

Lassen Sie uns den Entwicklungsstatus der Stadt anhand des Satellitenbildes erraten.
Schneiden wir das Gesicht aus dem Bild
Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.
Lassen Sie uns von der Linie suchen
Entfernen Sie den Rahmen aus dem Bild
So erhalten Sie den Pixelwert des Punkts aus dem Satellitenbild, indem Sie den Breiten- und Längengrad angeben
Liste der Katastrophenfälle der Feuerwehr von Sapporo City [Python]
Existenz aus Sicht von Python
Visualisieren Sie den Antwortstatus der Volkszählung 2020
Lassen Sie uns den Gewinner des Bingo bestimmen
Lassen Sie uns über die Tonkurve der Bildverarbeitung sprechen ~ LUT ist erstaunlich ~
Aggregiert nach Präfektur / Stadt / Gemeinde / Stadt / Dorf aus dem PDF des wöchentlichen Bellmark-Empfangsstatus der Bellmark Education Grant Foundation
Notizen vom Anfang von Python 1 lernen
Lassen Sie die Stückliste am Anfang der Zeichenfolge weg
Untersuchen wir den Mechanismus von Kaijis Chinchirorin
Notizen vom Anfang von Python 2 lernen
Analysieren Sie den Nutzungsstatus der Kontaktbestätigungsanwendung (COCOA), die in "Image" / Tesseract veröffentlicht ist