Cálculos usando imagens

Agora que você sabe como carregar e mostrar uma imagem, é hora de aplicar um cálculo a ela. Por exemplo, é possível calcular a inclinação do terreno transmitindo a imagem de elevação do SRTM ao método slope do ee.Terrain package.

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');

No código ee.Terrain.slope(srtm), a imagem srtm é fornecida como um argumento para o algoritmo de inclinação. O resultado será parecido com a Figura 3.

Tutorial_api_03_slope.png
Figura 3. Imagem de inclinação.

Cálculo com imagens

Há também métodos na classe ee.Image que podem ser invocados em um objeto de imagem. Por exemplo, suponha que você queira fazer alguns cálculos usando bandas de imagem (às vezes chamadas de matemática de banda ou álgebra de mapa). Por exemplo, talvez você tenha interesse em operações trigonométricas em uma imagem de aspecto. Para isso, primeiro converta uma imagem de aspecto em radianos e chame sin() nela. Reutilizando nossa imagem 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');

O resultado será parecido com a Figura 4. Vale a pena analisar melhor o código aspect.divide(180).multiply(Math.PI).sin(). Ao encadear vários métodos assim, o código diz: "divida o aspecto por 180, multiplique o resultado por π e, por fim, pegue o seno". É possível realizar operações matemáticas complexas em imagens combinando métodos dessa maneira. Consulte os documentos do Image para ver uma lista completa de operações matemáticas, add(), subtract(), multiply() etc.

Tutorial_api_04_sin.png
Figura 4. Seno do aspecto do terreno.

Estatísticas de imagens

Outra classe útil de operações em imagens envolve o cálculo de estatísticas de pixels em regiões de imagens ou sobreposições raster-vetor. Para calcular estatísticas no Earth Engine, use um redutor, representado por classes no pacote ee.Reducer. Por exemplo, suponha que você tenha interesse na média de elevação em alguma região. Você pode definir uma região desenhando um polígono com as ferramentas de desenho de geometria. Para desenhar uma região de forma interativa, use a ferramenta de desenho de polígonos (), digitalize um polígono sobre a área de interesse e clique em Sair quando terminar. O objeto ee.Geometry resultante é nomeado automaticamente como geometry e adicionado como uma importação na parte de cima do script. Clique no nome da variável nas importações e digite o novo nome para renomear como "polygon".

Em seguida, extraia o valor médio do pixel no polígono usando o seguinte 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);

Há várias coisas a serem observadas aqui. Primeiro, observe que reduceRegion() é um método disponível para objetos Image. Saiba mais sobre como reduzir regiões aqui. Segundo, os argumentos do método são fornecidos em um objeto JavaScript transmitido como um único argumento. Especificamente, as chaves do objeto são os nomes dos parâmetros do método. Os valores são os argumentos do método. Em terceiro lugar, o parâmetro reducer especifica o tipo de estatística a ser calculada, e o parâmetro geometry especifica a região em que a estatística será calculada. O parâmetro scale é o tamanho do pixel em metros a ser usado. Para evitar ambiguidade, sempre especifique a escala ao fazer reduções, já que o Earth Engine pode não conseguir determinar automaticamente a escala adequada com base nas entradas. Saiba mais sobre a escala no Earth Engine.

Por fim, o valor de retorno de reduceRegion() é um dicionário em que as chaves são nomes de bandas e os valores são as estatísticas de pixels das bandas. O método get() em um dicionário retorna o valor correspondente à chave fornecida como um argumento. Nesse caso, a imagem srtm tem uma banda, "elevation". Portanto, o código de exemplo recebe essa estatística do dicionário e a imprime.

Ao executar esse código, se você receber um erro semelhante a:

Não se preocupe! Há várias coisas que você pode fazer para resolver o erro. O método reduceRegion() tem uma verificação para garantir que você considere se realmente quer incluir tantos pixels no cálculo. Isso evita que você faça algo por acidente, como tentar calcular a média de todos os pixels de um metro do mundo (não faça isso). Para resolver o erro, defina o parâmetro bestEffort como true adicionando bestEffort: true ao dicionário de parâmetros ou defina o parâmetro maxPixels com um valor maior que o padrão de 10 milhões de pixels, ou ambos. Se bestEffort for verdadeiro, o Earth Engine vai recalcular automaticamente a escala para que maxPixels não seja excedido.

Digressão: escala no Earth Engine

No exemplo anterior, scale é definido como aproximadamente a resolução nativa da imagem SRTM. Para descobrir a resolução nativa de uma imagem, faça o seguinte:

Editor de código (JavaScript)

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

Se você especificar uma escala menor que a resolução nativa, o Earth Engine vai reamostrar a imagem de entrada usando o vizinho mais próximo e incluir todos esses pixels menores no cálculo. Se você definir uma escala maior, o Earth Engine vai usar pixels de entrada de uma versão agregada da entrada (ou seja, vai receber pixels de um nível mais alto da pirâmide de imagens). Saiba mais sobre como o Earth Engine lida com o escalonamento neste documento.

Até agora, você trabalhou com uma única imagem com uma única banda. Na próxima página, você vai aprender sobre imagens multibanda e coleções de imagens.