Utilizando el siguiente código, he filtrado mi colección de imágenes (imágenes Landsat) sobre las regiones forestales de la India. (Las regiones forestales se encontraron utilizando la imagen de Hansen). Tengo una imagen media por mes a lo largo de 6 años desde 2013 hasta 2018. Necesito encontrar y demarcar aquellas regiones que tienen un valor NDVI consistentemente bajo (NDVI<0.25).
Dado que existen variaciones estacionales en el valor del NDVI, un píxel correspondiente a un punto concreto puede tener un valor de NDVI mayor o menor que 0,25 en diferentes momentos. Así que cuando doy una condición como updateMask(image.lte(0.25))
sobre una colección de imágenes y luego visualizando las regiones en el mapa, obtengo todas aquellas regiones en las que ndvi fue menor de 0,25 al menos una vez. Pero sólo necesito las regiones en las que ndvi es inferior a 0,25 todo el tiempo.
¿Qué cambio debo hacer en mi código?
// FILTERING OUT FOREST COVER IN INDIA
var treeCanopyCover = hansen.clip(india).select('treecover2000');
var greater25 = treeCanopyCover.gte(25);
// NDVI FUNCTION
function addNDVI(image) {
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
return image.addBands(ndvi);
}
// FILTERING THE COLLECTION
var startDate = ee.Date('2013-01-01');
var endDate = ee.Date('2018-12-31');
var filtered = l8.filterBounds(india)
.filterDate(startDate, endDate)
.filterMetadata('CLOUD_COVER','less_than',25)
.map(addNDVI);
var maskedCollection = filtered.map(function(image){
var x = image.updateMask(greater25);
return x;
});
// FILTERING MONTHLY WISE OVER YEARS
var map_m = function(y)
{
y = ee.Number(y);
var months = ee.List.sequence(1, 12);
var filtered_col = months.map(function(m)
{
var filt = maskedCollection.filter(ee.Filter.calendarRange(y, y, 'year'))
.filter(ee.Filter.calendarRange(m, m, 'month'))
.mean();
return filt.set('year', y)
.set('month', m)
.set('system:time_start',ee.Date.fromYMD(y,m,1)) ;
});
return filtered_col;
};
var years = ee.List.sequence(2013, 2018);
var monthlyimages = years.map(map_m).flatten();
var z = ee.ImageCollection(monthlyimages);
// // DISCARDING NULL IMAGES //
var nullimages = z.map(function(image)
{
return image.set('count', image.bandNames().length());
})
.filter(ee.Filter.eq('count', 13));
// Finding regions where ndvi is less than 0.25
var ndviViz = {min: 0, max: 0.25, palette: ['red', 'blue']};
var ndviMasked = nullimages.map(function(image){
image = image.select("NDVI");
var x = image.updateMask(image.lte(0.25));
return x;
});
Map.addLayer(ndviMasked.mean(), ndviViz);
También tengo la duda de si es correcto utilizar ndviMasked.mean()
o ndviMasked.mosaic()
mientras se añade la capa al mapa.