Rasterio Python kullanarak NDVI hesaplamasında sorun
Aşağıdaki kodu kullanarak Landsat 7'nin iki kırpılmış raster görüntüsünü (maske dosyası kullanılarak kırpılmış NIR ve Kırmızı Bantlar) kullanarak NDVI'yı hesaplamaya çalışıyorum:
import rasterio as rio
import numpy as np
import matplotlib.pyplot as plt
with rio.open(r'D:\clip_test_b3.tif') as src:
red = src.read(1) # (Rows, Columns) = (2731, 3660)
with rio.open(r'D:\clip_test_b4.tif') as src:
nir = src.read(1) # (Rows, Columns) = (2730, 3635)
np.seterr(divide = 'ignore', invalid = 'ignore')
ndvi = (nir.astype(float) - red.astype(float))/(nir + red)
plt.imshow(ndvi)
Yukarıdaki kodda her iki bant (Kırmızı ve NIR) farklı şekillere sahiptir (farklı satırlar ve sütunlar). Yukarıdaki kodu çalıştırdıktan sonra "ValueError: işlenenler şekillerle birlikte yayınlanamaz (2730,3635) (2731,3660)" mesajını alıyorum.
Ancak ArcMap'te (Raster Hesaplayıcı kullanarak) yapmaya çalıştığım aynı NDVI hesaplaması yapıldığında, NDVI hesaplanıyor.
Birisi bu hatayı çözmeme yardım edebilir mi?
Yanıtlar
Sorununuzu çözmek için ızgaraların aynı alanı kapladığından ve aynı boyutlarda olduğundan emin olmanız gerekir. Bunu başarmanın bir yöntemi reproject_match yöntemidir rioxarray(rasterio tarafından desteklenen jeo-uzamsal xarray uzantısı).
import rioxarray
red = rioxarray.open_rasterio("D:\clip_test_b3.tif")
nir_original = rioxarray.open_rasterio("D:\clip_test_b4.tif")
nir = nir_original.rio.reproject_match(red)
ndvi = (nir.astype(float) - red.astype(float))/(nir + red)
ndvi.plot()