Praćenje okoliša, poljoprivreda, urbano planiranje, upravljanje katastrofama i studije klimatskih promjena imale su koristi od analize satelitskih slika.
Možemo steći značajne uvide u karakteristike, promjene i dinamiku našeg planeta iskorištavanjem ogromne količine podataka koje bilježe sateliti za promatranje Zemlje.
Python, svestran i snažan programski jezik, nudi bogat ekosustav biblioteka i alata za brzu i učinkovitu obradu satelitskih slika.
Korištenje analiza satelitskih snimaka otvara svijet mogućnosti. Omogućuje nam izvlačenje korisnih informacija iz satelitskih fotografija, kao što je kategorizacija zemljišnog pokrova, procjena zdravlja vegetacije, praćenje urbanog širenja i kartiranje obale.
Možemo jednostavno obraditi, prikazati i analizirati satelitske slike iskorištavanjem svestranosti Pythona i modula kao što su rasterio, numpy i matplotlib.
Jedna od primarnih prednosti korištenja Pythona za analizu satelitskih slika je njegov širok raspon modula za obradu geoprostornih podataka.
Rasterio, na primjer, ima jednostavno sučelje za čitanje i modificiranje rasterskih informacija, što ga čini prikladnim za rad sa datotekama satelitskih slika.
Modul numpy pruža sofisticirane operacije s nizovima za izvođenje brzih izračuna i statistike slikovnih podataka. Matplotlib nam također omogućuje generiranje relevantnih vizualnih elemenata koji pomažu u tumačenju i priopćavanju analitičkih rezultata.
U sljedećim odjeljcima pogledat ćemo stvarne primjere i isječke koda kako bismo pokazali kako se Python može koristiti za analizu satelitskih fotografija.
Razmotrit ćemo kako otvoriti satelitske fotografije, vizualizirati slikovne podatke, izdvojiti metapodatke, izračunati statistiku pojasa i pokrenuti određenu analizu kao što je normalizirani indeks vegetacije razlike (NDVI).
Ovi primjeri pomoći će vam da započnete s intrigantnom temom analize satelitskih slika pomoću Pythona.
Prvo, moramo uvesti neke biblioteke koje će nam pomoći u našem zadatku.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Vizualizacija i otvaranje satelitske slike
Mi ćemo biblioteku Rasterio u ovom odjeljku pristupiti satelitskoj slici koju dobiva satelit_image_path.
Datoteka slike otvara se pomoću metode rasterio.open(), a rezultirajući objekt, satelitska_slika, predstavlja otvorenu sliku.
Za ovaj zadatak upotrijebio sam sliku s ove poveznice: https://unsplash.com/photos/JiuVoQd-ZLk i spremio je na svoje računalo kao "satellite.jpg".
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Nakon otvaranja slike, čitamo je kao niz pomoću funkcije read() objekta satelitske_slike. Vrijednosti piksela za svaki pojas satelitskih slika pohranjene su u nizu slika.
# Read the image as an array
image_array = satellite_image.read()
Za vizualnu procjenu satelitske slike koristimo alat matplotlib.pyplot za generiranje figure veličine 10×10 inča.
Niz slika prikazan je pomoću metode imshow(). Operacija transpose(1, 2, 0) koristi se za preuređivanje dimenzija niza slika kako bi odgovarale redoslijedu predviđenom imshow().
Konačno, axis('off') skriva oznake osi, dajući jasan pogled na satelitsku sliku.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Ekstrakcija metapodataka
Izdvajamo vitalne metapodatke o satelitskoj slici nakon što je otvorimo i prikažemo. Ove informacije pomažu nam u razumijevanju kvalitete slike i nude kontekst za buduća istraživanja.
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)
Korištenjem atributa širine i visine objekta satelitske_slike izdvajamo širinu i visinu slike. Svojstvo crs koristi se za dohvaćanje koordinatnog referentnog sustava slike (CRS).
CRS daje informacije o prostornom referentnom sustavu slike, omogućujući nam da uskladimo koordinate slike s mjestima u stvarnom svijetu.
Na kraju, koristimo atribut count objekta satelitske_snimke za izračun broja traka na slici. Ovi su podaci ključni za kasniju analizu jer nam omogućuju dobivanje vrijednosti piksela za svaki pojas u nizu slike.
3. Izračun statistike opsega
U ovom dijelu izračunavamo statistiku za svaki pojas u nizu slika. Petlja se ponavlja kroz svaki pojas, a funkcije min, max, mean i std biblioteke numpy koriste se za izračunavanje ove statistike.
Popis rječnika pohranjuje statistiku za svaki pojas.
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)
Petlja se kreće kroz svaki pojas, s varijabilnim pojasom koji predstavlja indeks pojasa. Pomoću image_array[band] izvlačimo vrijednosti piksela iz niza slika za svaki pojas.
Zatim se za trenutni pojas koriste funkcije np.min(), np.max(), np.mean() i np.std() za određivanje minimalne, maksimalne, srednje vrijednosti i standardne devijacije piksela vrijednosti.
Izračunati podaci za svaki opseg spremaju se u rječnik s tipkama kao što su 'Band', 'Min', 'Max,' 'Mean' i 'Std. Svaki rječnik je pridodan popisu statistika bendova. Na kraju, podaci o svakom bendu se ispisuju na konzolu.
4. Izračun NDVI (Normalized Difference Vegetation Index).
NDVI je popularna mjera za mjerenje zdravlja biljaka. U ovom odjeljku provjeravamo uključuje li slika najmanje četiri pojasa, koji su potrebni za NDVI izračunavanje.
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 početak smo postavili varijable red_band i nir_band na Ništa. Varijabla image_count zatim se koristi za određivanje sadrži li slika najmanje četiri trake.
Ako je tako, zaključujemo da je crvena traka indeks 2, a bliska infracrvena (NIR) traka indeks 3. Podudarne trake iz niza slike dodijeljene su varijablama red_band i nir_band.
Ako su dostupni i crveni i NIR pojas, NDVI se izračunava pomoću formule (NIR – crveno) / (NIR + crveno). Dobiveni NDVI brojevi označavaju vegetacijski indeks za svaki piksel na slici.
Zatim vidimo NDVI stvaranjem nove figure i prikazivanjem NDVI polja pomoću imshow(). Metoda colorbar() dodaje traku boja na grafikon, dajući NDVI vrijednostima vizualnu referencu.
Kako bismo se u potpunosti usredotočili na NDVI prikaz, dodatno specificiramo naslov za iscrtavanje i uklanjamo oznake osi s axis('off'). Konačno, dijagram je prikazan pomoću plt.show().
Poruka o pogrešci piše se na konzolu ako slici nedostaju potrebni pojasevi za NDVI proračun (tj. manje od četiri pojasa).
5. Približavanje satelitske slike
Najbolje je koristiti funkciju close() za zatvaranje datoteke satelitske slike nakon provedbe analize i pregleda. Ovo oslobađa sve sistemske resurse povezane sa slikovnom datotekom.
satellite_image.close()
Evo mog rješenja:
To je to!
Završne napomene
Uloga Pythona u pomaganju proučavanja ovih masivnih skupova podataka postaje sve važnija kako se povećava dostupnost i razlučivost satelitskih slika.
Sposobnost korištenja Pythona za pristup, obradu, analizu i prikaz satelitskih slika nudi put za kreativne aplikacije i uvide koji mogu potaknuti dobru promjenu i bolje poznavanje našeg svijeta.
Ne zaboravite istražiti veliki izbor dostupnih resursa, vodiča i biblioteka kako biste povećali svoje znanje i sposobnosti dok nastavljate svoju avanturu analize satelitskih slika pomoću Pythona.
Nastavite se zanimati, istražujte i upotrijebite Pythonove sposobnosti za otkrivanje misterija skrivenih unutar satelitskih slika.
Ostavi odgovor