Pemantauan alam sekitar, pertanian, perancangan bandar, pengurusan bencana, dan kajian perubahan iklim semuanya telah mendapat manfaat daripada analisis imejan satelit.
Kita boleh memperoleh cerapan penting tentang ciri, perubahan dan dinamik planet kita dengan mengeksploitasi sejumlah besar data yang direkodkan oleh satelit pemerhati Bumi.
Python, bahasa pengaturcaraan yang serba boleh dan kuat, menawarkan ekosistem perpustakaan dan alatan yang kaya untuk pemprosesan imejan satelit yang pantas dan berkesan.
Penggunaan analisis imej satelit membuka dunia kemungkinan. Ia membolehkan kami mengekstrak maklumat berguna daripada foto satelit, seperti pengkategorian penutup tanah, penilaian kesihatan tumbuh-tumbuhan, menjejak pengembangan bandar dan pemetaan garis pantai.
Kami boleh memproses, memaparkan dan menganalisis imej satelit dengan mudah dengan mengeksploitasi kepelbagaian dan modul Python seperti rasterio, numpy dan matplotlib.
Salah satu faedah utama menggunakan Python untuk analisis imejan satelit ialah rangkaian luas modul pemprosesan data geospatialnya.
Rasterio, sebagai contoh, mempunyai antara muka yang mudah untuk membaca dan mengubah suai maklumat raster, menjadikannya sesuai untuk bekerja dengan fail imejan satelit.
Modul numpy menyediakan operasi tatasusunan yang canggih untuk melakukan pengiraan dan statistik pantas pada data gambar. Matplotlib juga membolehkan kami menjana visual yang berkaitan untuk membantu dalam tafsiran dan komunikasi hasil analisis.
Dalam bahagian berikut, kami akan melihat contoh sebenar dan coretan kod untuk menunjukkan cara Python boleh digunakan untuk menganalisis foto satelit.
Kami akan membincangkan cara membuka foto satelit, menggambarkan data pengimejan, mengekstrak metadata, mengira statistik jalur dan menjalankan analisis tertentu seperti Indeks Tumbuhan Perbezaan Normal (NDVI).
Contoh-contoh ini akan membantu anda memulakan topik menarik analisis imej satelit dengan Python.
Pertama, kami perlu mengimport beberapa perpustakaan untuk membantu kami dengan tugas kami.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Visualisasi dan Membuka Imej Satelit
Kami akan pustaka Rasterio dalam bahagian ini untuk mengakses imej satelit yang dibekalkan oleh laluan_gambar_ satelit.
Fail imej dibuka menggunakan kaedah rasterio.open() dan objek terhasil, imej satelit, mewakili imej yang dibuka.
Untuk tugasan ini, saya telah menggunakan imej daripada pautan ini: https://unsplash.com/photos/JiuVoQd-ZLk dan menyimpannya pada komputer saya sebagai "satellite.jpg".
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Selepas membuka gambar, kami membacanya sebagai tatasusunan menggunakan fungsi read() objek satellite_image. Nilai piksel untuk setiap jalur gambar satelit disimpan dalam tatasusunan imej.
# Read the image as an array
image_array = satellite_image.read()
Untuk menilai secara visual gambar satelit, kami menggunakan alat matplotlib.pyplot untuk menjana angka 10×10 inci.
Tatasusunan gambar ditunjukkan menggunakan kaedah imshow(). Operasi transpose(1, 2, 0) digunakan untuk menyusun semula dimensi tatasusunan gambar agar sesuai dengan susunan yang dijangkakan oleh imshow().
Akhir sekali, paksi('mati') menyembunyikan label paksi, memberikan gambaran jelas tentang gambar satelit.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Pengekstrakan Metadata
Kami mengeluarkan maklumat metadata penting tentang gambar satelit selepas membuka dan memaparkannya. Maklumat ini membantu kami memahami kualiti imej dan menawarkan konteks untuk penyiasatan masa hadapan.
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)
Menggunakan atribut lebar dan ketinggian objek imej satelit, kami mengekstrak lebar dan ketinggian imej. Sifat crs digunakan untuk mendapatkan semula sistem rujukan koordinat (CRS) imej.
CRS memberikan maklumat tentang sistem rujukan spatial gambar, membolehkan kami memadankan koordinat imej dengan tempat dunia sebenar.
Akhir sekali, kami menggunakan atribut kiraan objek imej satelit untuk mengira bilangan jalur dalam imej. Data ini penting untuk analisis kemudian kerana ia membolehkan kami memperoleh nilai piksel untuk setiap jalur dalam tatasusunan gambar.
3. Pengiraan Statistik Band
Kami mengira statistik untuk setiap jalur dalam tatasusunan gambar di bahagian ini. Gelung berulang merentasi setiap jalur dan fungsi min, maks, min dan std perpustakaan numpy digunakan untuk mengira statistik ini.
Senarai kamus menyimpan statistik untuk setiap kumpulan.
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)
Kitaran gelung merentasi setiap jalur, dengan jalur pembolehubah mewakili indeks jalur. Menggunakan image_array[band], kami mengekstrak nilai piksel daripada tatasusunan imej untuk setiap jalur.
Kemudian, untuk jalur semasa, fungsi np.min(), np.max(), np.mean(), dan np.std() digunakan untuk menentukan sisihan minimum, maksimum, min dan piawai piksel nilai.
Data yang dikira untuk setiap jalur disimpan dalam kamus dengan kekunci seperti 'Band,' 'Min,' 'Max,' 'Min,' dan 'Std. Setiap kamus dilampirkan pada senarai statistik band. Akhirnya, setiap data band dicetak ke konsol.
4. Pengiraan NDVI (Normalized Difference Vegetation Index).
NDVI ialah ukuran popular untuk mengukur kesihatan tumbuhan. Dalam bahagian ini, kami menyemak untuk melihat sama ada gambar termasuk sekurang-kurangnya empat jalur, yang diperlukan untuk pengiraan 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.")
Untuk bermula, kami menetapkan pembolehubah jalur_merah dan jalur_nir kepada Tiada. Pembolehubah image_count kemudiannya digunakan untuk menentukan sama ada imej mengandungi sekurang-kurangnya empat jalur.
Jika ya, kami membuat kesimpulan jalur merah ialah indeks 2 dan jalur inframerah-dekat (NIR) ialah indeks 3. Jalur padanan daripada tatasusunan gambar diperuntukkan kepada pembolehubah jalur_merah dan jalur_nir.
Jika kedua-dua jalur merah dan NIR boleh diakses, NDVI dikira menggunakan formula (NIR – Merah) / (NIR + Merah). Nombor NDVI yang terhasil menunjukkan indeks tumbuh-tumbuhan untuk setiap piksel dalam gambar.
Kami kemudian melihat NDVI dengan mencipta angka baharu dan memaparkan tatasusunan NDVI menggunakan imshow(). Kaedah colorbar() menambah bar warna pada plot, memberikan nilai NDVI rujukan visual.
Untuk memfokus sepenuhnya pada paparan NDVI, kami juga menetapkan kapsyen untuk plot dan mengalih keluar label paksi dengan paksi('mati'). Akhirnya, plot ditunjukkan dengan plt.show().
Mesej ralat ditulis kepada konsol jika gambar tidak mempunyai jalur yang diperlukan untuk pengiraan NDVI (iaitu, kurang daripada empat jalur).
5. Menutup Imej Satelit
Amalan terbaik adalah menggunakan fungsi close() untuk menutup fail gambar satelit selepas menjalankan analisis dan tontonan. Ini membebaskan sebarang sumber sistem yang dipautkan ke fail gambar.
satellite_image.close()
Inilah penyelesaian saya:
Itu sahaja!
Nota Akhir
Peranan Python dalam membantu kajian set data besar-besaran ini menjadi semakin penting apabila ketersediaan dan resolusi imej satelit meningkat.
Keupayaan untuk menggunakan Python untuk mengakses, memproses, menganalisis dan menunjukkan imej satelit menawarkan laluan untuk aplikasi kreatif dan cerapan yang boleh mendorong perubahan yang baik dan pengetahuan yang lebih luas tentang dunia kita.
Ingatlah untuk meneroka banyak pilihan sumber, tutorial dan perpustakaan yang tersedia untuk meningkatkan pengetahuan dan kebolehan anda sambil anda meneruskan pengembaraan anda dalam analisis imejan satelit menggunakan Python.
Teruskan berminat, meneroka dan menggunakan kebolehan Python untuk membongkar misteri yang terkubur di dalam gambar satelit.
Sila tinggalkan balasan anda