Sploty

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.

boxcar_sf
Rysunek 1. Obraz z Landsat 8 zwinięty za pomocą wygładzającego jądra. San Francisco Bay Area, Kalifornia, USA.

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.

laplacian_sf
Rysunek 2. Obraz z satelity Landsat 8 przetworzony za pomocą filtra Laplace’a do wykrywania krawędzi. San Francisco Bay Area, Kalifornia, USA.

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