Мониторинги муҳити зист, кишоварзӣ, шаҳрсозӣ, идоракунии офатҳои табиӣ ва омӯзиши тағирёбии иқлим ҳама аз таҳлили аксҳои моҳвораӣ баҳра бурданд.
Мо метавонем дар бораи хусусиятҳо, тағирот ва динамикаи сайёраи худ бо истифода аз миқдори зиёди маълумоте, ки аз ҷониби моҳвораҳои мушоҳидаи Замин сабт шудааст, дарки назаррас ба даст орем.
Python, забони бисёрҷониба ва пурқуввати барномасозӣ, экосистемаи ғании китобхонаҳо ва асбобҳоро барои коркарди зуд ва муассири тасвирҳои моҳвораӣ пешниҳод мекунад.
Истифодаи таҳлили аксҳои моҳвораӣ олами имкониятхоро мекушояд. Он ба мо имкон медиҳад, ки аз аксҳои моҳвораӣ маълумоти муфид ба даст орем, аз қабили гурӯҳбандии сарпӯши замин, арзёбии саломатии растаниҳо, пайгирии васеъшавии шаҳрҳо ва харитаи соҳил.
Мо метавонем тасвирҳои моҳвораиро тавассути истифодаи универсалӣ ва модулҳои Python ба монанди rasterio, 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() истифода мешавад.
Ниҳоят, меҳвар('хомӯш') тамғакоғазҳои меҳварро пинҳон мекунад ва ба тасвири моҳвора равшанӣ медиҳад.
# 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 дар бораи системаи истинодҳои фазоии тасвир маълумот медиҳад, ки ба мо имкон медиҳад, ки координатҳои тасвирро бо ҷойҳои воқеии ҷаҳон мувофиқ созем.
Ниҳоят, мо атрибути ҳисобкунии объекти satellite_image-ро барои ҳисоб кардани шумораи бандҳои тасвир истифода мебарем. Ин маълумот барои таҳлили минбаъда муҳим аст, зеро он ба мо имкон медиҳад, ки арзишҳои пикселро барои ҳар як банд дар массиви тасвирҳо ба даст орем.
3. Ҳисобкунии омори банд
Мо омори ҳар як бандро дар массиви тасвирҳо дар ин қисм ҳисоб мекунем. Давра дар ҳар як банд такрор мешавад ва функсияҳои min, max, mean ва std китобхонаи numpy барои ҳисоб кардани ин омор истифода мешаванд.
Рӯйхати луғатҳо омори ҳар як гурӯҳро нигоҳ медорад.
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() барои муайян кардани ҳадди ақал, максималӣ, миёна ва инҳирофи стандартии пиксел истифода мешаванд. арзишҳо.
Маълумоти ҳисобшуда барои ҳар як гурӯҳ дар луғат бо калидҳои монанди "Банд", "Мин", "Макс", "Миёна" ва "Стд. Ҳар як луғат ба рӯйхати омори гурӯҳ замима карда мешавад. Дар ниҳоят, маълумоти ҳар як гурӯҳ ба консол чоп карда мешавад.
4. Ҳисобкунии NDVI (Индекси муқаррарии фарқияти растанӣ).
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 -ро ба "Не" муқаррар кардем. Пас аз тағирёбандаи image_count барои муайян кардани он, ки тасвир ҳадди аққал чаҳор бандро дар бар мегирад, истифода мешавад.
Агар ин тавр бошад, мо хулоса мебарорем, ки банди сурх шохиси 2 ва банди наздики инфрасурх (NIR) индекси 3 аст. Бастаҳои мувофиқ аз массиви тасвирҳо ба тағирёбандаҳои red_band ва nir_band таъин карда мешаванд.
Агар ҳам бандҳои сурх ва ҳам NIR дастрас бошанд, NDVI бо формулаи (NIR - Сурх) / (NIR + Сурх) ҳисоб карда мешавад. Рақамҳои NDVI, ки дар натиҷа шохиси растанӣ барои ҳар як пиксел дар расм нишон медиҳанд.
Сипас, мо NDVI-ро тавассути сохтани рақами нав ва намоиши массиви NDVI бо истифода аз imshow() мебинем. Усули colorbar() панели рангҳоро ба қитъа илова мекунад ва ба арзишҳои NDVI истинодҳои визуалӣ медиҳад.
Барои тамаркузи пурра ба дисплейи NDVI, мо ба таври илова сарлавҳаро барои қитъа муайян мекунем ва тамғакоғазҳои меҳварро бо меҳвар('хомӯш') хориҷ мекунем. Дар ниҳоят, қитъа бо воситаи plt.show () нишон дода мешавад.
Паёми хатогӣ ба консол навишта мешавад, агар дар тасвир диапазони зарурӣ барои ҳисобкунии NDVI надошта бошад (яъне камтар аз чор банд).
5. Ба наздикӣ овардани тасвири моҳвораӣ
Таҷрибаи беҳтарини истифодаи функсияи close() барои пӯшидани файли тасвири моҳвораӣ пас аз гузаронидани таҳлил ва тамошо аст. Ин ҳама захираҳои системаро, ки ба файли тасвир алоқаманданд, озод мекунад.
satellite_image.close()
Ин аст ҳалли ман:
Ана тамом!
Замимаҳои ниҳоӣ
Нақши Python дар кӯмак ба омӯзиши ин маҷмӯаҳои азими додаҳо бо афзоиши дастрасӣ ва ҳалли тасвирҳои моҳвораӣ торафт муҳимтар мегардад.
Қобилияти истифодаи Python барои дастрасӣ, коркард, таҳлил ва намоиш додани тасвирҳои моҳвораӣ роҳро барои барномаҳо ва фаҳмишҳои эҷодӣ пешкаш мекунад, ки метавонанд тағироти хуб ва дониши бештари ҷаҳони моро ба вуҷуд оранд.
Ҳангоми идомаи саёҳати худ дар таҳлили тасвирҳои моҳвораӣ бо истифода аз Python, интихоби калони захираҳо, дастурҳои дарсӣ ва китобхонаҳоро барои баланд бардоштани дониш ва қобилиятҳои худ омӯзед.
Қобилиятҳои Python-ро барои кашф кардани асрори дар дохили тасвирҳои моҳвораӣ дафншуда таваҷҷуҳ кунед, кашф кунед ва истифода баред.
Дин ва мазҳаб