U monitoraghju ambientale, l'agricultura, a pianificazione urbana, a gestione di disastri è i studii di u cambiamentu climaticu anu beneficiatu di l'analisi di l'imaghjini satellitari.
Pudemu acquistà una visione significativa di e caratteristiche, i cambiamenti è a dinamica di u nostru pianeta sfruttendu a quantità massiva di dati registrati da i satelliti chì osservanu a Terra.
Python, una lingua di prugrammazione versatile è forte, offre un riccu ecosistema di biblioteche è arnesi per un processu rapidu è efficace di l'imaghjini satellitari.
L 'usu di analisi di l'imaghjini satellitari apre un mondu di pussibulità. Ci permette d'estrattà infurmazioni utili da e foto satellitari, cum'è a categurizazione di a tappa di a terra, a valutazione di a salute di a vegetazione, u seguimentu di l'espansione urbana è a mappa di a costa.
Pudemu facilmente processà, visualizà è analizà l'imaghjini satellitari sfruttendu a versatilità di Python è i moduli cum'è rasterio, numpy è matplotlib.
Unu di i benefici primari di l'usu di Python per l'analisi di l'imaghjini satellitari hè a so larga gamma di moduli di trasfurmazioni di dati geospaziali.
Rasterio, per esempiu, hà una interfaccia simplice per leghje è mudificà l'infurmazioni raster, facendu adattatu per travaglià cù schedarii di l'imaghjini satellitari.
U modulu numpy furnisce operazioni di array sofisticate per fà calculi veloci è statistiche nantu à e dati di stampa. Matplotlib ci permette ancu di generà visuale pertinenti per aiutà in l'interpretazione è a cumunicazione di i risultati analitici.
In e sezioni seguenti, fighjeremu esempi reali è frammenti di codice per mustrà cumu Python pò esse usatu per analizà e foto satellitari.
Andemu nantu à cumu apre e foto satellitari, visualizà e dati di l'imaghjini, estrae metadati, calcule statistiche di banda, è eseguite analisi particulari cum'è l'Indice di Vegetazione di Differenza Normalizzata (NDVI).
Questi esempi vi aiuterà à inizià in u tema intrigante di l'analisi di l'imaghjini satellitari cù Python.
Prima, avemu bisognu di impurtà alcune biblioteche per aiutà à u nostru compitu.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Visualizing and Opening the Satellite Image
Avemu da a biblioteca Rasterio in questa sezione per accede à l'imaghjini satellitari furnite da u satellite_image_path.
U schedariu di l'imaghjini hè apertu cù u metudu rasterio.open (), è l'ughjettu risultatu, satellite_image, rapprisenta l'imaghjini apertu.
Per questu compitu, aghju utilizatu l'imaghjini da questu ligame: https://unsplash.com/photos/JiuVoQd-ZLk è l'aghju salvatu in u mo urdinatore cum'è "satellite.jpg".
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Dopu avè apertu l'imagine, l'avemu leghje cum'è un array utilizendu a funzione read() di l'oggettu satellite_image. I valori di pixel per ogni banda di l'imaghjini satellitari sò almacenati in l'array di l'imaghjini.
# Read the image as an array
image_array = satellite_image.read()
Per evaluà visualmente l'imaghjini satellitari, usemu l'uttellu matplotlib.pyplot per generà una figura 10 × 10-inch.
A matrice di stampa hè mostrata cù u metudu imshow (). L'operazione di trasposizione (1, 2, 0) hè aduprata per riorganizà e dimensioni di l'array di stampa per adattà à l'ordine anticipatu da imshow ().
Infine, axis('off') oculta l'etichette di l'assi, dendu una vista chjara di l'imaghjini satellitari.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Estrazione di metadati
Estrattemu l'infurmazioni vitali di metadata nantu à a stampa satellitare dopu l'apertura è a visualizazione. Questa informazione ci aiuta à capisce e qualità di l'imaghjini è offre u cuntestu per investigazioni future.
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)
Utilizendu l'attributi di larghezza è di altezza di l'ughjettu satellite_image, estrattemu a larghezza è l'altezza di l'imagine. A pruprietà crs hè aduprata per ricuperà u sistema di riferimentu di coordenate di l'imaghjini (CRS).
U CRS dà infurmazione nantu à u sistema di riferimentu spaziale di l'imaghjini, chì ci permette di cunfurmà coordenate di l'imaghjini à i lochi di u mondu reale.
Infine, usemu l'attributu count di l'ughjettu satellite_image per calculà u numeru di bande in l'imaghjini. Questa dati hè critica per l'analisi più tardi, perchè ci permette di ottene i valori di pixel per ogni banda in l'array di stampa.
3. Band Statistics Calculation
Calculemu statistiche per ogni banda in l'array di stampa in questa parte. Un loop itera in ogni banda, è e funzioni min, max, mean è std di a biblioteca numpy sò aduprate per calculà queste statistiche.
Un elencu di dizionari guarda e statistiche per ogni banda.
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)
I cicli di loop in ogni banda, cù a banda variabile chì rapprisenta l'indice di banda. Utilizendu image_array [banda], estrattemu i valori di pixel da a matrice di l'imagine per ogni banda.
Allora, per a banda attuale, e funzioni np.min (), np.max (), np.mean () è np.std () sò aduprate per determinà a deviazione minima, massima, media è standard di u pixel. valori.
I dati calculati per ogni banda sò salvati in un dizziunariu cù chjavi cum'è "Band", "Min", "Max", "Mean" è "Std. Ogni dizziunariu hè appiccicatu à a lista di statistiche di banda. Infine, i dati di ogni banda sò stampati à a cunsola.
4. Calculation NDVI (Indice di Vegetazione Differenza Normalizzata).
L'NDVI hè una misura populari per a misurazione di a salute di e piante. In questa sezione, cuntrollemu per vede se a stampa include almenu quattru bandi, chì sò necessarii per u calculu 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.")
Per cumincià, avemu stabilitu e variabili red_band è nir_band à None. A variabile image_count hè allora aduprata per stabilisce se l'imaghjina cuntene almenu quattru bande.
Sì cusì, inferemu chì a banda rossa hè l'indice 2 è a banda infrared vicinu (NIR) hè l'indice 3. I bandi currispondenti da l'array di stampa sò assignati à e variàbili red_band è nir_band.
Sì e duie bande rosse è NIR sò accessibili, l'NDVI hè calculatu cù a formula (NIR - Red) / (NIR + Red). I numeri NDVI chì risultatu indicanu l'indici di vegetazione per ogni pixel in a stampa.
Allora vedemu l'NDVI creendu una nova figura è affissendu l'array NDVI cù imshow(). U metudu di colorbar () aghjunghje una barra di culore à a trama, dendu à i valori NDVI una riferenza visuale.
Per fucalizza interamente nantu à a visualizazione NDVI, specificamu ancu una didascalia per a trama è sguassate l'etichetti di l'assi cù l'assi ("off"). Infine, a trama hè mostrata cù plt.show().
Un missaghju d'errore hè scrittu à a cunsola se l'imaghjini ùn mancanu e bande necessarie per u calculu NDVI (vale à dì, menu di quattru bande).
5. Purtendu l'Image Satellite à a fine
Hè megliu aduprà a funzione close () per chjude u schedariu di stampa satellitare dopu avè realizatu l'analisi è a visualizazione. Questu libera ogni risorsa di u sistema ligata à u schedariu di stampa.
satellite_image.close()
Eccu a mo suluzione:
Eccu!
Noti Finali
U rolu di Python in l'aiutu à u studiu di questi datasets massivi hè diventatu sempre più impurtante cum'è a dispunibilità è a risoluzione di l'imaghjini satellitari aumentanu.
A capacità d'utilizà Python per accede, processà, analizà è mustrà l'imaghjini satellitari offre a strada per l'applicazioni creative è insights chì ponu guidà un bonu cambiamentu è una cunniscenza più grande di u nostru mondu.
Ricurdatevi di spiegà a grande selezzione di risorse, tutoriali è biblioteche dispunibuli per aumentà e vostre cunniscenze è capacità mentre cuntinueghja a vostra avventura in l'analisi di l'imaghjini satellitari cù Python.
Cuntinuà à esse interessatu, scopre è aduprà e capacità di Python per scopre i misteri intarrati in l'imaghjini satellitari.
Lascia un Audiolibro