Aby wykonać na obrazach konwolucję liniową, użyj funkcji image.convolve()
. Jedynym argumentem funkcji convolve jest ee.Kernel
, która jest określana przez kształt i wagi w jądrze. Każdy piksel obrazu generowanego przez funkcję convolve()
jest kombinacją liniową wartości jądra i pikseli obrazu wejściowego objętych przez jądro. Kernely są stosowane do poszczególnych pasm osobno. Możesz na przykład użyć filtra dolnoprzepustowego (wygładzającego), aby usunąć informacje o wysokiej częstotliwości. Na rysunku poniżej pokazano kernel dolnoprzepustowy 15 x 15 zastosowany do obrazu Landsat 8:
Edytor kodu (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');
Wyjście splotu z filtrem dolnoprzepustowym powinno wyglądać mniej więcej tak jak na rysunku 1. Zwróć uwagę, że argumenty funkcji jądra określają jej rozmiar i współczynniki.
W szczególności, gdy parametr units
ma wartość piksele, parametr radius
określa liczbę pikseli od środka, którą pokrywa kernel. Jeśli parametr normalize
ma wartość Prawda, suma współczynników jądra będzie wynosić 1. Jeśli parametr magnitude
jest ustawiony, współczynniki jądra zostaną pomnożone przez wielkość (jeśli parametr normalize
jest też ustawiony na wartość true, suma współczynników będzie równa magnitude
). Jeśli dowolny z współczynników jądra ma wartość ujemną, ustawienie parametru normalize
na wartość true spowoduje, że suma współczynników będzie równa zero.

Użyj innych jąder, aby uzyskać pożądany efekt przetwarzania obrazu. W tym przykładzie użyto jądra Laplace’a do wykrywania izotropowych krawędzi:
Edytor kodu (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');
Zwróć uwagę na specyfikator formatu w parametrach wizualizacji. Earth Engine wysyła kafelki wyświetlania do Edytora kodu w formacie JPEG ze względów wydajnościowych, ale kafelki krawędzi są wysyłane w formacie PNG, aby obsługiwać przezroczystość pikseli poza granicami obrazu. Jeśli w wyniku tego procesu wystąpiła wizualna nieciągłość, ustawienie formatu na PNG spowoduje spójne wyświetlanie. Wynik konwolucji z jądrem wykrywania krawędzi Laplace’a powinien wyglądać podobnie do rysunku 2.

Istnieją też niejednoosiowe jądra wykrywania krawędzi (np. Sobel, Prewitt, Roberts), których kierunek można zmienić za pomocą kernel.rotate()
. Inne filtry dolnoprzepustowe to filtr gaussowski i filtry o różnym kształcie z jednolitymi wagami. Aby utworzyć jądra z dowolnie zdefiniowanymi wagami i kształtem, użyj instrukcji ee.Kernel.fixed()
. Ten kod tworzy na przykład rdzeń 9 x 9 złożony z jednostek z zerem w środku:
Edytor kodu (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);