Студиите за следење на животната средина, земјоделството, урбаното планирање, управувањето со катастрофи и климатските промени имаат корист од анализата на сателитски снимки.
Можеме да стекнеме значителни сознанија за карактеристиките, промените и динамиката на нашата планета преку искористување на огромниот број на податоци снимени од сателитите што ја набљудуваат Земјата.
Python, разновиден и силен програмски јазик, нуди богат екосистем од библиотеки и алатки за брза и ефикасна обработка на сателитски снимки.
Употреба на анализа на сателитски снимки отвора свет на можности. Тоа ни овозможува да извлечеме корисни информации од сателитски фотографии, како што се категоризација на покривката на земјиштето, проценка на здравјето на вегетацијата, следење на урбаната експанзија и мапирање на брегот.
Можеме лесно да обработуваме, прикажуваме и анализираме сателитски снимки со искористување на разновидноста на Python и модулите како што се растерио, numpy и matplotlib.
Една од основните придобивки од користењето на Python за анализа на сателитски снимки е неговиот широк опсег на модули за обработка на геопросторни податоци.
Rasterio, на пример, има едноставен интерфејс за читање и менување растерски информации, што го прави погоден за работа со датотеки со сателитски снимки.
Модулот numpy обезбедува софистицирани операции со низа за извршување на брзи пресметки и статистика на податоците од сликата. Matplotlib исто така ни овозможува да генерираме релевантни визуелни слики за да помогнеме во толкувањето и комуникацијата на аналитичките резултати.
Во следните делови, ќе ги разгледаме вистинските примери и фрагменти од код за да покажеме како Python може да се користи за анализа на сателитски фотографии.
Ќе разгледаме како да отвориме сателитски фотографии, да визуелизираме податоци за слики, да извлекуваме метаподатоци, да пресметаме статистика на опсегот и да извршиме одредена анализа како што е индексот на вегетација на нормализирана разлика (NDVI).
Овие примери ќе ви помогнат да започнете со интригантната тема за анализа на сателитски слики со Python.
Прво, треба да увеземе неколку библиотеки за да ни помогнат со нашата задача.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. Визуелизирање и отворање на сателитската слика
Ќе ја користиме библиотеката Rasterio во овој дел за да пристапиме до сателитската слика обезбедена од страната satellite_image_path.
Датотеката со слика се отвора со помош на методот rasterio.open(), а резултантниот објект, satellite_image, ја претставува отворената слика.
За оваа задача, ја искористив сликата од оваа врска: https://unsplash.com/photos/JiuVoQd-ZLk и ја зачував на мојот компјутер како „satellite.jpg“.
# Open the satellite image using rasterio
satellite_image_path = 'satellite.jpg'
satellite_image = rasterio.open(satellite_image_path)
Откако ќе ја отвориме сликата, ја читаме како низа користејќи ја функцијата read() на објектот satellite_image. Вредностите на пикселите за секој опсег на сателитски слики се зачувани во низата со слики.
# Read the image as an array
image_array = satellite_image.read()
За визуелно да ја оцениме сателитската слика, ја користиме алатката matplotlib.pyplot за да генерираме фигура од 10×10 инчи.
Низата со слики е прикажана со помош на методот imshow(). Операцијата transpose(1, 2, 0) се користи за преуредување на димензиите на низата со слики за да одговара на редоследот предвиден од imshow().
Конечно, axis('off') ги крие етикетите на оските, давајќи јасен приказ на сателитската слика.
# Visualize the image
plt.figure(figsize=(10, 10))
plt.imshow(image_array.transpose(1, 2, 0))
plt.axis('off')
plt.show()
2. Екстракција на метаподатоци
Извлекуваме витални информации за метаподатоци за сателитската слика по нејзиното отворање и прикажување. Оваа информација ни помага да ги разбереме квалитетите на сликата и нуди контекст за идно истражување.
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, ги извлекуваме ширината и висината на сликата. Својството crs се користи за враќање на координатниот референтен систем на сликата (CRS).
CRS дава информации за просторниот референтен систем на сликата, овозможувајќи ни да ги усогласиме координатите на сликата со местата од реалниот свет.
Конечно, го користиме атрибутот count на објектот satellite_image за да го пресметаме бројот на опсези на сликата. Овие податоци се критични за подоцнежна анализа бидејќи ни овозможуваат да ги добиеме вредностите на пикселите за секој опсег во низата со слики.
3. Пресметка на статистика на опсегот
Ние пресметуваме статистика за секоја лента во низата со слики во овој дел. Јамка се повторува низ секој опсег, а функциите на numpy библиотеката min, max, mean и std се користат за пресметување на овие статистики.
Списокот на речници ја складира статистиката за секој бенд.
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)
Јамката кружи низ секој опсег, при што променливата лента го претставува индексот на опсегот. Користејќи image_array[band], ги извлекуваме вредностите на пиксели од низата со слики за секој опсег.
Потоа, за тековниот опсег, функциите np.min(), np.max(), np.mean() и np.std() се користат за одредување на минималната, максималната, средната и стандардната девијација на пикселот вредности.
Пресметаните податоци за секој опсег се зачувуваат во речник со копчиња како „Band“, „Min“, „Max“, „Mean“ и „Std. Секој речник е додаден на списокот со статистика на бендот. Конечно, податоците на секој бенд се печатат на конзолата.
4. Пресметка на NDVI (Normalized Difference Vegetation Index).
NDVI е популарна мерка за мерење на здравјето на растенијата. Во овој дел, проверуваме дали сликата вклучува најмалку четири опсези, кои се потребни за пресметување 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.")
За почеток, ги поставивме променливите red_band и nir_band на None. Променливата image_count потоа се користи за да се утврди дали сликата содржи најмалку четири ленти.
Ако е така, заклучуваме дека црвената лента е индекс 2, а блиската инфрацрвена (NIR) опсег е индекс 3. Соодветните опсези од низата со слики се доделуваат на променливите red_band и nir_band.
Ако и црвените и NIR лентите се достапни, NDVI се пресметува со формулата (NIR – Red) / (NIR + Red). Броевите NDVI што произлегуваат го покажуваат индексот на вегетација за секој пиксел на сликата.
Потоа го гледаме NDVI со креирање нова фигура и прикажување на низата NDVI користејќи imshow(). Методот colorbar() додава колор лента на заплетот, давајќи им на вредностите NDVI визуелна референца.
За целосно да се фокусираме на екранот NDVI, дополнително одредуваме натпис за заплетот и ги отстрануваме етикетите на оските со оска ('исклучено'). Конечно, заплетот е прикажан со plt.show().
Порака за грешка е напишана на конзолата ако на сликата ги нема потребните опсези за пресметување NDVI (т.е. помалку од четири опсези).
5. Доближување на сателитската слика
Најдобра практика е да се користи функцијата close() за затворање на датотеката со сателитски слики по спроведувањето на анализата и прегледувањето. Ова ги ослободува сите системски ресурси поврзани со датотеката со слика.
satellite_image.close()
Еве го моето решение:
Тоа е тоа!
Завршни забелешки
Улогата на Python во помагањето на проучувањето на овие масивни сетови на податоци станува сè поважна како што се зголемува достапноста и резолуцијата на сателитски снимки.
Способноста да се користи Python за пристап, обработка, анализа и прикажување на сателитски снимки нуди пат за креативни апликации и увиди кои можат да доведат до добри промени и поголемо познавање на нашиот свет.
Не заборавајте да го истражите големиот избор на ресурси, упатства и библиотеки достапни за да ги зголемите вашите знаења и способности додека продолжувате со вашата авантура во анализа на сателитски снимки со помош на Python.
Продолжете да бидете заинтересирани, истражувајте и користете ги способностите на Пајтон за да ги откриете мистериите закопани во сателитски слики.
Оставете Одговор