Atrof-muhit monitoringi, qishloq xo'jaligi, shaharsozlik, tabiiy ofatlarni boshqarish va iqlim o'zgarishini o'rganish sun'iy yo'ldosh tasvirlarini tahlil qilishdan foyda ko'rdi.
Biz Yerni kuzatuvchi sun'iy yo'ldoshlar tomonidan qayd etilgan katta hajmdagi ma'lumotlardan foydalanish orqali sayyoramizning xususiyatlari, o'zgarishlari va dinamikasi haqida muhim ma'lumotlarga ega bo'lishimiz mumkin.
Python, ko'p qirrali va kuchli dasturlash tili, sun'iy yo'ldosh tasvirlarini tez va samarali qayta ishlash uchun kutubxonalar va vositalarning boy ekotizimini taklif etadi.
foydalanish sun'iy yo'ldosh tasvirlarini tahlil qilish imkoniyatlar dunyosini ochib beradi. Bu bizga sun'iy yo'ldosh fotosuratlaridan er qoplamining tasnifi, o'simliklar salomatligini baholash, shahar kengayishini kuzatish va qirg'oq xaritasi kabi foydali ma'lumotlarni olish imkonini beradi.
Biz Python-ning ko'p qirraliligi va rasterio, numpy va matplotlib kabi modullaridan foydalangan holda sun'iy yo'ldosh tasvirlarini osongina qayta ishlashimiz, namoyish qilishimiz va tahlil qilishimiz mumkin.
Sun'iy yo'ldosh tasvirini tahlil qilish uchun Python-dan foydalanishning asosiy afzalliklaridan biri uning geografik ma'lumotlarni qayta ishlash modullarining keng doirasidir.
Rasterio, masalan, rastr ma'lumotlarini o'qish va o'zgartirish uchun oddiy interfeysga ega bo'lib, uni sun'iy yo'ldosh tasvirlari fayllari bilan ishlashga moslashtiradi.
Numpy moduli rasm ma'lumotlari bo'yicha tezkor hisob-kitoblar va statistik ma'lumotlarni bajarish uchun murakkab massiv operatsiyalarini taqdim etadi. Matplotlib shuningdek, analitik natijalarni sharhlash va etkazishda yordam beradigan tegishli vizuallarni yaratishga imkon beradi.
Keyingi bo'limlarda biz sun'iy yo'ldosh fotosuratlarini tahlil qilish uchun Python-dan qanday foydalanish mumkinligini ko'rsatish uchun haqiqiy misollar va kod parchalarini ko'rib chiqamiz.
Biz sun'iy yo'ldosh fotosuratlarini qanday ochishni, tasvir ma'lumotlarini vizualizatsiya qilishni, metama'lumotlarni ajratib olishni, tarmoqli statistikasini hisoblashni va Normallashtirilgan farq o'simliklari indeksi (NDVI) kabi maxsus tahlillarni o'tkazamiz.
Ushbu misollar sizga Python bilan sun'iy yo'ldosh tasvirlarini tahlil qilishning qiziqarli mavzusini boshlashga yordam beradi.
Birinchidan, vazifamizda bizga yordam berish uchun ba'zi kutubxonalarni import qilishimiz kerak.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Sun'iy yo'ldosh tasvirini vizualizatsiya qilish va ochish
Satellite_image_path tomonidan taqdim etilgan sun'iy yo'ldosh tasviriga kirish uchun biz ushbu bo'limda Rasterio kutubxonasiga murojaat qilamiz.
Rasm fayli rasterio.open() usuli yordamida ochiladi va natijada olingan ob'ekt satellite_image ochilgan tasvirni ifodalaydi.
Ushbu vazifani bajarish uchun men ushbu havoladagi rasmdan foydalandim: https://unsplash.com/photos/JiuVoQd-ZLk va uni kompyuterimda “satellite.jpg” sifatida saqladim.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Rasmni ochganimizdan so'ng, biz satellite_image ob'ektining read() funksiyasidan foydalanib, uni massiv sifatida o'qiymiz. Sun'iy yo'ldosh rasmlarining har bir diapazoni uchun piksel qiymatlari tasvirlar qatorida saqlanadi.
# Read the image as an array
image_array = satellite_image.read()
Sun'iy yo'ldosh tasvirini vizual baholash uchun biz matplotlib.pyplot vositasidan foydalanib, 10 × 10 dyuymli rasmni yaratamiz.
Rasmlar massivi imshow() usuli yordamida ko'rsatiladi. Transpose(1, 2, 0) operatsiyasi imshow() da kutilgan tartibda tasvirlar massivining o'lchamlarini qayta tartibga solish uchun ishlatiladi.
Nihoyat, eksa('off') sun'iy yo'ldosh tasvirining aniq ko'rinishini beruvchi eksa yorliqlarini yashiradi.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Metadata Extraction
Sun'iy yo'ldosh rasmini ochish va ko'rsatishdan so'ng biz muhim metadata ma'lumotlarini chiqaramiz. Ushbu ma'lumot bizga tasvirning xususiyatlarini tushunishga yordam beradi va kelajakdagi tadqiqot uchun kontekstni taklif qiladi.
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)
Satellite_image ob'ektining kengligi va balandligi atributlaridan foydalanib, biz tasvirning kengligi va balandligini chiqaramiz. Crs xususiyati tasvirning koordinata mos yozuvlar tizimini (CRS) olish uchun ishlatiladi.
CRS rasmning fazoviy mos yozuvlar tizimi haqida ma'lumot beradi, bu bizga tasvir koordinatalarini haqiqiy dunyo joylariga moslashtirishga imkon beradi.
Nihoyat, biz tasvirdagi diapazonlar sonini hisoblash uchun sun'iy yo'ldosh_image obyektining count atributidan foydalanamiz. Ushbu ma'lumotlar keyingi tahlil qilish uchun juda muhimdir, chunki bu bizga rasm massividagi har bir diapazon uchun piksel qiymatlarini olish imkonini beradi.
3. Band statistikasini hisoblash
Ushbu qismdagi rasm qatoridagi har bir band uchun statistikani hisoblaymiz. Har bir diapazon bo'ylab tsikl takrorlanadi va ushbu statistikani hisoblash uchun numpy kutubxonasining min, maks, o'rtacha va std funksiyalaridan foydalaniladi.
Lug'atlar ro'yxati har bir guruh uchun statistik ma'lumotlarni saqlaydi.
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)
Loop har bir diapazon bo'ylab aylanadi, o'zgaruvchan band esa tarmoqli indeksini ifodalaydi. image_array[band] dan foydalanib, biz har bir diapazon uchun tasvirlar qatoridan piksel qiymatlarini chiqaramiz.
Keyin joriy diapazon uchun np.min(), np.max(), np.mean() va np.std() funksiyalari pikselning minimal, maksimal, oʻrtacha va standart ogʻishini aniqlash uchun ishlatiladi. qiymatlar.
Har bir band uchun hisoblangan ma'lumotlar lug'atda "Band", "Min", "Maks", "O'rtacha" va "Std" kabi tugmalar bilan saqlanadi. Har bir lug'at guruh statistikasi ro'yxatiga qo'shiladi. Nihoyat, har bir guruhning ma'lumotlari konsolga chop etiladi.
4. NDVI (Normallashtirilgan farq o'simliklari indeksi) hisoblash
NDVI o'simliklarning sog'lig'ini o'lchash uchun mashhur o'lchovdir. Ushbu bo'limda biz rasmda NDVI hisoblash uchun zarur bo'lgan kamida to'rtta diapazon mavjudligini tekshiramiz.
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.")
Boshlash uchun biz red_band va nir_band o'zgaruvchilarini Yo'q deb belgilaymiz. Keyin image_count o'zgaruvchisi rasmda kamida to'rtta band borligini aniqlash uchun ishlatiladi.
Agar shunday bo'lsa, biz qizil chiziq indeks 2 va yaqin infraqizil (NIR) diapazoni indeks 3 degan xulosaga kelamiz. Rasmlar massividan mos keladigan chiziqlar red_band va nir_band o'zgaruvchilariga tayinlangan.
Agar ikkala qizil va NIR diapazoniga kirish mumkin bo'lsa, NDVI (NIR - Qizil) / (NIR + Qizil) formulasi yordamida hisoblanadi. Natijada paydo bo'lgan NDVI raqamlari rasmdagi har bir piksel uchun o'simlik indeksini ko'rsatadi.
Keyin biz NDVI ni yangi raqam yaratish va imshow() yordamida NDVI massivini ko'rsatish orqali ko'ramiz. Colorbar() usuli syujetga rang paneli qo‘shib, NDVI qiymatlariga vizual mos yozuvlar beradi.
To'liq NDVI displeyga e'tibor qaratish uchun biz qo'shimcha ravishda syujet uchun sarlavhani belgilaymiz va eksa('off') bilan o'q belgilarini olib tashlaymiz. Nihoyat, syujet plt.show() yordamida ko'rsatiladi.
Rasmda NDVI hisoblash uchun kerakli diapazonlar bo'lmasa (ya'ni, to'rt diapazondan kam) bo'lsa, konsolga xato xabari yoziladi.
5. Sun'iy yo'ldosh tasvirini yaqinlashtirish
Tahlil va ko'rishni o'tkazgandan so'ng sun'iy yo'ldosh rasm faylini yopish uchun close() funksiyasidan foydalanish eng yaxshi amaliyotdir. Bu rasm fayliga bog'langan har qanday tizim resurslarini bo'shatadi.
satellite_image.close()
Mana mening yechimim:
Bo'ldi shu!
Yakuniy eslatmalar
Sun'iy yo'ldosh tasvirlarining mavjudligi va ruxsati oshgani sayin, ushbu katta ma'lumotlar to'plamini o'rganishga yordam berishda Pythonning roli tobora muhim ahamiyat kasb etmoqda.
Sun'iy yo'ldosh tasvirlariga kirish, qayta ishlash, tahlil qilish va ko'rsatish uchun Python-dan foydalanish qobiliyati yaxshi o'zgarishlarga va dunyomiz haqida ko'proq bilimga olib kelishi mumkin bo'lgan ijodiy ilovalar va tushunchalar uchun yo'lni taklif qiladi.
Python-dan foydalangan holda sun'iy yo'ldosh tasvirlarini tahlil qilishda sarguzashtni davom ettirayotganda bilim va qobiliyatingizni oshirish uchun mavjud resurslar, o'quv qo'llanmalar va kutubxonalarning katta tanlovini o'rganishni unutmang.
Sun'iy yo'ldosh rasmlari ichida ko'milgan sirlarni ochish uchun Python qobiliyatlarini qiziqtirish, o'rganish va foydalanishda davom eting.
Leave a Reply