Miljøovervåking, landbruk, byplanlegging, katastrofehåndtering og klimaendringer har alle dratt nytte av satellittbildeanalyse.
Vi kan få betydelig innsikt i planetens egenskaper, endringer og dynamikk ved å utnytte den enorme mengden data som er registrert av jordobservasjonssatellitter.
Python, et allsidig og sterkt programmeringsspråk, tilbyr et rikt økosystem av biblioteker og verktøy for rask og effektiv prosessering av satellittbilder.
Bruken av analyse av satellittbilder åpner opp en verden av muligheter. Det gjør oss i stand til å trekke ut nyttig informasjon fra satellittbilder, for eksempel kategorisering av landdekke, vurdering av vegetasjonshelse, sporing av byutvidelse og strandlinjekartlegging.
Vi kan enkelt behandle, vise og analysere satellittbilder ved å utnytte Pythons allsidighet og moduler som rasterio, numpy og matplotlib.
En av de viktigste fordelene med å bruke Python for satellittbildeanalyse er det brede utvalget av geospatiale databehandlingsmoduler.
Rasterio, for eksempel, har et enkelt grensesnitt for å lese og endre rasterinformasjon, noe som gjør det egnet for arbeid med satellittbildefiler.
numpy-modulen gir sofistikerte array-operasjoner for å utføre raske beregninger og statistikk på bildedata. Matplotlib gjør oss også i stand til å generere relevante bilder for å hjelpe til med tolkning og kommunikasjon av analytiske resultater.
I de følgende delene vil vi se på faktiske eksempler og kodebiter for å vise hvordan Python kan brukes til å analysere satellittbilder.
Vi vil gå over hvordan du åpner satellittbilder, visualiserer bildedata, trekker ut metadata, beregner båndstatistikk og kjører spesiell analyse som Normalized Difference Vegetation Index (NDVI).
Disse eksemplene vil hjelpe deg med å komme i gang med det spennende emnet satellittbildeanalyse med Python.
Først må vi importere noen biblioteker for å hjelpe oss med oppgaven vår.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Visualisere og åpne satellittbildet
Vi vil Rasterio-biblioteket i denne delen for å få tilgang til satellittbildet levert av satellittbildebanen.
Bildefilen åpnes ved å bruke rasterio.open()-metoden, og det resulterende objektet, satellitt_image, representerer det åpnede bildet.
Til denne oppgaven har jeg brukt bildet fra denne lenken: https://unsplash.com/photos/JiuVoQd-ZLk og lagret det på datamaskinen min som "satellite.jpg".
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Etter å ha åpnet bildet, leser vi det som en matrise ved å bruke satellitt_image-objektets read()-funksjon. Pikselverdiene for hvert bånd av satellittbildene er lagret i bildematrisen.
# Read the image as an array
image_array = satellite_image.read()
For å visuelt evaluere satellittbildet bruker vi matplotlib.pyplot-verktøyet til å generere en 10×10-tommers figur.
Bildematrisen vises ved hjelp av imshow()-metoden. Transpose(1, 2, 0)-operasjonen brukes til å omorganisere bildematrisens dimensjoner for å passe rekkefølgen som forventes av imshow().
Til slutt skjuler akse('av') akseetikettene, og gir en klar visning av satellittbildet.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Metadatautvinning
Vi trekker ut viktig metadatainformasjon om satellittbildet etter å ha åpnet og vist det. Denne informasjonen hjelper oss med å forstå bildets kvaliteter og gir kontekst for fremtidig undersøkelse.
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)
Ved å bruke bredde- og høydeattributtene til satellittbildeobjektet trekker vi ut bildets bredde og høyde. Crs-egenskapen brukes til å hente bildets koordinatreferansesystem (CRS).
CRS gir informasjon om bildets romlige referansesystem, slik at vi kan matche bildekoordinater til virkelige steder.
Til slutt bruker vi count-attributtet til satellitt_image-objektet for å beregne antall bånd i bildet. Disse dataene er kritiske for senere analyse fordi de lar oss få pikselverdiene for hvert bånd i bildematrisen.
3. Beregning av båndstatistikk
Vi beregner statistikk for hvert bånd i bildematrisen i denne delen. En loop itererer over hvert bånd, og numpy-bibliotekets min-, maks-, middel- og std-funksjoner brukes til å beregne denne statistikken.
En liste over ordbøker lagrer statistikken for hvert band.
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)
Sløyfen går over hvert bånd, med det variable båndet som representerer båndindeksen. Ved å bruke image_array[band] trekker vi ut pikselverdiene fra bildematrisen for hvert bånd.
Deretter, for det gjeldende båndet, brukes funksjonene np.min(), np.max(), np.mean() og np.std() for å bestemme minimum, maksimum, gjennomsnitt og standardavvik for pikselen verdier.
De beregnede dataene for hvert bånd lagres i en ordbok med taster som 'Band', 'Min', 'Max', 'Mean' og 'Std. Hver ordbok er lagt til listen over bandstatistikk. Til slutt skrives hvert bånds data ut til konsollen.
4. NDVI (Normalized Difference Vegetation Index) Beregning
NDVI er et populært mål for å måle helsen til planter. I denne delen sjekker vi om bildet inneholder minst fire bånd, som kreves for NDVI-beregning.
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.")
For å begynne, setter vi red_band og nir_band variablene til None. Image_count-variabelen brukes deretter til å bestemme om bildet inneholder minst fire bånd.
I så fall konkluderer vi at det røde båndet er indeks 2 og det nær-infrarøde (NIR) båndet er indeks 3. De matchende båndene fra bildematrisen er tilordnet variablene red_band og nir_band.
Hvis både det røde og NIR-båndet er tilgjengelige, beregnes NDVI ved hjelp av formelen (NIR – Rød) / (NIR + Rød). NDVI-tallene som blir resultatet indikerer vegetasjonsindeksen for hver piksel i bildet.
Vi ser deretter NDVI ved å lage en ny figur og vise NDVI-matrisen ved å bruke imshow(). Colorbar()-metoden legger til en fargelinje til plottet, og gir NDVI-verdiene en visuell referanse.
For å fokusere helt på NDVI-skjermen, spesifiserer vi i tillegg en bildetekst for plottet og fjerner akseetikettene med akse('av'). Til slutt vises plottet med plt.show().
En feilmelding skrives til konsollen hvis bildet mangler de nødvendige båndene for NDVI-beregning (dvs. mindre enn fire bånd).
5. Avslutte satellittbildet
Det er best praksis å bruke close()-funksjonen for å lukke satellittbildefilen etter at analysen og visningen er utført. Dette frigjør eventuelle systemressurser knyttet til bildefilen.
satellite_image.close()
Her er løsningen min:
Det er det!
Endelig Merknader
Pythons rolle i å hjelpe studiet av disse enorme datasettene blir stadig viktigere ettersom tilgjengeligheten og oppløsningen til satellittbilder øker.
Muligheten til å bruke Python til å få tilgang til, behandle, analysere og vise satellittbilder tilbyr veien for kreative applikasjoner og innsikt som kan drive gode endringer og større kunnskap om vår verden.
Husk å utforske det store utvalget av ressurser, opplæringsprogrammer og biblioteker som er tilgjengelige for å øke kunnskapen og ferdighetene dine mens du fortsetter på eventyret ditt i satellittbildeanalyse ved hjelp av Python.
Fortsett å være interessert, utforsk og bruk Pythons evner til å avdekke mysteriene som er begravd i satellittbilder.
Legg igjen en kommentar