Cálculos con imágenes

Ahora que sabes cómo cargar y mostrar una imagen, es momento de aplicarle un cálculo. Por ejemplo, puedes calcular la pendiente del terreno pasando la imagen de elevación del SRTM al método slope del paquete ee.Terrain.

Editor de código (JavaScript)

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

Ten en cuenta que, en el código ee.Terrain.slope(srtm), la imagen srtm se proporciona como un argumento para el algoritmo de pendiente. El resultado debería ser similar al de la figura 3.

Tutorial_api_03_slope.png
Figura 3: Imagen de pendiente.

Operaciones matemáticas con imágenes

También hay métodos en la clase ee.Image que se pueden invocar en un objeto de imagen. Por ejemplo, supongamos que deseas realizar algunos cálculos matemáticos con bandas de imágenes (a veces, denominados álgebra de mapas o álgebra de bandas). Por ejemplo, es posible que te interesen las operaciones trigonométricas en una imagen de relación de aspecto. Para lograrlo, primero convierte una imagen de relación de aspecto en radianes y, luego, llama a sin() en ella. Reutilizamos nuestra imagen de srtm.

Editor de código (JavaScript)

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

El resultado debería ser similar al de la figura 4. Vale la pena analizar el código de aspect.divide(180).multiply(Math.PI).sin() con más detalle. Encadenando varios métodos de esta manera, el código indica que se debe dividir el aspecto por 180, multiplicar el resultado por π y, finalmente, obtener el seno. Puedes realizar operaciones matemáticas complejas en imágenes combinando métodos de esta manera. Consulta la documentación de Image para obtener una lista completa de las operaciones matemáticas, add(), subtract(), multiply(), etcétera.

Tutorial_api_04_sin.png
Figura 4: Seno del aspecto del terreno.

Estadísticas de imágenes

Otra clase útil de operaciones en imágenes implica calcular estadísticas de píxeles en regiones de imágenes o superposiciones de ráster a vector. Para calcular estadísticas en Earth Engine, usa un reductor representado por clases en el paquete ee.Reducer. Por ejemplo, supongamos que te interesa la media de la elevación en alguna región. Puedes definir una región dibujando un polígono con las herramientas de dibujo de geometría. Para dibujar una región de forma interactiva, obtén la herramienta de dibujo de polígonos (), luego digitaliza un polígono sobre el área de interés y haz clic en Salir cuando termines. Ten en cuenta que el objeto ee.Geometry resultante se denomina automáticamente geometry y se agrega como una importación en la parte superior de la secuencia de comandos. Para cambiar el nombre de esa variable a "polygon", haz clic en el nombre de la variable en las importaciones y escribe el nuevo nombre.

A continuación, obtén el valor medio de píxeles en el polígono con el siguiente código:

Editor de código (JavaScript)

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

Hay varios aspectos que debes tener en cuenta. Primero, observa que reduceRegion() es un método disponible para los objetos Image (obtén más información para reducir regiones aquí). En segundo lugar, los argumentos del método se proporcionan en un objeto de JavaScript que se pasa como un solo argumento. (Específicamente, las claves del objeto son los nombres de los parámetros del método. Los valores son los argumentos del método. En tercer lugar, el parámetro reducer especifica el tipo de estadística que se debe calcular, y el parámetro geometry especifica la región en la que se debe calcular la estadística. El parámetro scale es el tamaño de píxel en metros que se usará. Para evitar ambigüedades, siempre debes especificar la escala cuando realices reducciones, ya que es posible que Earth Engine no pueda determinar automáticamente la escala adecuada a partir de las entradas. (Obtén más información sobre la escala en Earth Engine).

Por último, el valor de retorno de reduceRegion() es un diccionario en el que las claves son los nombres de las bandas y los valores son las estadísticas de píxeles de las bandas. El método get() en un diccionario devuelve el valor correspondiente a la clave proporcionada como argumento. En este caso, la imagen srtm tiene una banda, "elevation", por lo que el código de ejemplo obtiene esa estadística del diccionario y la imprime.

Cuando ejecutes este código, si obtienes un error como el siguiente:

No te preocupes. Puedes hacer varias cosas para resolver el error. El método reduceRegion() incluye una verificación para asegurarse de que consideres si realmente deseas incluir tantos píxeles en tu cálculo. Esto tiene como objetivo evitar que cometas algún error accidentalmente, como intentar calcular la media de cada píxel de un metro del mundo (no lo hagas). Para resolver el error, configura el parámetro bestEffort en true agregando bestEffort: true al diccionario de parámetros, o bien configura el parámetro maxPixels en un valor superior al valor predeterminado de 10 millones de píxeles, o ambas opciones. Si bestEffort es verdadero, Earth Engine volverá a calcular automáticamente la escala para que no se exceda maxPixels.

Digresión: La escala en Earth Engine

En el ejemplo anterior, scale se establece en aproximadamente la resolución nativa de la imagen del SRTM. Puedes descubrir la resolución nativa de una imagen con lo siguiente:

Editor de código (JavaScript)

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

Si especificas una escala menor que la resolución nativa, Earth Engine volverá a muestrear la imagen de entrada con el método del vecino más cercano y, luego, incluirá todos esos píxeles más pequeños en el cálculo. Si configuras una escala más grande, Earth Engine usará píxeles de entrada de una versión agregada de la entrada (es decir, obtendrá píxeles de un nivel superior de la pirámide de imágenes). Obtén más información sobre cómo Earth Engine maneja la escala en este documento.

Hasta ahora, trabajaste con una sola imagen con una sola banda. En la siguiente página, aprenderás sobre las imágenes multibanda y las colecciones de imágenes.