Извилины

Чтобы выполнить линейную свертку изображений, используйте image.convolve() . Единственным аргументом для свертки является ee.Kernel , который задается формой и весами в ядре. Каждый пиксель изображения, выводимого функцией convolve() представляет собой линейную комбинацию значений ядра и пикселей входного изображения, охватываемых ядром. Ядра применяются к каждой полосе индивидуально. Например, вы можете использовать ядро ​​нижних частот (сглаживание) для удаления высокочастотной информации. Ниже показано ядро ​​нижних частот 15x15, примененное к изображению Landsat 8:

Редактор кода (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');

Результат свертки с фильтром нижних частот должен выглядеть примерно так, как показано на рисунке 1. Обратите внимание, что аргументы ядра определяют его размер и коэффициенты. В частности, если для параметра units установлено значение пикселей, параметр radius указывает количество пикселей от центра, которое будет охватывать ядро. Если для normalize установлено значение true, сумма коэффициентов ядра будет равна единице. Если установлен параметр magnitude , коэффициенты ядра будут умножены на величину (если normalize также истинно, коэффициенты будут суммироваться до magnitude ). Если какой-либо из коэффициентов ядра имеет отрицательное значение, установка для normalize значения true приведет к тому, что сумма коэффициентов будет равна нулю.

boxcar_sf
Рисунок 1. Изображение Landsat 8, свернутое с помощью сглаживающего ядра. Район залива Сан-Франциско, Калифорния, США.

Используйте другие ядра для достижения желаемого эффекта обработки изображений. В этом примере используется ядро ​​Лапласа для обнаружения изотропных краев:

Редактор кода (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');

Обратите внимание на спецификатор формата в параметрах визуализации. Earth Engine отправляет фрагменты отображения в редактор кода в формате JPEG для повышения эффективности, однако фрагменты краев отправляются в формате PNG для обработки прозрачности пикселей за пределами границы изображения. Если возникает визуальный разрыв, установка формата PNG приводит к единообразному отображению. Результат свертки с ядром обнаружения ребер Лапласа должен выглядеть примерно так, как показано на рисунке 2.

лапласиан_сф
Рисунок 2. Изображение Landsat 8, свернутое с помощью ядра обнаружения границ Лапласа. Район залива Сан-Франциско, Калифорния, США.

Существуют также ядра обнаружения анизотропных краев (например, Sobel, Prewitt, Roberts), направление которых можно изменить с помощью kernel.rotate() . Другие ядра нижних частот включают ядро ​​Гаусса и ядра различной формы с одинаковыми весами. Чтобы создать ядра с произвольно заданным весом и формой, используйте ee.Kernel.fixed() . Например, этот код создает ядро ​​9x9 из единиц с нулем в середине:

Редактор кода (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);
,

Чтобы выполнить линейную свертку изображений, используйте image.convolve() . Единственным аргументом для свертки является ee.Kernel , который задается формой и весами в ядре. Каждый пиксель изображения, выводимого функцией convolve() представляет собой линейную комбинацию значений ядра и пикселей входного изображения, охватываемых ядром. Ядра применяются к каждой полосе индивидуально. Например, вы можете использовать ядро ​​нижних частот (сглаживание) для удаления высокочастотной информации. Ниже показано ядро ​​нижних частот 15x15, примененное к изображению Landsat 8:

Редактор кода (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');

Результат свертки с фильтром нижних частот должен выглядеть примерно так, как показано на рисунке 1. Обратите внимание, что аргументы ядра определяют его размер и коэффициенты. В частности, если для параметра units установлено значение пикселей, параметр radius указывает количество пикселей от центра, которое будет охватывать ядро. Если для normalize установлено значение true, сумма коэффициентов ядра будет равна единице. Если установлен параметр magnitude , коэффициенты ядра будут умножены на величину (если normalize также true, коэффициенты будут суммироваться до magnitude ). Если какой-либо из коэффициентов ядра имеет отрицательное значение, установка для normalize значения true приведет к тому, что сумма коэффициентов будет равна нулю.

boxcar_sf
Рисунок 1. Изображение Landsat 8, свернутое с помощью сглаживающего ядра. Район залива Сан-Франциско, Калифорния, США.

Используйте другие ядра для достижения желаемого эффекта обработки изображений. В этом примере используется ядро ​​Лапласа для обнаружения изотропных краев:

Редактор кода (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');

Обратите внимание на спецификатор формата в параметрах визуализации. Earth Engine отправляет фрагменты отображения в редактор кода в формате JPEG для повышения эффективности, однако фрагменты краев отправляются в формате PNG для обработки прозрачности пикселей за пределами границы изображения. Если возникает визуальный разрыв, установка формата PNG приводит к единообразному отображению. Результат свертки с ядром обнаружения ребер Лапласа должен выглядеть примерно так, как показано на рисунке 2.

лапласиан_сф
Рисунок 2. Изображение Landsat 8, свернутое с помощью ядра обнаружения границ Лапласа. Район залива Сан-Франциско, Калифорния, США.

Существуют также ядра обнаружения анизотропных краев (например, Sobel, Prewitt, Roberts), направление которых можно изменить с помощью kernel.rotate() . Другие ядра нижних частот включают ядро ​​Гаусса и ядра различной формы с одинаковыми весами. Чтобы создать ядра с произвольно заданным весом и формой, используйте ee.Kernel.fixed() . Например, этот код создает ядро ​​9x9 из единиц с нулем в середине:

Редактор кода (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);