Cálculos usando imagens

Agora que você sabe como carregar e exibir 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 da SRTM para o método slope do pacote 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');

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.

Matemática de imagens

Também há métodos na classe ee.Image que podem ser invocados em um objeto de imagem. Por exemplo, suponha que você queira fazer algumas contas usando bandas de imagem (às vezes chamadas de band math ou map algebra). Por exemplo, você pode ter interesse em operações trigonométricas em uma imagem de aspecto. Para isso, primeiro converta uma imagem de aspecto em radianos e, em seguida, 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 o código aspect.divide(180).multiply(Math.PI).sin() com mais detalhes. Ao encadear vários métodos como esse, o código diz: "divida o aspecto por 180, multiplique o resultado por π e, por fim, use o seno". É possível realizar operações matemáticas complexas em imagens combinando métodos dessa maneira. Consulte a documentação 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 imagem

Outra classe útil de operações em imagens envolve o cálculo de estatísticas de pixels em regiões de imagem ou sobreposições de rasterização-vetor. Para calcular estatísticas no Earth Engine, use um redutor, conforme representado pelas classes no pacote ee.Reducer. Por exemplo, suponha que você tenha interesse na média de elevação em alguma região. Para definir uma região, desenhe um polígono usando 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. Renomeie essa variável como "polygon" clicando no nome dela nas importações e digitando o novo nome.

Em seguida, use o código abaixo para encontrar o valor médio de pixel no polígono:

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 que é 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 pixel 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", então 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 como:

Não se preocupe! Há várias maneiras de 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 tem como objetivo impedir que você faça acidentalmente alguma bobagem, como tentar calcular a média de cada pixel de 1 metro no 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 como 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, use:

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 fazer uma nova amostragem da 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.