Para realizar convoluções lineares em imagens, use image.convolve()
. O único
argumento para convolução é um ee.Kernel
especificado por uma forma e os
pesos no kernel. Cada pixel da saída de imagem por convolve()
é a combinação linear dos valores do kernel e dos pixels da imagem de entrada cobertos pelo
kernel. Os kernels são aplicados a cada faixa individualmente. Por exemplo, convém
usar um kernel de passagem baixa (suavização) para remover informações de alta frequência. A imagem a seguir ilustra um kernel de passagem baixa de 15 x 15 aplicado a uma imagem do Landsat 8:
Editor de código (JavaScript)
// Load and display an image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.setCenter(-121.9785, 37.8694, 11); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'input image'); // Define a boxcar or low-pass kernel. var boxcar = ee.Kernel.square({ radius: 7, units: 'pixels', normalize: true }); // Smooth the image by convolving with the boxcar kernel. var smooth = image.convolve(boxcar); Map.addLayer(smooth, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'smoothed');
A saída da convolução com o filtro passa-baixa deve ser semelhante à Figura
1. Os argumentos para o kernel determinam o tamanho e os coeficientes dele.
Especificamente, com o parâmetro units
definido como pixels, o parâmetro radius
especifica o número de pixels do centro que o kernel vai cobrir. Se
normalize
for definido como verdadeiro, os coeficientes do kernel vão somar um. Se
o parâmetro magnitude
estiver definido, os coeficientes do kernel serão multiplicados pela
magnitude. Se normalize
também for verdadeiro, os coeficientes vão somar magnitude
. Se houver um valor negativo em qualquer um dos coeficientes do kernel,
definir normalize
como verdadeiro vai fazer com que os coeficientes somem a zero.

Use outros kernels para conseguir o efeito de processamento de imagem desejado. Este exemplo usa um kernel de Laplace para detecção de borda isotrópica:
Editor de código (JavaScript)
// Define a Laplacian, or edge-detection kernel. var laplacian = ee.Kernel.laplacian8({ normalize: false }); // Apply the edge-detection kernel. var edgy = image.convolve(laplacian); Map.addLayer(edgy, {bands: ['B5', 'B4', 'B3'], max: 0.5, format: 'png'}, 'edges');
Observe o especificador de formato nos parâmetros de visualização. O Earth Engine envia blocos de exibição para o Code Editor no formato JPEG para eficiência. No entanto, os blocos de borda são enviados no formato PNG para processar a transparência de pixels fora do limite da imagem. Quando ocorre uma descontinuidade visual, definir o formato como PNG resulta em uma exibição consistente. O resultado da convolução com o kernel de detecção de bordas de Laplacian deve ser semelhante à Figura 2.

Há também kernels de detecção de bordas anisotrópicas (por exemplo, Sobel, Prewitt, Roberts),
cuja direção pode ser alterada com kernel.rotate()
. Outros kernels de passagem baixa
incluem um kernel Gaussiano e kernels de várias formas com pesos uniformes. Para
criar kernels com pesos e forma definidos de forma arbitrária, use
ee.Kernel.fixed()
. Por exemplo, este código cria um kernel 9x9 de 1s
com um zero no meio:
Editor de código (JavaScript)
// Create a list of weights for a 9x9 kernel. var row = [1, 1, 1, 1, 1, 1, 1, 1, 1]; // The center of the kernel is zero. var centerRow = [1, 1, 1, 1, 0, 1, 1, 1, 1]; // Assemble a list of lists: the 9x9 kernel weights as a 2-D matrix. var rows = [row, row, row, row, centerRow, row, row, row, row]; // Create the kernel from the weights. var kernel = ee.Kernel.fixed(9, 9, rows, -4, -4, false); print(kernel);