Konvolusi

Untuk melakukan konvolusi linear pada gambar, gunakan image.convolve(). Satu-satunya argumen untuk melakukan konvolusi adalah ee.Kernel yang ditentukan oleh bentuk dan bobot dalam kernel. Setiap piksel output gambar oleh convolve() adalah kombinasi linear dari nilai kernel dan piksel gambar input yang tercakup oleh kernel. Kernel diterapkan ke setiap band satu per satu. Misalnya, Anda mungkin ingin menggunakan kernel low-pass (penghalusan) untuk menghapus informasi frekuensi tinggi. Gambar berikut mengilustrasikan kernel low-pass 15x15 yang diterapkan ke gambar Landsat 8:

Editor Kode (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');

Output konvolusi dengan filter low-pass akan terlihat seperti Gambar 1. Perhatikan bahwa argumen ke kernel menentukan ukuran dan koefisiennya. Secara khusus, dengan parameter units yang ditetapkan ke piksel, parameter radius menentukan jumlah piksel dari pusat yang akan dijangkau kernel. Jika normalize ditetapkan ke benar, koefisien kernel akan berjumlah satu. Jika parameter magnitude ditetapkan, koefisien kernel akan dikalikan dengan magnitudo (jika normalize juga benar, koefisien akan berjumlah magnitude). Jika ada nilai negatif dalam salah satu koefisien kernel, menetapkan normalize ke benar akan membuat jumlah koefisien menjadi nol.

boxcar_sf
Gambar 1. Gambar Landsat 8 yang dikonvolusi dengan kernel penghalus. Wilayah Teluk San Francisco, California, Amerika Serikat.

Gunakan kernel lain untuk mendapatkan efek pemrosesan gambar yang diinginkan. Contoh ini menggunakan kernel Laplacian untuk deteksi tepi isotropik:

Editor Kode (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');

Perhatikan pengonfigurasi format dalam parameter visualisasi. Earth Engine mengirim ubin tampilan ke Code Editor dalam format JPEG untuk efisiensi, tetapi ubin tepi dikirim dalam format PNG untuk menangani transparansi piksel di luar batas gambar. Jika terjadi ketidakkontinuan visual, menetapkan format ke PNG akan menghasilkan tampilan yang konsisten. Hasil konvolusi dengan kernel deteksi tepi Laplacian akan terlihat seperti Gambar 2.

laplacian_sf
Gambar 2. Gambar Landsat 8 yang dikonvolusi dengan kernel deteksi tepi Laplacian. Wilayah Teluk San Francisco, California, Amerika Serikat.

Ada juga kernel deteksi tepi anisotropis (misalnya Sobel, Prewitt, Roberts), yang arahnya dapat diubah dengan kernel.rotate(). Kernel low pass lainnya mencakup kernel Gaussian dan kernel berbagai bentuk dengan bobot yang seragam. Untuk membuat kernel dengan bobot dan bentuk yang ditentukan secara arbitrer, gunakan ee.Kernel.fixed(). Misalnya, kode ini membuat kernel 9x9 dari 1 dengan nol di tengah:

Editor Kode (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);