Un semplice metodo per avere il change detection da una immagine RGB e' la formula seguente
che non e' altro che la distanza euclidea tra i due punti rappresentativi delle immagini nello spazio delle bande (quindi puo' essere scalato anche su n-bande)
utilizzando la libreria RasterIO si puo' scrivere il codice seguente
import numpy as np
import rasterio
from rasterio.plot import show_hist,show
immagine1 = "cd1.tif"
immagine2 = "cd2.tif"
im1 = rasterio.open(immagine1)
im2 = rasterio.open(immagine2)
im1_b2 = im1.read(1).astype(float)
im1_b3 = im1.read(2).astype(float)
im1_b4 = im1.read(3).astype(float)
im2_b2 = im2.read(1).astype(float)
im2_b3 = im2.read(2).astype(float)
im2_b4 = im2.read(3).astype(float)
np.seterr(divide = "ignore", invalid = "ignore")
change_det = np.zeros(im1_b2.shape, dtype=rasterio.float32)
change_det = np.sqrt(np.power(im1_b2-im2_b2,2)+np.power(im1_b3-im2_b3,2)+np.power(im1_b4-im2_b4,2))
#print("Change Det Max " + str(np.max(change_det)))
#print("Change Det Min " + str(np.min(change_det)))
#show(change_det)
#show_hist(change_det)
kwargs = im1.meta
kwargs.update(driver='GTiff',dtype=rasterio.float32,count=1)
cd_image = rasterio.open('CD.tiff','w',**kwargs )
cd_image.write(change_det,1)
cd_image.close()
Nessun commento:
Posta un commento