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