Spremljanje okolja, kmetijstvo, urbanistično načrtovanje, obvladovanje nesreč in študije podnebnih sprememb so imele koristi od analize satelitskih posnetkov.
Z izkoriščanjem ogromne količine podatkov, ki so jih zabeležili sateliti za opazovanje Zemlje, lahko pridobimo pomemben vpogled v značilnosti, spremembe in dinamiko našega planeta.
Python, vsestranski in močan programski jezik, ponuja bogat ekosistem knjižnic in orodij za hitro in učinkovito obdelavo satelitskih posnetkov.
Uporaba analizo satelitskih posnetkov odpira svet možnosti. Omogoča nam pridobivanje uporabnih informacij iz satelitskih fotografij, kot so kategorizacija pokrovnosti tal, ocena zdravja vegetacije, sledenje širjenju mest in kartiranje obale.
Z izkoriščanjem vsestranskosti Pythona in modulov, kot so rasterio, numpy in matplotlib, lahko enostavno obdelamo, prikažemo in analiziramo satelitske slike.
Ena glavnih prednosti uporabe Pythona za analizo satelitskih posnetkov je širok nabor modulov za obdelavo geoprostorskih podatkov.
Rasterio ima na primer preprost vmesnik za branje in spreminjanje rastrskih informacij, zaradi česar je primeren za delo z datotekami satelitskih posnetkov.
Modul numpy zagotavlja sofisticirane matrične operacije za izvajanje hitrih izračunov in statističnih podatkov o slikovnih podatkih. Matplotlib nam omogoča tudi ustvarjanje ustreznih vizualnih elementov za pomoč pri interpretaciji in sporočanju analitičnih rezultatov.
V naslednjih razdelkih si bomo ogledali dejanske primere in izrezke kode, da pokažemo, kako se Python lahko uporablja za analizo satelitskih fotografij.
Preučili bomo, kako odpreti satelitske fotografije, vizualizirati slikovne podatke, izvleči metapodatke, izračunati statistiko pasov in izvesti posebno analizo, kot je indeks normalizirane razlike vegetacije (NDVI).
Ti primeri vam bodo pomagali začeti z zanimivo temo analize satelitskih slik s Pythonom.
Najprej moramo uvoziti nekaj knjižnic, ki nam bodo pomagale pri naši nalogi.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Vizualizacija in odpiranje satelitske slike
V tem razdelku bomo uporabili knjižnico Rasterio za dostop do satelitske slike, ki jo posreduje path_satelit_image_path.
Slikovno datoteko odprete z metodo rasterio.open() in nastali objekt, satelitska_slika, predstavlja odprto sliko.
Za to nalogo sem uporabil sliko s te povezave: https://unsplash.com/photos/JiuVoQd-ZLk in jo shranil v svoj računalnik kot »satellite.jpg«.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Ko odpremo sliko, jo preberemo kot matriko s funkcijo read() objekta satelitske_slike. Vrednosti slikovnih pik za vsak pas satelitskih slik so shranjene v matriki slik.
# Read the image as an array
image_array = satellite_image.read()
Za vizualno ovrednotenje satelitske slike uporabimo orodje matplotlib.pyplot za ustvarjanje figure velikosti 10×10 palcev.
Niz slik je prikazan z uporabo metode imshow(). Operacija transpose(1, 2, 0) se uporablja za preureditev dimenzij niza slik, da ustrezajo vrstnemu redu, ki ga predvideva imshow().
Nazadnje axis('off') skrije oznake osi in omogoči jasen pogled na satelitsko sliko.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Ekstrakcija metapodatkov
Ko odpremo in prikažemo satelitsko sliko, izvlečemo ključne metapodatke. Te informacije nam pomagajo razumeti kakovost slike in nudijo kontekst za prihodnje preiskave.
image_width = satellite_image.width
image_height = satellite_image.height
image_crs = satellite_image.crs
image_count = satellite_image.count
print("Image Width:", image_width)
print("Image Height:", image_height)
print("Coordinate Reference System:", image_crs)
print("Number of Bands:", image_count)
Z uporabo atributov širine in višine objekta satelitske_slike izvlečemo širino in višino slike. Lastnost crs se uporablja za pridobitev koordinatnega referenčnega sistema slike (CRS).
CRS daje informacije o prostorskem referenčnem sistemu slike, kar nam omogoča, da uskladimo koordinate slike z resničnimi kraji.
Na koncu uporabimo atribut count objekta satelitske_slike za izračun števila pasov na sliki. Ti podatki so ključnega pomena za poznejšo analizo, saj nam omogočajo pridobitev vrednosti slikovnih pik za vsak pas v nizu slike.
3. Izračun pasovne statistike
V tem delu izračunamo statistiko za vsak pas v nizu slik. Zanka se ponovi čez vsak pas, za izračun te statistike pa se uporabljajo funkcije min, max, mean in std knjižnice numpy.
Seznam slovarjev hrani statistiko za vsak pas.
band_stats = []
for band in range(image_count):
band_data = image_array[band]
band_min = np.min(band_data)
band_max = np.max(band_data)
band_mean = np.mean(band_data)
band_std = np.std(band_data)
band_stats.append({'Band': band+1, 'Min': band_min, 'Max': band_max, 'Mean': band_mean, 'Std': band_std})
print("Band Statistics:")
for stats in band_stats:
print(stats)
Zanka kroži čez vsak pas, pri čemer spremenljivi pas predstavlja indeks pasu. Z uporabo image_array[band] izvlečemo vrednosti slikovnih pik iz slikovnega niza za vsak pas.
Nato se za trenutni pas uporabijo funkcije np.min(), np.max(), np.mean() in np.std() za določitev najmanjšega, največjega, srednjega in standardnega odstopanja slikovne pike. vrednote.
Izračunani podatki za vsak pas so shranjeni v slovarju s tipkami, kot so 'Band', 'Min', 'Max', 'Mean' in 'Std. Vsak slovar je dodan seznamu statistik skupine. Končno se podatki vsakega pasu natisnejo na konzolo.
4. Izračun NDVI (Normalized Difference Vegetation Index).
NDVI je priljubljena mera za merjenje zdravja rastlin. V tem razdelku preverimo, ali slika vključuje vsaj štiri pasove, ki so potrebni za izračun NDVI.
red_band = None
nir_band = None
if image_count >= 4:
red_band = image_array[2] # assuming red band is at index 2
nir_band = image_array[3] # assuming near-infrared band is at index 3
if red_band is not None and nir_band is not None:
ndvi = (nir_band - red_band) / (nir_band + red_band)
# Visualize the NDVI
plt.figure(figsize=(10, 10))
plt.imshow(ndvi, cmap='RdYlGn')
plt.colorbar(label='NDVI')
plt.title('Normalized Difference Vegetation Index (NDVI)')
plt.axis('off')
plt.show()
else:
print("Error: The satellite image does not have the required bands for NDVI calculation.")
Za začetek smo spremenljivki red_band in nir_band nastavili na None. Spremenljivka image_count se nato uporabi za določitev, ali slika vsebuje vsaj štiri pasove.
Če je tako, sklepamo, da je rdeči pas indeks 2, pas bližnje infrardeče svetlobe (NIR) pa indeks 3. Ujemajoči se pasovi iz niza slik so dodeljeni spremenljivkama red_band in nir_band.
Če sta dostopna tako rdeči kot pas NIR, se NDVI izračuna po formuli (NIR – rdeče) / (NIR + rdeče). Številke NDVI, ki nastanejo, označujejo vegetacijski indeks za vsako slikovno piko na sliki.
Nato vidimo NDVI tako, da ustvarimo novo sliko in prikažemo matriko NDVI z uporabo imshow(). Metoda colorbar() doda barvni trak na graf, kar daje vrednostim NDVI vizualno referenco.
Če se želimo v celoti osredotočiti na zaslon NDVI, dodatno določimo napis za izris in odstranimo oznake osi z axis('off'). Končno je graf prikazan s plt.show().
Na konzolo se zapiše sporočilo o napaki, če sliki manjkajo zahtevani pasovi za izračun NDVI (tj. manj kot štirje pasovi).
5. Približevanje satelitske slike
Najboljša praksa je uporaba funkcije close() za zapiranje datoteke satelitske slike po opravljeni analizi in ogledu. To sprosti vse sistemske vire, povezane s slikovno datoteko.
satellite_image.close()
Tu je moja rešitev:
To je to!
Končne opombe
Vloga Pythona pri pomoči pri preučevanju teh ogromnih naborov podatkov postaja vse pomembnejša, saj se razpoložljivost in ločljivost satelitskih slik povečujeta.
Možnost uporabe Pythona za dostop, obdelavo, analizo in prikaz satelitskih slik ponuja pot za kreativne aplikacije in vpoglede, ki lahko spodbudijo dobre spremembe in boljše poznavanje našega sveta.
Ne pozabite raziskati velikega izbora virov, vadnic in knjižnic, ki so na voljo, da povečate svoje znanje in sposobnosti, ko nadaljujete svojo avanturo pri analizi satelitskih posnetkov z uporabo Pythona.
Še naprej se zanimajte, raziskujte in uporabite sposobnosti Pythona za odkrivanje skrivnosti, ki so zakopane v satelitskih slikah.
Pustite Odgovori