Շրջակա միջավայրի մոնիտորինգը, գյուղատնտեսությունը, քաղաքաշինությունը, աղետների կառավարումը և կլիմայի փոփոխության ուսումնասիրությունները բոլորն էլ շահել են արբանյակային պատկերների վերլուծությունից:
Մենք կարող ենք զգալի պատկերացումներ ձեռք բերել մեր մոլորակի բնութագրերի, փոփոխությունների և դինամիկայի վերաբերյալ՝ օգտագործելով Երկիր դիտող արբանյակների կողմից գրանցված տվյալների հսկայական քանակությունը:
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)
Նկարը բացելուց հետո մենք այն կարդում ենք որպես զանգված՝ օգտագործելով satellite_image օբյեկտի read() ֆունկցիան։ Արբանյակային նկարների յուրաքանչյուր գոտու համար պիքսելային արժեքները պահվում են պատկերների զանգվածում:
# 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 օբյեկտի count հատկանիշը պատկերի շերտերի քանակը հաշվարկելու համար: Այս տվյալները կարևոր նշանակություն ունեն հետագա վերլուծության համար, քանի որ այն թույլ է տալիս մեզ ստանալ պիքսելային արժեքներ նկարների զանգվածի յուրաքանչյուր գոտու համար:
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 – Կարմիր) / (NIR + Կարմիր): Ստացված NDVI թվերը ցույց են տալիս նկարի յուրաքանչյուր պիքսելի բուսականության ինդեքսը:
Այնուհետև մենք տեսնում ենք NDVI-ն՝ ստեղծելով նոր պատկեր և ցուցադրելով NDVI զանգվածը՝ օգտագործելով imshow(): Colorbar() մեթոդն ավելացնում է գունային տող սյուժեին՝ տալով NDVI արժեքներին տեսողական հղում:
NDVI էկրանի վրա ամբողջությամբ կենտրոնանալու համար մենք լրացուցիչ նշում ենք սյուժեի վերնագիր և հանում առանցքի պիտակները առանցքի («անջատված»): Վերջապես, սյուժեն ցուցադրվում է plt.show():
Վահանակին սխալ հաղորդագրություն է գրվում, եթե նկարում բացակայում են NDVI հաշվարկի համար անհրաժեշտ գոտիները (այսինքն՝ չորսից պակաս գոտի):
5. Արբանյակային պատկերի ավարտին հասցնելը
Լավագույն պրակտիկան է օգտագործել close() ֆունկցիան արբանյակային նկարի ֆայլը վերլուծությունից և դիտելուց հետո փակելու համար: Սա ազատում է ցանկացած համակարգի ռեսուրս, որը կապված է նկարի ֆայլի հետ:
satellite_image.close()
Ահա իմ լուծումը.
Դա այդպես է:
Եզրափակիչ Notes
Python-ի դերը այս զանգվածային տվյալների հավաքածուների ուսումնասիրության հարցում ավելի կարևոր է դառնում, քանի որ արբանյակային պատկերների հասանելիությունն ու լուծումը մեծանում են:
Արբանյակային պատկերներ մուտք գործելու, մշակելու, վերլուծելու և ցուցադրելու համար Python-ն օգտագործելու կարողությունը հնարավորություն է տալիս ստեղծել ստեղծագործական ծրագրեր և պատկերացումներ, որոնք կարող են լավ փոփոխություններ և ավելի մեծ գիտելիքներ առաջացնել մեր աշխարհի մասին:
Հիշեք, որ ուսումնասիրեք ռեսուրսների, ձեռնարկների և գրադարանների մեծ ընտրությունը, որոնք հասանելի են՝ բարձրացնելու ձեր գիտելիքներն ու կարողությունները, մինչ շարունակեք ձեր արկածը արբանյակային պատկերների վերլուծության մեջ Python-ի միջոցով:
Շարունակեք հետաքրքրվել, ուսումնասիրել և օգտագործել Python-ի կարողությունները՝ բացահայտելու արբանյակային նկարների ներսում թաղված գաղտնիքները:
Թողնել գրառում