A környezeti megfigyelés, a mezőgazdaság, a várostervezés, a katasztrófavédelem és az éghajlatváltozással kapcsolatos tanulmányok mind hasznot húztak a műholdfelvételek elemzéséből.
Jelentős betekintést nyerhetünk bolygónk jellemzőibe, változásaiba és dinamikájába, ha kihasználjuk a Föld-megfigyelő műholdak által rögzített hatalmas mennyiségű adatot.
A Python, egy sokoldalú és erős programozási nyelv, könyvtárak és eszközök gazdag ökoszisztémáját kínálja a gyors és hatékony műholdképfeldolgozáshoz.
Használata műholdfelvételek elemzése a lehetőségek világát nyitja meg. Lehetővé teszi számunkra, hogy hasznos információkat nyerjünk ki a műholdfotókból, mint például a talajborítás kategorizálása, a növényzet állapotának értékelése, a városi terjeszkedés nyomon követése és a partvonal feltérképezése.
Könnyen feldolgozhatjuk, megjeleníthetjük és elemezhetjük a műholdképeket a Python sokoldalúságának és olyan moduljainak kihasználásával, mint a rasterio, a numpy és a matplotlib.
A Python műholdképelemzésre való használatának egyik fő előnye a térinformatikai adatfeldolgozó modulok széles választéka.
A Rasterio például egy egyszerű felülettel rendelkezik a raszterinformációk olvasásához és módosításához, így alkalmas műholdképfájlokkal való munkavégzésre.
A numpy modul kifinomult tömbműveleteket biztosít a képadatokon végzett gyors számítások és statisztikák elvégzéséhez. A Matplotlib azt is lehetővé teszi számunkra, hogy releváns vizuális elemeket állítsunk elő, amelyek segítik az elemzési eredmények értelmezését és kommunikációját.
A következő szakaszokban tényleges példákat és kódrészleteket tekintünk meg annak bemutatására, hogy a Python hogyan használható műholdfotók elemzésére.
Áttekintjük a műholdfotók megnyitását, a képadatok megjelenítését, a metaadatok kinyerését, a sávstatisztikák kiszámítását és az olyan speciális elemzések futtatását, mint a Normalized Difference Vegetation Index (NDVI).
Ezek a példák segítenek elkezdeni a műholdkép-elemzés érdekes témakörét a Python segítségével.
Először is importálnunk kell néhány könyvtárat, hogy segítsünk a feladatunkban.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. A műholdkép megjelenítése és megnyitása
Ebben a részben a Rasterio könyvtárat fogjuk használni, hogy elérjük a műholdas_kép_útvonal által szolgáltatott műholdképet.
A képfájlt a rasterio.open() metódussal nyitjuk meg, és az eredményül kapott objektum, a műholdas_kép a megnyitott képet reprezentálja.
Ehhez a feladathoz a következő linkről származó képet használtam: https://unsplash.com/photos/JiuVoQd-ZLk, és elmentettem a számítógépemre „satellite.jpg” néven.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
A kép megnyitása után tömbként olvassuk be a satellit_image objektum read() függvényével. A műholdképek egyes sávjaihoz tartozó pixelértékeket a képtömb tárolja.
# Read the image as an array
image_array = satellite_image.read()
A műholdkép vizuális kiértékeléséhez a matplotlib.pyplot eszközt használjuk egy 10 × 10 hüvelykes ábra létrehozásához.
A képtömb az imshow() metódussal jelenik meg. A transzponálás (1, 2, 0) művelet a képtömb méreteinek átrendezésére szolgál, hogy illeszkedjen az imshow() által elvárt sorrendbe.
Végül az axis ('off') elrejti a tengelycímkéket, így tiszta képet ad a műholdképről.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Metaadatok kinyerése
A műholdképről annak megnyitása és megjelenítése után kinyerjük a létfontosságú metaadatokat. Ez az információ segít nekünk megérteni a kép tulajdonságait, és kontextust kínál a jövőbeli vizsgálathoz.
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)
A satellite_image objektum szélessége és magassága attribútumait felhasználva kivonjuk a kép szélességét és magasságát. A crs tulajdonság a kép koordináta-referenciarendszerének (CRS) lekérésére szolgál.
A CRS információt ad a kép térbeli vonatkoztatási rendszeréről, lehetővé téve, hogy a kép koordinátáit a valós helyekhez igazítsuk.
Végül a satellit_image objektum count attribútuma segítségével számítjuk ki a képen lévő sávok számát. Ezek az adatok kritikusak a későbbi elemzéshez, mert lehetővé teszik számunkra, hogy a képtömb minden sávjához megkapjuk a pixelértékeket.
3. Sávstatisztika számítása
Ebben a részben a képtömb minden egyes sávjára statisztikát számolunk. Minden sávon egy hurok iterál, és a numpy könyvtár min, max, átlag és std függvényeit használják fel ezeknek a statisztikáknak a kiszámítására.
A szótárak listája tárolja az egyes sávok statisztikáit.
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)
A hurok minden sávon áthalad, a változó sáv pedig a sávindexet képviseli. Az image_array[band] segítségével minden sávhoz kivonjuk a képtömbből a pixelértékeket.
Ezután az aktuális sávra az np.min(), np.max(), np.mean() és np.std() függvények segítségével meghatározzuk a pixel minimumát, maximumát, átlagát és szórását. értékeket.
Az egyes sávokhoz tartozó kiszámított adatokat a rendszer egy szótárba menti, olyan kulcsokkal, mint a 'Band', 'Min', 'Max', 'Mean' és 'Std. Minden szótár hozzá van csatolva a sávok statisztikáihoz. Végül az egyes sávok adatai kinyomtatásra kerülnek a konzolra.
4. NDVI (Normalized Difference Vegetation Index) számítás
Az NDVI egy népszerű mérőszám a növények egészségi állapotának mérésére. Ebben a részben azt ellenőrizzük, hogy a kép tartalmaz-e legalább négy sávot, amelyek az NDVI-számításhoz szükségesek.
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.")
Kezdésként a red_band és a nir_band változókat None értékre állítjuk. Az image_count változót ezután annak meghatározására használják, hogy a kép tartalmaz-e legalább négy sávot.
Ha igen, akkor arra következtetünk, hogy a vörös sáv a 2-es index, a közeli infravörös (NIR) sáv pedig a 3. index. A képtömb egyező sávjait a red_band és nir_band változókhoz rendeljük.
Ha a piros és a NIR sáv is elérhető, az NDVI a (NIR – Red) / (NIR + Red) képlet alapján kerül kiszámításra. Az eredményül kapott NDVI-számok a kép minden egyes pixeléhez tartozó vegetációs indexet jelzik.
Ezután az NDVI-t úgy látjuk, hogy létrehozunk egy új ábrát, és megjelenítjük az NDVI-tömböt az imshow() segítségével. A colorbar() metódus egy színsávot ad a diagramhoz, vizuális hivatkozást adva az NDVI-értékeknek.
Ahhoz, hogy teljes mértékben az NDVI-kijelzőre összpontosítsunk, egy feliratot is megadunk a diagramhoz, és eltávolítjuk a tengelycímkéket az axis('off') jelzéssel. Végül a cselekmény a plt.show() segítségével jelenik meg.
Hibaüzenet jelenik meg a konzolon, ha a képből hiányoznak az NDVI-számításhoz szükséges sávok (azaz kevesebb, mint négy sáv).
5. A műholdkép lezárása
A legjobb gyakorlat a close() függvény használata a műholdképfájl bezárásához az elemzés és a megtekintés után. Ez felszabadítja a képfájlhoz kapcsolódó összes rendszererőforrást.
satellite_image.close()
Íme a megoldásom:
Ez az!
végső megjegyzések
A Python szerepe e hatalmas adathalmazok tanulmányozásában egyre fontosabbá válik, ahogy a műholdképek elérhetősége és felbontása növekszik.
A Python segítségével a műholdképek eléréséhez, feldolgozásához, elemzéséhez és megjelenítéséhez olyan kreatív alkalmazások és betekintési lehetőségek nyílnak meg, amelyek jó változást és világunk jobb megismerését eredményezhetik.
Ne felejtse el felfedezni a rendelkezésre álló források, oktatóanyagok és könyvtárak széles választékát, hogy bővítse tudását és képességeit, miközben folytatja a Python segítségével végzett műholdképelemzési kalandját.
Továbbra is érdeklődjön, fedezze fel és használja a Python képességeit, hogy feltárja a műholdképek rejtélyeit.
Hagy egy Válaszol