Monitorování životního prostředí, zemědělství, městské plánování, zvládání katastrof a studie změny klimatu, to vše těží z analýzy satelitních snímků.
Využitím obrovského množství dat zaznamenaných družicemi pro pozorování Země můžeme získat významné poznatky o charakteristikách, změnách a dynamice naší planety.
Python, všestranný a silný programovací jazyk, nabízí bohatý ekosystém knihoven a nástrojů pro rychlé a efektivní zpracování satelitních snímků.
Použití analýza satelitních snímků otevírá svět možností. Umožňuje nám extrahovat užitečné informace ze satelitních fotografií, jako je kategorizace krajinného pokryvu, hodnocení zdraví vegetace, sledování městské expanze a mapování pobřeží.
Můžeme snadno zpracovávat, zobrazovat a analyzovat satelitní snímky využitím všestrannosti Pythonu a modulů, jako je rasterio, numpy a matplotlib.
Jednou z hlavních výhod používání Pythonu pro analýzu satelitních snímků je široká škála modulů pro zpracování geoprostorových dat.
Rasterio má například jednoduché rozhraní pro čtení a úpravu rastrových informací, takže je vhodné pro práci se soubory satelitních snímků.
Numpy modul poskytuje sofistikované maticové operace pro provádění rychlých výpočtů a statistik na obrazových datech. Matplotlib nám také umožňuje generovat relevantní vizuály, které pomáhají při interpretaci a komunikaci analytických výsledků.
V následujících částech se podíváme na skutečné příklady a úryvky kódu, abychom ukázali, jak lze Python použít k analýze satelitních fotografií.
Projdeme si, jak otevřít satelitní fotografie, vizualizovat obrazová data, extrahovat metadata, vypočítat statistiky pásem a spustit konkrétní analýzu, jako je index normalizované diference vegetace (NDVI).
Tyto příklady vám pomohou začít se zajímavým tématem analýzy satelitních snímků pomocí Pythonu.
Nejprve musíme importovat nějaké knihovny, které nám pomohou s naším úkolem.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Vizualizace a otevření satelitního snímku
V této sekci použijeme knihovnu Rasterio, abychom získali přístup k satelitnímu obrazu dodanému cestou satellite_image_path.
Soubor obrázku se otevře pomocí metody rasterio.open() a výsledný objekt, satellite_image, představuje otevřený obrázek.
Pro tento úkol jsem použil obrázek z tohoto odkazu: https://unsplash.com/photos/JiuVoQd-ZLk a uložil jej do počítače jako „satellite.jpg“.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Po otevření obrázku jej načteme jako pole pomocí funkce read() objektu satellite_image. Hodnoty pixelů pro každé pásmo satelitních snímků jsou uloženy v obrazovém poli.
# Read the image as an array
image_array = satellite_image.read()
Pro vizuální vyhodnocení satelitního snímku používáme nástroj matplotlib.pyplot ke generování obrázku 10×10 palců.
Pole obrázků je zobrazeno pomocí metody imshow(). Operace transpose(1, 2, 0) se používá k přeuspořádání rozměrů pole obrázků tak, aby odpovídaly pořadí předpokládanému funkcí imshow().
Nakonec axis('off') skryje popisky os a poskytne jasný pohled na satelitní snímek.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Extrakce metadat
Získáváme důležité metadatové informace o satelitním snímku po jeho otevření a zobrazení. Tyto informace nám pomáhají porozumět kvalitám obrázku a nabízejí kontext pro budoucí zkoumání.
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)
Pomocí atributů width a height objektu satellite_image extrahujeme šířku a výšku snímku. Vlastnost crs se používá k načtení referenčního souřadnicového systému obrázku (CRS).
CRS poskytuje informace o prostorovém referenčním systému obrázku, což nám umožňuje porovnat souřadnice obrázku s reálnými místy.
Nakonec použijeme atribut count objektu satellite_image k výpočtu počtu pásem na snímku. Tato data jsou kritická pro pozdější analýzu, protože nám umožňují získat hodnoty pixelů pro každé pásmo v obrazovém poli.
3. Výpočet statistiky pásma
V této části vypočítáme statistiku pro každé pásmo v poli obrázků. V každém pásmu se iteruje smyčka a k výpočtu těchto statistik se používají funkce numpy knihovny min, max, průměr a std.
Seznam slovníků ukládá statistiky pro 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)
Smyčka se cykluje napříč každým pásmem, přičemž variabilní pásmo představuje index pásma. Pomocí image_array[band] extrahujeme hodnoty pixelů z obrazového pole pro každé pásmo.
Poté se pro aktuální pásmo použijí funkce np.min(), np.max(), np.mean() a np.std() k určení minima, maxima, střední hodnoty a směrodatné odchylky pixelu. hodnoty.
Vypočítaná data pro každé pásmo jsou uložena ve slovníku s tlačítky jako „Band“, „Min“, „Max“, „Mean“ a „Std. Každý slovník je připojen k seznamu statistik pásma. Nakonec jsou data každého pásma vytištěna na konzole.
4. Výpočet NDVI (Normalized Difference Vegetation Index).
NDVI je oblíbené měřítko pro měření zdraví rostlin. V této části zkontrolujeme, zda obrázek obsahuje alespoň čtyři pásma, která jsou potřebná pro 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.")
Pro začátek nastavíme proměnné red_band a nir_band na None. Proměnná image_count se pak používá k určení, zda obrázek obsahuje alespoň čtyři pásma.
Pokud ano, usuzujeme, že červené pásmo je index 2 a pásmo blízkého infračerveného záření (NIR) je index 3. Odpovídající pásma z obrazového pole jsou přiřazena proměnným red_band a nir_band.
Pokud jsou dostupné jak červené, tak NIR pásmo, NDVI se vypočítá pomocí vzorce (NIR – Red) / (NIR + Red). Výsledná čísla NDVI udávají vegetační index pro každý pixel na obrázku.
Poté uvidíme NDVI vytvořením nového obrázku a zobrazením pole NDVI pomocí imshow(). Metoda colorbar() přidá do grafu barevný pruh, který dává hodnotám NDVI vizuální referenci.
Abychom se plně soustředili na zobrazení NDVI, specifikujeme navíc popisek pro graf a odstraníme popisky os s axis('off'). Nakonec je graf zobrazen pomocí plt.show().
Chybová zpráva je zapsána do konzole, pokud obrázek postrádá požadovaná pásma pro výpočet NDVI (tj. méně než čtyři pásma).
5. Zavřete satelitní snímek
Nejlepší je použít funkci close() k uzavření souboru satelitního snímku po provedení analýzy a prohlížení. Tím se uvolní veškeré systémové prostředky spojené se souborem obrázku.
satellite_image.close()
Zde je moje řešení:
A je to!
Závěrečné poznámky
Role Pythonu při napomáhání studiu těchto masivních datových souborů se stává stále důležitější, protože se zvyšuje dostupnost a rozlišení satelitních snímků.
Schopnost používat Python pro přístup, zpracování, analýzu a zobrazování satelitních snímků nabízí cestu pro kreativní aplikace a poznatky, které mohou vést k dobrým změnám a lepším znalostem našeho světa.
Nezapomeňte prozkoumat velký výběr dostupných zdrojů, výukových programů a knihoven, abyste si rozšířili své znalosti a schopnosti, zatímco budete pokračovat ve svém dobrodružství v analýze satelitních snímků pomocí Pythonu.
Pokračujte v zájmu, prozkoumávání a používání schopností Pythonu k odhalování záhad skrytých uvnitř satelitních snímků.
Napsat komentář