Monitoring životne sredine, poljoprivreda, urbano planiranje, upravljanje katastrofama i studije klimatskih promena su imali koristi od analize satelitskih snimaka.
Možemo steći značajan uvid u karakteristike, promjene i dinamiku naše planete korištenjem ogromne količine podataka snimljenih satelitima koji posmatraju Zemlju.
Python, svestran i jak programski jezik, nudi bogat ekosistem biblioteka i alata za brzu i efikasnu obradu satelitskih snimaka.
Upotreba analiza satelitskih snimaka otvara svijet mogućnosti. Omogućava nam da izvučemo korisne informacije iz satelitskih fotografija, kao što su kategorizacija zemljišnog pokrivača, procjena zdravlja vegetacije, praćenje urbane ekspanzije i mapiranje obale.
Možemo lako obraditi, prikazati i analizirati satelitske slike koristeći Python-ovu svestranost i module kao što su rasterio, numpy i matplotlib.
Jedna od primarnih prednosti korištenja Pythona za analizu satelitskih snimaka je njegov širok raspon modula za obradu geoprostornih podataka.
Rasterio, na primjer, ima jednostavan interfejs za čitanje i modifikovanje rasterskih informacija, što ga čini pogodnim za rad sa datotekama satelitskih slika.
Modul numpy pruža sofisticirane operacije niza za izvođenje brzih proračuna i statistike o podacima slike. Matplotlib nam također omogućava generiranje relevantnih vizuala koji pomažu u interpretaciji i komunikaciji analitičkih rezultata.
U sljedećim odjeljcima ćemo pogledati stvarne primjere i isječke koda kako bismo pokazali kako se Python može koristiti za analizu satelitskih fotografija.
Proći ćemo preko toga kako otvoriti satelitske fotografije, vizualizirati slikovne podatke, izdvojiti metapodatke, izračunati statistiku opsega i pokrenuti određenu analizu kao što je normalizirani indeks razlika vegetacije (NDVI).
Ovi primjeri će vam pomoći da započnete s intrigantnom temom analize satelitskih slika pomoću Pythona.
Prvo, moramo uvesti neke biblioteke da nam pomognu u našem zadatku.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Vizualizacija i otvaranje satelitske slike
U ovom odeljku koristićemo Rasterio biblioteku da pristupimo satelitskoj slici dobijenoj putem satelitske_image_path.
Datoteka slike se otvara metodom rasterio.open(), a rezultirajući objekat, satelit_image, predstavlja otvorenu sliku.
Za ovaj zadatak koristio sam sliku sa ovog linka: https://unsplash.com/photos/JiuVoQd-ZLk i sačuvao je na svom računaru 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 koristeći funkciju read() objekta satelit_image. Vrijednosti piksela za svaki opseg satelitskih slika pohranjene su u nizu slika.
# Read the image as an array
image_array = satellite_image.read()
Da bismo vizuelno procenili satelitsku sliku, koristimo alatku matplotlib.pyplot za generisanje figure veličine 10×10 inča.
Niz slika se prikazuje pomoću metode imshow(). Transpose(1, 2, 0) operacija se koristi za preuređivanje dimenzija niza slika kako bi odgovarale redosledu predviđenom imshow().
Konačno, axis('off') sakriva oznake ose, 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
Izvlačimo vitalne metapodatke o satelitskoj slici nakon što je otvorimo i prikažemo. Ove informacije nam pomažu u razumijevanju kvaliteta 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)
Koristeći atribute širine i visine objekta satelit_image, izdvajamo širinu i visinu slike. Svojstvo crs se koristi za pronalaženje koordinatnog referentnog sistema slike (CRS).
CRS daje informacije o prostornom referentnom sistemu slike, omogućavajući nam da uskladimo koordinate slike sa mjestima u stvarnom svijetu.
Konačno, koristimo atribut count objekta satelit_image da izračunamo broj opsega na slici. Ovi podaci su kritični za kasniju analizu jer nam omogućavaju da dobijemo vrijednosti piksela za svaki opseg u nizu slika.
3. Izračun statistike opsega
U ovom dijelu izračunavamo statistiku za svaki pojas u nizu slika. Petlja se ponavlja kroz svaki opseg, a min, max, srednja vrijednost i std funkcije biblioteke numpy se koriste za izračunavanje ove statistike.
Lista rječnika pohranjuje statistiku za svaki opseg.
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 opseg, pri čemu varijabilni pojas predstavlja indeks opsega. Koristeći image_array[band], izdvajamo vrijednosti piksela iz niza slika za svaki pojas.
Zatim, za trenutni opseg, funkcije np.min(), np.max(), np.mean() i np.std() se koriste za određivanje minimuma, maksimuma, srednje vrijednosti i standardne devijacije piksela vrijednosti.
Izračunati podaci za svaki opseg se pohranjuju u rječnik s tipkama poput 'Band', 'Min,' Max, 'Mean' i 'Std. Svaki rečnik se dodaje listi statistike opsega. Konačno, podaci svakog benda se štampaju na konzoli.
4. Izračun NDVI (Normalized Difference Vegetation Index).
NDVI je popularna mjera za mjerenje zdravlja biljaka. U ovom odeljku proveravamo da li slika uključuje najmanje četiri opsega, koja su potrebna za NDVI računanje.
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, postavili smo varijable red_band i nir_band na None. Varijabla image_count se tada koristi za određivanje sadrži li slika najmanje četiri trake.
Ako je tako, zaključujemo da je crveni pojas indeks 2, a bliski infracrveni (NIR) opseg je indeks 3. Podudarni pojasevi iz niza slika dodijeljeni su varijablama red_band i nir_band.
Ako su dostupni i crveni i NIR pojas, NDVI se izračunava pomoću formule (NIR – Crvena) / (NIR + Red). NDVI brojevi koji rezultiraju označavaju indeks vegetacije za svaki piksel na slici.
Zatim vidimo NDVI kreiranjem nove figure i prikazom NDVI niza pomoću imshow(). Colorbar() metoda dodaje kolorbar dijagramu, dajući NDVI vrijednostima vizuelnu referencu.
Da bismo se u potpunosti fokusirali na NDVI ekran, dodatno specificiramo natpis za dijagram i uklanjamo oznake osa sa axis('off'). Konačno, dijagram se prikazuje sa plt.show().
Poruka o grešci se upisuje na konzolu ako slika nema potrebne opsege za NDVI izračunavanje (tj. manje od četiri opsega).
5. Zatvaranje satelitske slike
Najbolje je koristiti funkciju close() za zatvaranje datoteke satelitske slike nakon provođenja analize i pregleda. Ovo oslobađa sve sistemske resurse povezane sa slikom.
satellite_image.close()
Evo mog rješenja:
To je to!
Final Notes
Uloga Pythona u pomaganju proučavanja ovih masivnih skupova podataka postaje sve važnija kako se povećava dostupnost i rezolucija satelitskih slika.
Mogućnost korištenja Pythona za pristup, obradu, analizu i prikazivanje satelitskih slika nudi put za kreativne aplikacije i uvide koji mogu dovesti do dobrih promjena i boljeg poznavanja našeg svijeta.
Ne zaboravite istražiti veliki izbor resursa, tutorijala i biblioteka dostupnih kako biste povećali svoje znanje i sposobnosti dok nastavljate svoju avanturu u analizi satelitskih slika koristeći Python.
Nastavite da se zanimate, istražujte i koristite Python-ove sposobnosti da otkrijete misterije zakopane u satelitskim slikama.
Ostavite odgovor