Monitorovanie životného prostredia, poľnohospodárstvo, mestské plánovanie, manažment katastrof a štúdie klimatických zmien, to všetko ťaží z analýzy satelitných snímok.
Využitím obrovského množstva údajov zaznamenaných satelitmi na pozorovanie Zeme môžeme získať významné poznatky o charakteristikách, zmenách a dynamike našej planéty.
Python, všestranný a silný programovací jazyk, ponúka bohatý ekosystém knižníc a nástrojov na rýchle a efektívne spracovanie satelitných snímok.
Použitie analýza satelitných snímok otvára svet možností. Umožňuje nám extrahovať užitočné informácie zo satelitných fotografií, ako je kategorizácia krajinnej pokrývky, hodnotenie zdravotného stavu vegetácie, sledovanie rozširovania miest a mapovanie pobrežia.
Satelitné snímky môžeme jednoducho spracovať, zobraziť a analyzovať využitím všestrannosti Pythonu a modulov, ako sú rasterio, numpy a matplotlib.
Jednou z hlavných výhod používania Pythonu na analýzu satelitných snímok je široká škála modulov na spracovanie geopriestorových údajov.
Rasterio má napríklad jednoduché rozhranie na čítanie a úpravu rastrových informácií, vďaka čomu je vhodné na prácu so súbormi satelitných snímok.
Numpy modul poskytuje sofistikované poliové operácie na vykonávanie rýchlych výpočtov a štatistík na obrazových dátach. Matplotlib nám tiež umožňuje vytvárať relevantné vizuály, ktoré pomáhajú pri interpretácii a komunikácii analytických výsledkov.
V nasledujúcich častiach sa pozrieme na skutočné príklady a úryvky kódu, aby sme ukázali, ako možno použiť Python na analýzu satelitných fotografií.
Prejdeme si, ako otvoriť satelitné fotografie, vizualizovať obrazové údaje, extrahovať metadáta, vypočítať štatistiku pásma a spustiť konkrétnu analýzu, ako je index normalizovanej diferenčnej vegetácie (NDVI).
Tieto príklady vám pomôžu začať so zaujímavou témou analýzy satelitných snímok pomocou jazyka Python.
Najprv musíme importovať nejaké knižnice, ktoré nám pomôžu s našou úlohou.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Vizualizácia a otvorenie satelitného obrazu
V tejto časti použijeme knižnicu Rasterio, aby sme získali prístup k satelitnému obrázku, ktorý poskytuje satelitná cesta k obrázku.
Súbor s obrázkom sa otvorí pomocou metódy rasterio.open() a výsledný objekt, satellite_image, predstavuje otvorený obrázok.
Na túto úlohu som použil obrázok z tohto odkazu: https://unsplash.com/photos/JiuVoQd-ZLk a uložil som ho do počítača ako „satellite.jpg“.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Po otvorení obrázku ho prečítame ako pole pomocou funkcie read() objektu satellite_image. Hodnoty pixelov pre každé pásmo satelitných snímok sú uložené v poli snímok.
# Read the image as an array
image_array = satellite_image.read()
Na vizuálne vyhodnotenie satelitnej snímky používame nástroj matplotlib.pyplot na vygenerovanie obrázku s rozmermi 10 × 10 palcov.
Pole obrázkov je zobrazené pomocou metódy imshow(). Operácia transponovať (1, 2, 0) sa používa na zmenu usporiadania rozmerov poľa obrázkov tak, aby zodpovedali poradiu, ktoré predpokladá imshow().
Nakoniec axis('off') skryje označenia osí a poskytne jasný pohľad na satelitný obraz.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Extrakcia metadát
Po otvorení a zobrazení satelitnej snímky extrahujeme dôležité metaúdajové informácie. Tieto informácie nám pomáhajú pochopiť vlastnosti obrázka a ponúkajú kontext pre budúce skúmanie.
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)
Pomocou atribútov width a height objektu satellite_image extrahujeme šírku a výšku snímky. Vlastnosť crs sa používa na získanie súradnicového referenčného systému (CRS) obrázka.
CRS poskytuje informácie o priestorovom referenčnom systéme obrázka, čo nám umožňuje priradiť súradnice obrázka k miestam v reálnom svete.
Nakoniec použijeme atribút count objektu satellite_image na výpočet počtu pásiem na obrázku. Tieto údaje sú kritické pre neskoršiu analýzu, pretože nám umožňujú získať hodnoty pixelov pre každé pásmo v poli obrázkov.
3. Výpočet štatistiky pásma
V tejto časti vypočítame štatistiku pre každé pásmo v poli obrázkov. Naprieč každým pásmom sa iteruje slučka a na výpočet týchto štatistík sa používajú funkcie min, max, priemer a std knižnice numpy.
V zozname slovníkov sú uložené štatistiky pre každé pásmo.
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)
Slučka cykluje naprieč každým pásmom, pričom variabilné pásmo predstavuje index pásma. Pomocou image_array[band] extrahujeme hodnoty pixelov z obrazového poľa pre každé pásmo.
Potom sa pre aktuálne pásmo použijú funkcie np.min(), np.max(), np.mean() a np.std() na určenie minima, maxima, priemeru a štandardnej odchýlky pixelu. hodnoty.
Vypočítané údaje pre každé pásmo sa uložia do slovníka s kľúčmi ako „Band“, „Min“, „Max“, „Mean“ a „Std. Každý slovník je pripojený k zoznamu štatistík pásma. Nakoniec sa údaje každého pásma vytlačia na konzolu.
4. Výpočet NDVI (Normalized Difference Vegetation Index).
NDVI je populárne meradlo na meranie zdravia rastlín. V tejto časti skontrolujeme, či obrázok obsahuje aspoň štyri pásma, ktoré sú potrebné na výpočet 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.")
Na začiatok nastavíme premenné red_band a nir_band na hodnotu None. Premenná image_count sa potom použije na určenie, či obrázok obsahuje aspoň štyri pásy.
Ak áno, odvodíme, že červené pásmo je index 2 a pásmo blízkej infračervenej oblasti (NIR) je index 3. Zhodné pásma z obrazového poľa sú priradené premenným red_band a nir_band.
Ak sú dostupné červené aj NIR pásmo, NDVI sa vypočíta pomocou vzorca (NIR – Red) / (NIR + Red). Výsledné čísla NDVI označujú vegetačný index pre každý pixel na obrázku.
Potom vidíme NDVI vytvorením nového obrázku a zobrazením poľa NDVI pomocou imshow(). Metóda colorbar() pridáva do grafu farebný pruh, čím dáva hodnotám NDVI vizuálnu referenciu.
Aby sme sa úplne zamerali na zobrazenie NDVI, dodatočne špecifikujeme popis grafu a odstránime označenia osí s axis('off'). Nakoniec sa graf zobrazí pomocou plt.show().
Ak na obrázku chýbajú potrebné pásma na výpočet NDVI (tj menej ako štyri pásma), do konzoly sa zapíše chybové hlásenie.
5. Zatvorte satelitný obraz
Najlepšou praxou je použiť funkciu close() na zatvorenie súboru satelitnej snímky po vykonaní analýzy a prezeraní. Tým sa uvoľnia všetky systémové prostriedky spojené s obrazovým súborom.
satellite_image.close()
Tu je moje riešenie:
To je ono!
Záverečné poznámky
Úloha Pythonu pri napomáhaní pri štúdiu týchto masívnych súborov údajov sa stáva čoraz dôležitejšou, keďže sa zvyšuje dostupnosť a rozlíšenie satelitných snímok.
Schopnosť používať Python na prístup, spracovanie, analýzu a zobrazovanie satelitných snímok ponúka cestu pre kreatívne aplikácie a poznatky, ktoré môžu viesť k dobrej zmene a lepšiemu poznaniu nášho sveta.
Nezabudnite preskúmať veľký výber dostupných zdrojov, výukových programov a knižníc, aby ste si rozšírili svoje znalosti a schopnosti, keď budete pokračovať vo svojom dobrodružstve v analýze satelitných snímok pomocou Pythonu.
Naďalej sa zaujímajte, skúmajte a využívajte schopnosti Pythonu na odhaľovanie tajomstiev skrytých v satelitných obrázkoch.
Nechaj odpoveď