Para realizar convolución lineal en imágenes, usa image.convolve()
. El único argumento para convolución es un ee.Kernel
que se especifica con una forma y los pesos en el kernel. Cada píxel de la imagen que genera convolve()
es la combinación lineal de los valores del kernel y los píxeles de la imagen de entrada que cubre el kernel. Los kernels se aplican a cada banda de forma individual. Por ejemplo, te recomendamos
usar un kernel de paso bajo (suavizado) para quitar la información de alta frecuencia. En la siguiente imagen, se ilustra un kernel de paso bajo de 15 × 15 aplicado a una imagen de Landsat 8:
// 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');
El resultado de la convolución con el filtro de paso bajo debería ser similar a la Figura 1. Observa que los argumentos del kernel determinan su tamaño y coeficientes.
Específicamente, con el parámetro units
establecido en píxeles, el parámetro radius
especifica la cantidad de píxeles del centro que cubrirá el kernel. Si normalize
se establece como verdadero, los coeficientes del kernel suman uno. Si se establece el parámetro magnitude
, los coeficientes del kernel se multiplicarán por la magnitud (si normalize
también es verdadero, los coeficientes se sumarán a magnitude
). Si hay un valor negativo en cualquiera de los coeficientes del kernel, establecer normalize
como verdadero hará que los coeficientes se sumen a cero.

Usa otros kernels para lograr el efecto de procesamiento de imágenes deseado. En este ejemplo, se usa un kernel de Laplaciano para la detección de bordes isotrópicos:
// 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');
Ten en cuenta el especificador de formato en los parámetros de visualización. Earth Engine envía mosaicos de visualización al editor de código en formato JPEG para mejorar la eficiencia. Sin embargo, los mosaicos de borde se envían en formato PNG para controlar la transparencia de los píxeles fuera del límite de la imagen. Cuando se produce una discontinuidad visual, configurar el formato como PNG genera una visualización coherente. El resultado de la convolución con el kernel de detección de bordes laplaciano debería verse como la Figura 2.

También hay kernels de detección de bordes anisotrópicos (p.ej., Sobel, Prewitt, Roberts), cuya dirección se puede cambiar con kernel.rotate()
. Otros núcleos de paso bajo incluyen un núcleo gaussiano y núcleos de varias formas con pesos uniformes. Para crear kernels con pesos y formas definidos de forma arbitraria, usa ee.Kernel.fixed()
. Por ejemplo, este código crea un kernel de 9 × 9 de 1 con un cero en el medio:
// 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);