გარემოს მონიტორინგი, სოფლის მეურნეობა, ურბანული დაგეგმარება, კატასტროფების მართვა და კლიმატის ცვლილების კვლევები ყველამ ისარგებლა სატელიტური გამოსახულების ანალიზით.
ჩვენ შეგვიძლია მივიღოთ მნიშვნელოვანი ინფორმაცია ჩვენი პლანეტის მახასიათებლებზე, ცვლილებებზე და დინამიკაზე დედამიწაზე დამკვირვებელი თანამგზავრების მიერ ჩაწერილი მონაცემების დიდი რაოდენობის გამოყენებით.
Python, მრავალმხრივი და ძლიერი პროგრამირების ენა, გთავაზობთ ბიბლიოთეკების მდიდარ ეკოსისტემას და ხელსაწყოებს სატელიტური სურათების სწრაფი და ეფექტური დამუშავებისთვის.
გამოყენების სატელიტური გამოსახულების ანალიზი ხსნის შესაძლებლობების სამყაროს. ეს საშუალებას გვაძლევს გამოვიტანოთ სასარგებლო ინფორმაცია სატელიტური ფოტოებიდან, როგორიცაა მიწის საფარის კატეგორიზაცია, მცენარეულობის ჯანმრთელობის შეფასება, ურბანული გაფართოების თვალყურის დევნება და სანაპირო ზოლის რუკა.
ჩვენ შეგვიძლია მარტივად დავამუშაოთ, ვაჩვენოთ და გავაანალიზოთ სატელიტური სურათები Python-ის მრავალფეროვნებისა და მოდულების გამოყენებით, როგორიცაა რასტერიო, numpy და matplotlib.
სატელიტური გამოსახულების ანალიზისთვის Python-ის გამოყენების ერთ-ერთი მთავარი უპირატესობა არის გეოსივრცული მონაცემების დამუშავების მოდულების ფართო სპექტრი.
მაგალითად, რასტერიოს აქვს მარტივი ინტერფეისი რასტრული ინფორმაციის წასაკითხად და შესაცვლელად, რაც მას შესაფერისს ხდის სატელიტური გამოსახულების ფაილებთან მუშაობისთვის.
Numpy მოდული უზრუნველყოფს მასივის დახვეწილ ოპერაციებს სურათების მონაცემებზე სწრაფი გამოთვლებისა და სტატისტიკის შესასრულებლად. Matplotlib ასევე საშუალებას გვაძლევს შევქმნათ შესაბამისი ვიზუალი, რომელიც დაგვეხმარება ანალიტიკური შედეგების ინტერპრეტაციასა და კომუნიკაციაში.
შემდეგ სექციებში ჩვენ განვიხილავთ რეალურ მაგალითებს და კოდის ფრაგმენტებს იმის საჩვენებლად, თუ როგორ შეიძლება გამოვიყენოთ პითონი სატელიტური ფოტოების გასაანალიზებლად.
ჩვენ განვიხილავთ, თუ როგორ გავხსნათ სატელიტური ფოტოები, ვიზუალიზაცია ვიზუალიზაციისთვის, ამოიღოთ მეტამონაცემები, გამოვთვალოთ დიაპაზონის სტატისტიკა და გავატაროთ კონკრეტული ანალიზი, როგორიცაა ნორმალიზებული სხვაობის მცენარეულობის ინდექსი (NDVI).
ეს მაგალითები დაგეხმარებათ დაიწყოთ პითონის სატელიტური სურათების ანალიზის დამაინტრიგებელი თემა.
პირველ რიგში, ჩვენ უნდა შემოვიტანოთ რამდენიმე ბიბლიოთეკა, რომელიც დაგვეხმარება დავალების შესრულებაში.
import rasterio
import matplotlib.pyplot as plt
import numpy as np
1. სატელიტური გამოსახულების ვიზუალიზაცია და გახსნა
ჩვენ განვათავსებთ რასტერიოს ბიბლიოთეკას ამ განყოფილებაში, რათა მივიღოთ სატელიტური გამოსახულება, რომელიც მოწოდებულია სატელიტური_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)
სურათის გახსნის შემდეგ მას ვკითხულობთ მასივის სახით satelit_image ობიექტის read() ფუნქციის გამოყენებით. პიქსელის მნიშვნელობები სატელიტური სურათების თითოეული ზოლისთვის ინახება გამოსახულების მასივში.
# Read the image as an array
image_array = satellite_image.read()
სატელიტური სურათის ვიზუალურად შესაფასებლად ვიყენებთ matplotlib.pyplot ხელსაწყოს 10×10 დიუმიანი ფიგურის შესაქმნელად.
სურათების მასივი ნაჩვენებია imshow() მეთოდის გამოყენებით. Transpose(1, 2, 0) ოპერაცია გამოიყენება სურათების მასივის ზომების გადასაწყობად, რათა მოერგოს imshow(-ით) მოსალოდნელ წესრიგს.
დაბოლოს, ღერძი ('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)
სატელიტური_გამოსახულების ობიექტის სიგანე და სიმაღლე ატრიბუტების გამოყენებით, ჩვენ გამოვყავით გამოსახულების სიგანე და სიმაღლე. crs თვისება გამოიყენება გამოსახულების კოორდინატთა საცნობარო სისტემის (CRS) მოსაძიებლად.
CRS გვაწვდის ინფორმაციას სურათის სივრცითი მითითების სისტემაზე, რაც საშუალებას გვაძლევს შევადაროთ გამოსახულების კოორდინატები რეალურ სამყაროში.
და ბოლოს, ჩვენ ვიყენებთ count ატრიბუტს სურათზე სატელიტური_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 (ნორმალიზებული სხვაობის მცენარეულობის ინდექსი) გაანგარიშება
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 დისპლეზე მთლიანად ფოკუსირებისთვის, ჩვენ დამატებით მივუთითებთ წარწერას ნაკვეთისთვის და ვხსნით ღერძის ეტიკეტებს ღერძით ('off'). ბოლოს, ნაკვეთი ნაჩვენებია plt.show().
შეცდომის შესახებ შეტყობინება იწერება კონსოლზე, თუ სურათს აკლია NDVI გამოთვლებისთვის საჭირო ზოლები (ანუ ოთხზე ნაკლები დიაპაზონი).
5. სატელიტური გამოსახულების დახურვა
საუკეთესო პრაქტიკაა გამოიყენოს close() ფუნქცია სატელიტური სურათის ფაილის დასახურად ანალიზისა და ნახვის შემდეგ. ეს ათავისუფლებს ნებისმიერი სისტემის რესურსს, რომელიც დაკავშირებულია სურათის ფაილთან.
satellite_image.close()
აქ არის ჩემი გამოსავალი:
ის არის!
საბოლოო შენიშვნები
პითონის როლი ამ მასიური მონაცემთა ნაკრების შესწავლაში სულ უფრო მნიშვნელოვანი ხდება, რამდენადაც იზრდება თანამგზავრული სურათების ხელმისაწვდომობა და გარჩევადობა.
Python-ის გამოყენების შესაძლებლობა სატელიტური სურათების წვდომისთვის, დამუშავებისთვის, ანალიზისა და ჩვენებისთვის გვთავაზობს გზას კრეატიული აპლიკაციებისა და შეხედულებებისთვის, რამაც შეიძლება გამოიწვიოს კარგი ცვლილებები და მეტი ცოდნა ჩვენი სამყაროს შესახებ.
გახსოვდეთ, რომ შეისწავლეთ რესურსების, გაკვეთილებისა და ბიბლიოთეკების დიდი არჩევანი, რათა გაზარდოთ თქვენი ცოდნა და შესაძლებლობები, სანამ განაგრძობთ თავგადასავალს სატელიტური გამოსახულების ანალიზში Python-ის გამოყენებით.
განაგრძეთ დაინტერესება, შესწავლა და პითონის შესაძლებლობების გამოყენება სატელიტური სურათების შიგნით ჩაფლული საიდუმლოებების გამოსავლენად.
დატოვე პასუხი