Aus dem Satellitenbild der vorherigen Google Earth Engine haben wir den Übergang der Anzahl der Autos auf dem Parkplatz von Tokyo Disneyland berechnet.
Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.
Dieses Mal werden wir wie in der vorherigen Zeit Satellitenbilder von Google Earth Engine erhalten und die Änderungen in der Anzahl der Schiffe in der Bucht von Tokio feststellen.
Dies ist eine Zählung der Schiffe in den Bildern, die vom künstlichen Satelliten nahe dem Eingang der Bucht von Tokio aufgenommen wurden, und der Trend wird berechnet. Ich werde es in diesem Artikel einschließlich der Erläuterung dieses Diagramms vorstellen. 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 **.
Beim letzten Mal haben wir die Anzahl der Autos auf dem Parkplatz von Tokyo Disneyland mithilfe des SAR-Bilds (Radio Wave Sensor) im Satellitenbild berechnet.
Ich habe den Nutzungsstatus des Parkplatzes anhand von Satellitenbildern überprüft.
Es ist schwierig, den Fahrzeugtyp wie ein Auto oder einen LKW im SAR-Bild zu identifizieren, aber es kann qualitativ bewertet werden, wenn eine große Anzahl von Autos auf dem Parkplatz geparkt ist und es nicht von Wolken beeinflusst wird. Daher kann es stabil bewertet werden. Daher werden wir das SAR-Bild erneut verwenden, um die Anzahl der Schiffe aus dem Satellitenbild nahe dem Eingang der Bucht von Tokio zu ermitteln. Dies liegt daran, dass ich dachte, es wäre möglich zu bewerten, wie sich die Anzahl der Gefäße aufgrund des Einflusses des neuen Koronavirus verändert hat, ob es sich nicht verändert hat und inwieweit es sich verändert hat. Ich denke, diese Seite wird hilfreich sein, wie das Schiff im SAR-Bild aussieht.
Dieses aufgenommene Bild von Daichi Nr. 2 ist ein Bild im Beobachtungsmodus mit einer Auflösung von 3 m. Wenn Sie ein großes Schiff sind, können Sie dessen Form sehen. Der wichtige Punkt hierbei ist, dass das Schiff hell und das umgebende Meer dunkel erscheint. 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, werden viele Dinge in der Einfallsrichtung der Radiowellen reflektiert, dh in der Richtung entgegengesetzt zu dem Satelliten, der die emittierten Radiowellen empfängt. Machen. Daher ** Wenn die Zielbodenfläche flach ist, ist das empfangene Signal schwach und das Bild ist dunkel. Die Wasseroberfläche von Seen und Meer ist extrem flach, daher sieht es dunkler aus **. Wenn andererseits Strukturen wie Gebäude, Gebäude, Autos und Schiffe vorhanden sind, sind die Objekte uneben, sodass mehr Radiowellen in dieselbe Richtung wie die Einfallsrichtung reflektiert werden und das Bild heller ist. Zählen wir die Anzahl der Schiffe im Satellitenbild und verwenden diesen ** hell reflektierten Teil ** als Schiff.
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 Anzeigen 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.
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 leicht zu finden 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.
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 dieses Gebiets in der Nähe des Eingangs der Bucht von Tokio aufnehmen.
Fügen Sie dann die kopierten Karteninformationen unten ein und geben Sie sie ein.
A = {"type":"FeatureCollection","features":[{"properties":{"note":"","distance":"35937.06 m","drawtype":"rectangle","area":"12713.15 ha"},"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[139.71197873353958,35.33475055335104],[139.71197873353958,35.452996930987666],[139.81840878725052,35.452996930987666],[139.81840878725052,35.33475055335104],[139.71197873353958,35.33475055335104]]]}}]}
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 = 'tokyobay3'
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=15)
folium.GeoJson(str(object_name) +'_2.geojson').add_to(m)
m
Ausgabe
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
Auf dieser Seite können Sie die Daten des ** Sentinel-1-Beobachtungsbilds vom 3. Oktober 2014 ** verwenden.
Holen Sie sich jetzt das Bild von Sentinel-1 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.
#Geben Sie den Zeitraum an
from_date='2019-01-01'
to_date='2020-08-31'
#Ordnername zum Speichern
dir_name_s1 = 'GEE_Sentinel1_' + object_name
Lassen Sie uns nun die Bildbedingungen für Sentinel-1 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()
Sentinel1 = ee.ImageCollection('COPERNICUS/S1_GRD').filterBounds(region).filterDate(parse(from_date),parse(to_date)).filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING')).select(['VV'])
imageList_s1 = Sentinel1.toList(300)
Da das Beobachtungsbild von Sentinel-1 nur das Beobachtungsbild von Satellit B um 18:00 Uhr verwendet, wird hier in'orbitProperties_pass '' ASCENDING 'ausgewählt. Wenn Sie "Absteigend" einstellen, wird das Beobachtungsbild um 6:00 Uhr angezeigt.
Unter den obigen Bedingungen für die Satellitenbildaufnahme wird nun das Bild des interessierenden Bereichs von Sentinel-1 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)
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
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()
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
plt.tight_layout()
Das beobachtete Bild des SAR-Satelliten ist ein Schwarzweißbild, und der helle Teil in diesem Bild scheint ein Schiff zu sein. Als nächstes zählen Sie die Anzahl der hellen Teile im Bild als Schiffe.
#Daten lesen
n = 2
with rasterio.open(s1_path + files[n]) as src:
arr = src.read()
print(files[n][33:41])
#Visualisierung
plt.imshow(arr[0], cmap='gray')
Als ich das Satellitenbild vergrößerte, wurde bestätigt, dass es viele helle Flecken gab. Lassen Sie uns nun die Intensitätsverteilung dieses Bildes ermitteln.
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(arr[0], bins=50)
fig.show()
Die Signalstärke beträgt häufig 0 oder weniger, es wurden jedoch auch einige Signale von 0 oder mehr beobachtet. Unter dieser Bedingung wird der Binärisierungsprozess zuerst mit 0 oder mehr und weniger als 0 durchgeführt.
Für die Zählmethode der Objekte im Bild habe ich auf die folgende Site verwiesen.
Diese Methode wird mit einer beliebigen Signalstärke binärisiert, ermittelt die Mittelposition bei einer Streuung, prüft in einem beliebigen Fenster, ob die Mittelposition dasselbe Objekt ist oder nicht, und bestimmt die Anzahl der Objekte. Anzahl. Dann werde ich die Methode konkret vorstellen. Erstens war das Beispielbild das zuletzt aufgenommene Bild im aufgenommenen Bild.
#Daten lesen
n = len(files) -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')
Sie können sehen, dass es viele Lichtblicke gibt. Als nächstes wird die Binärisierungsverarbeitung durchgeführt. Hier wird der Binärisierungsprozess mit 0 oder mehr und weniger als 0 unter Bezugnahme auf die obige Signalstärkeverteilung durchgeführt. Zusätzlich wird aus dem erhaltenen binärisierten Bild eine Karte der Mittelposition erstellt.
#Binarisierungsprozess
import cv2
binimg = (arr[0]>0) #Stellen Sie 0 als Schwellenwert ein.
plt.imshow(binimg)
plt.colorbar()
plt.show()
#Entfernungskarte(distance map)Berechnen
binimg = binimg.astype(np.uint8)
distmap = cv2.distanceTransform(binimg,1,3)
plt.imshow(distmap)
plt.colorbar()
plt.show()
Vergrößern Sie den Teil, in dem viele Schiffe abgebildet wurden.
plt.imshow(distmap[0:200,0:200])
plt.colorbar()
plt.show()
Sie können sehen, dass sich das Signal, das ein Schiff zu sein scheint, in eine bestimmte Richtung erstreckt. Als nächstes erhalten Sie die Verteilung mit der maximalen Signalstärke aus diesem Bild. Zu diesem Zeitpunkt wurde die Größe des Schiffes auf 30 Pixel eingestellt. Mit anderen Worten, wir definieren, dass es nur ein Schiff in 30 Pixeln gibt.
#Berechnen Sie den Standort mit dem Maximalwert der Entfernungskarte
out = distmap*0
ksize=30 #Maximalwert innerhalb von 30 Pixel
for x in range(ksize,distmap.shape[0]-ksize*2):
for y in range(ksize,distmap.shape[1]-ksize*2):
if distmap[x,y]>0 and distmap[x,y]==np.max(distmap[x-ksize:x+ksize,y-ksize:y+ksize]):
out[x,y]=1
plt.imshow(distmap[0:200,0:200])
plt.colorbar()
plt.show()
Wenn die Signalstärke an einem Pixel in der Nähe der Position, die ein Schiff zu sein scheint, hoch ist, wird sie möglicherweise fälschlicherweise erkannt. Wenn sie sich also innerhalb eines bestimmten Bereichs befindet, wird sie ignoriert.
#Aufblasen, Kontur erkennen und zählen
out = cv2.dilate(out,(10,10)) #10*Auf 10 aufblasen und nicht zählen, wenn im gleichen Bereich
contours, _ = cv2.findContours(out.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
arr=[]
for i in contours:
x_=0
y_=0
for j in i:
x_ += j[0][0]
y_ += j[0][1]
arr.append([x_/len(i), y_/len(i)])
arr = np.array(arr)
plt.imshow(distmap[0:200,0:200])
plt.colorbar()
plt.show()
print("Anzahl der Schiffe: ", len(arr))
print(arr)
Hier werden die Anzahl der Schiffe und ihre Positionen ausgegeben. Mit dieser Methode wird die Anzahl der Schiffe aus dem aufgenommenen Satellitenbild berechnet und der Übergang grafisch dargestellt.
#Zeitreihendiagramm der geschätzten Anzahl von Schiffen in der Region
#Visualisierung in chronologischer Reihenfolge
s1_path = '/content/drive/My Drive/' + dir_name_s1 + '/'
files =os.listdir(s1_path)
files.sort()
sum_ship = []
label_signal = []
for i in range(len(files)):
label_signal.append(files[i][33:41])
#Erfassen und visualisieren Sie Bilder Szene für Szene
with rasterio.open(s1_path + files[i]) as src:
arr = src.read()
#Binarisierungsprozess
binimg = (arr[0]>0)
#Entfernungskarte(distance map)Berechnen
binimg = binimg.astype(np.uint8)
distmap = cv2.distanceTransform(binimg,1,3)
out = distmap*0
ksize=30 #Maximalwert innerhalb von 30 Pixel
for x in range(ksize,distmap.shape[0]-ksize*2):
for y in range(ksize,distmap.shape[1]-ksize*2):
if distmap[x,y]>0 and distmap[x,y]==np.max(distmap[x-ksize:x+ksize,y-ksize:y+ksize]):
out[x,y]=1
out = cv2.dilate(out,(10,10)) #10*Auf 10 aufblasen und nicht zählen, wenn im gleichen Bereich
contours, _ = cv2.findContours(out.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
num=[]
for i in contours:
x_=0
y_=0
for j in i:
x_ += j[0][0]
y_ += j[0][1]
num.append([x_/len(i), y_/len(i)])
num = np.array(num)
sum_ship.append(len(num))
#Visualisierung
fig,ax = plt.subplots(figsize=(15,6))
plt.plot(sum_ship, marker='o')
ax.set_xticks(np.arange(0,len(files)))
ax.set_xticklabels(label_signal, rotation=90)
plt.show()
Die horizontale Achse ist das Beobachtungsdatum und die vertikale Achse ist die Anzahl der aus dem Beobachtungsbild berechneten Gefäße. Es wird seinen Höchstwert um März 2019 erreichen, danach werden es durchschnittlich 30 Schiffe sein. Ich habe mich gefragt, ob die Schiffsbewegung bei der Corona-Katastrophe nach März 2020 eingeschränkt oder verringert wurde, aber soweit ich sehen kann, scheint die Anzahl der Parkplätze in Tokio Tisneyland extrem abzunehmen. nicht. Tatsächlich suchte ich im Internet nach der Anzahl der Schiffe in der Bucht von Tokio und fand einen Artikel über Kreuzfahrtschiffe, die nicht operierten, aber viele andere Schiffe lehnten ab. Da war nichts. Ich denke, dass selbst in Corona alle auf Sicherheit geachtet haben, um die Verteilung zu stabilisieren. Vielen Dank. Ich habe versucht, die Orte zu untersuchen, an denen viele Schiffe außer der Bucht von Tokio mit derselben Methode navigieren, aber es gibt keine Tendenz, dass die Anzahl der Koronen extrem reduziert wird, selbst wenn es sich um einen Koronaschaden wie diesen handelt, und um Personen, die Schiffe bedienen Durch meine Bemühungen wurde mir klar, dass eine stabile Verteilung aufrechterhalten wurde.
Wir haben die Berechnung der Anzahl der Schiffe in der Bucht von Tokio als Beispiel für die Erfassung und Analyse von Satellitenbildern mit der von Google bereitgestellten Google Earth Engine vorgestellt. 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. Ich bin glücklich.
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.
[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-1 SAR GRD: C-band Synthetic Aperture Radar Ground Range Detected, log scaling
Recommended Posts