آموزش محاسبه NDVI از تصاویر Landsat8 با پایتون 3 و Rasterio
NDVI یک شاخص گیاهی است که به طور گسترده ای برای ارزیابی اثرات زیست محیطی، ارزیابی کشاورزی و معیارهای تغییر کاربری زمین مورد استفاده قرار می گیرد. روش محاسبه NDVI در نرم افزارهای سیستم اطلاعات جغرافیایی (GIS) به عنوان QGIS ساده و مستقیم است. با این حال، کارایی تنها مربوط به یک تصویر است، اما اگر یک سری از تصاویر را تجزیه و تحلیل کنیم یا اگر تصاویری با منابع محاسباتی محدود داشته باشیم، ما باید برخی از فیلترهای سفارشی و پیش پردازش را به مجموعه داده ها اعمال نماییم، سپس ما باید روش های دیگری را برای محاسبه NDVI در یک روش سریع تر و کارآمدتر با توجه به منابع محاسباتی در دسترس بررسی کنیم.
تصاویر ماهواره ای georasters هستند، این تصاویر یک آرایه منظم از ستون ها و ردیف ها (یک ماتریس در هر باند) است. پایتون زبان برنامه نویسی و تجزیه و تحلیل داده ها برای جبر ماتریس با کتابخانه Numpy بسیار متنوع است، اما هیچ روش ایده آل و ساده برای پردازش georaster تا زمان توسعه بسته Rasterio وجود ندارد.
Rasterio یک کتابخانه برای باز کردن، نوشتن، بررسی و تجزیه و تحلیل georasters در پایتون است. این کتابخانه از تصاویر GeoTIFF همراه با فرمت های دیگر استفاده می کند و قادر به کار با تصاویر ماهواره ای، مدل های ارتفاعی دیجیتال و تصاویر تولید شده از هواپیماهای بدون سرنشین است.
این آموزش روش کامل برای تجزیه و تحلیل NDVI از یک تصویر Landsat 8 با پایتون 3 و Rasterio را نشان می دهد. اسکریپت و نمایندگی بر روی یک محیط تعاملی به نام Jupyter Notebook انجام شد، در نهایت نتیجه georaster در QGIS باز شد و در مقایسه با برخی از تصاویر پس زمینه بدست آمد.
داده های ورودی
شما می توانید داده های ورودی و اسکریپت های مورد استفاده برای آموزش در این لینک را دانلود کنید.
کد پایتون (دانلود این کد):
#import required libraries
import rasterio
from rasterio import plot
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
import os
os.listdir('../Landsat8/')
#import bands as separate 1 band raster
band4 = rasterio.open('../Landsat8/LC08_L1TP_042035_20180603_20180615_01_T1_B4_clip.tif') #red
band5 = rasterio.open('../Landsat8/LC08_L1TP_042035_20180603_20180615_01_T1_B5_clip.tif') #nir
#number of raster rows
band4.height
#number of raster columns
band4.width
#plot band
plot.show(band4)
#type of raster byte
band4.dtypes[0]
#raster sytem of reference
band4.crs
#raster transform parameters
band4.transform
#raster values as matrix array
band4.read(1)
#multiple band representation
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
plot.show(band4, ax=ax1, cmap='Blues') #red
plot.show(band5, ax=ax2, cmap='Blues') #nir
fig.tight_layout()
#generate nir and red objects as arrays in float64 format
red = band4.read(1).astype('float64')
nir = band5.read(1).astype('float64')
nir
#ndvi calculation, empty cells or nodata cells are reported as 0
ndvi=np.where(
(nir+red)==0.,
0,
(nir-red)/(nir+red))
ndvi[:5,:5]
#export ndvi image
ndviImage = rasterio.open('../Output/ndviImage.tiff','w',driver='Gtiff',
width=band4.width,
height = band4.height,
count=1, crs=band4.crs,
transform=band4.transform,
dtype='float64')
ndviImage.write(ndvi,1)
ndviImage.close()
#plot ndvi
ndvi = rasterio.open('../Output/ndviImage.tiff')
fig = plt.figure(figsize=(18,12))
plot.show(ndvi)
شناسه تلگرام مدیر سایت: SubBasin@
نشانی ایمیل: behzadsarhadi@gmail.com
(سوالات تخصصی را در گروه تلگرام ارسال کنید)
_______________________________________________________
نظرات (۰)