Abhisek92

NDVI

May 20th, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.02 KB | None | 0 0
  1. def calc_ndvi(img, r_id=3, n_id=4, out_file="NDVI.tif"):
  2.  
  3.     out = None
  4.     with rio.open(img, 'r') as src:
  5.         kwargs = src.profile
  6.         red = src.read(r_id).astype(float)
  7.         nir = src.read(n_id).astype(float)
  8.         if kwargs['nodata'] in (np.nan, np.inf):
  9.             red = np.ma.masked_array(red, mask=~np.isfinite(red))
  10.             nir = np.ma.masked_array(nir, mask=~np.isfinite(nir))
  11.         else:
  12.             red = np.ma.masked_array(red, mask=(red == kwargs['nodata']))
  13.             nir = np.ma.masked_array(nir, mask=(nir == kwargs['nodata']))
  14.         nu = nir - red
  15.         de = nir + red
  16.         de = np.ma.masked_array(de, mask=(de == 0))
  17.         ndvi_band = (nu / de).astype(float)
  18.         np.ma.set_fill_value(ndvi_band, np.nan)
  19.         kwargs.update(driver='GTiff', count=1, dtype='float32', tiled=True, nodata=np.nan)
  20.         with rio.open(out_file, 'w+', **kwargs) as dst:
  21.             dst.write(ndvi_band.data.astype(np.float32), 1)
  22.         out = ndvi_band.astype(np.float32)
  23.     return out
Add Comment
Please, Sign In to add comment