Satelliidipiltide analüüsist on kasu saanud keskkonnaseire, põllumajandus, linnaplaneerimine, katastroofide ohjamine ja kliimamuutuste uuringud.
Saame oma planeedi omaduste, muutuste ja dünaamika kohta olulisi teadmisi saada, kui kasutame Maad vaatlevate satelliitide salvestatud tohutut andmehulka.
Python, mitmekülgne ja tugev programmeerimiskeel, pakub rikkalikku raamatukogude ökosüsteemi ja tööriistu kiireks ja tõhusaks satelliidipiltide töötlemiseks.
Kasutamist satelliidipiltide analüüs avab võimaluste maailma. See võimaldab meil saada satelliidifotodest kasulikku teavet, nagu maakatte liigitamine, taimestiku tervise hindamine, linna laienemise jälgimine ja kaldajoone kaardistamine.
Saame hõlpsasti töödelda, kuvada ja analüüsida satelliidipilte, kasutades Pythoni mitmekülgsust ja mooduleid, nagu rasterio, numpy ja matplotlib.
Pythoni kasutamise üks peamisi eeliseid satelliidipiltide analüüsimisel on selle georuumiliste andmete töötlemise moodulite lai valik.
Näiteks Rasteriol on lihtne liides rasterteabe lugemiseks ja muutmiseks, mistõttu sobib see satelliidipiltide failidega töötamiseks.
Numpy moodul pakub keerukaid massiivioperatsioone kiirete arvutuste tegemiseks ja pildiandmete statistika tegemiseks. Matplotlib võimaldab meil luua ka asjakohaseid visuaale, mis aitavad analüüsitulemuste tõlgendamisel ja edastamisel.
Järgmistes jaotistes vaatleme tegelikke näiteid ja koodilõike, et näidata, kuidas Pythonit saab kasutada satelliidifotode analüüsimiseks.
Vaatleme, kuidas avada satelliidifotosid, visualiseerida pildiandmeid, eraldada metaandmeid, arvutada ribastatistikat ja käitada erianalüüse, nagu normaliseeritud erinevuse taimestiku indeks (NDVI).
Need näited aitavad teil alustada põnevat Pythoni satelliidipiltide analüüsi teemat.
Esiteks peame importima mõned teegid, et aidata meil oma ülesannet täita.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Satelliidipildi visualiseerimine ja avamine
Selles jaotises kasutame Rasterio teeki, et pääseda juurde satelliidipildile, mida pakub satelliidi_kujutise_tee.
Pildifail avatakse meetodil rasterio.open() ja tulemuseks olev objekt, satelliidi_pilt, esindab avatud pilti.
Selle ülesande jaoks olen kasutanud pilti sellelt lingilt: https://unsplash.com/photos/JiuVoQd-ZLk ja salvestanud selle arvutisse kui “satellite.jpg”.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Peale pildi avamist loeme selle massiivina, kasutades satelliit_image objekti read() funktsiooni. Satelliidipiltide iga riba piksliväärtused salvestatakse kujutise massiivi.
# Read the image as an array
image_array = satellite_image.read()
Satelliidipildi visuaalseks hindamiseks kasutame 10 × 10-tollise joonise loomiseks tööriista matplotlib.pyplot.
Pildimassiivi näidatakse imshow() meetodi abil. Operatsiooni transponeerimine (1, 2, 0) kasutatakse pildimassiivi mõõtmete ümberkorraldamiseks, et need sobiksid imshow() poolt eeldatud järjekorras.
Lõpuks peidab telg ('off') teljesildid, mis annab selge ülevaate satelliidipildist.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Metaandmete ekstraheerimine
Pärast selle avamist ja kuvamist eraldame satelliidipildi kohta olulise metaandmete. See teave aitab meil mõista pildi omadusi ja pakub konteksti edasiseks uurimiseks.
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)
Kasutades objekti satelliidi kujutise laiuse ja kõrguse atribuute, eraldame pildi laiuse ja kõrguse. Atribuuti crs kasutatakse kujutise koordinaatide võrdlussüsteemi (CRS) toomiseks.
CRS annab teavet pildi ruumilise võrdlussüsteemi kohta, võimaldades meil sobitada pildi koordinaate reaalsete paikadega.
Lõpuks kasutame pildil olevate ribade arvu arvutamiseks objekti satelliidi_kujutis atribuuti count. Need andmed on hilisemaks analüüsiks kriitilised, kuna need võimaldavad meil saada pildimassiivi iga riba piksliväärtusi.
3. Ribastatistika arvutamine
Arvutame selles osas statistika iga pildimassiivi riba kohta. Silmus kordub igas ribas ja selle statistika arvutamiseks kasutatakse numpy teegi min, max, keskmine ja std funktsioone.
Sõnaraamatute loend salvestab iga sagedusala statistika.
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)
Silmus tsüklib läbi iga riba, kusjuures muutuv riba esindab ribaindeksit. Kasutades image_array[band] eraldame iga riba jaoks pildimassiivist pikslite väärtused.
Seejärel kasutatakse vooluriba jaoks funktsioone np.min(), np.max(), np.mean() ja np.std() piksli minimaalse, maksimumi, keskmise ja standardhälbe määramiseks. väärtused.
Iga sagedusala arvutatud andmed salvestatakse sõnastikku selliste klahvidega nagu "Band", "Min", "Max", "Mean" ja "Std. Iga sõnastik on lisatud bändistatistika loendisse. Lõpuks prinditakse iga riba andmed konsooli.
4. NDVI (Normalized Difference Vegetation Index) arvutamine
NDVI on populaarne meede taimede tervise mõõtmiseks. Selles jaotises kontrollime, kas pilt sisaldab vähemalt nelja NDVI arvutamiseks vajalikku riba.
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.")
Alustuseks määrasime muutujate red_band ja nir_band väärtuseks None. Seejärel kasutatakse muutujat image_count selleks, et teha kindlaks, kas pilt sisaldab vähemalt nelja riba.
Kui jah, siis järeldame, et punane riba on indeks 2 ja lähiinfrapuna (NIR) riba on indeks 3. Pildimassiivist vastavad ribad on määratud muutujatele red_band ja nir_band.
Kui juurdepääsetavad on nii punane kui ka NIR-riba, arvutatakse NDVI valemiga (NIR – punane) / (NIR + punane). Saadud NDVI numbrid näitavad iga pildi piksli taimestikuindeksit.
Seejärel näeme NDVI-d, luues uue joonise ja kuvades imshow() abil NDVI massiivi. Colorbar() meetod lisab graafikule värviriba, andes NDVI väärtustele visuaalse viite.
Täielikult NDVI-ekraanile keskendumiseks määrame graafikule täiendavalt pealkirja ja eemaldame teljesildid koos teljega ('off'). Lõpuks näidatakse graafikut plt.show() abil.
Kui pildil puuduvad NDVI arvutamiseks vajalikud ribad (st vähem kui neli riba), kirjutatakse konsooli veateade.
5. Satelliidipildi sulgemine
Parim tava on kasutada satelliidipildi faili sulgemiseks pärast analüüsi ja vaatamist funktsiooni close(). See vabastab kõik pildifailiga seotud süsteemiressursid.
satellite_image.close()
Siin on minu lahendus:
See ongi!
Lõppsõna
Pythoni roll nende massiivsete andmekogumite uurimisel on muutumas üha olulisemaks, kuna satelliidipiltide kättesaadavus ja eraldusvõime suurenevad.
Võimalus kasutada Pythonit satelliidipiltidele juurde pääsemiseks, töötlemiseks, analüüsimiseks ja kuvamiseks pakub teed loomingulistele rakendustele ja arusaamadele, mis võivad tuua kaasa häid muutusi ja paremaid teadmisi meie maailmast.
Ärge unustage uurida suurt valikut ressursse, õpetusi ja teeke, et suurendada oma teadmisi ja võimeid, kui jätkate Pythoni abil satelliidipiltide analüüsiga seiklust.
Tundke jätkuvalt huvi, uurige ja kasutage Pythoni võimeid, et paljastada satelliidipiltide sees peituvad saladused.
Jäta vastus