Deteksi tepi

Deteksi tepi berlaku untuk berbagai tugas pemrosesan gambar. Selain kernel deteksi tepi yang dijelaskan di bagian konvolusi, ada beberapa algoritma deteksi tepi khusus di Earth Engine. Algoritma deteksi tepi Canny (Canny 1986) menggunakan empat filter terpisah untuk mengidentifikasi tepi diagonal, vertikal, dan horizontal. Penghitungan mengekstrak nilai turunan pertama untuk arah horizontal dan vertikal serta menghitung magnitudo gradien. Gradien dengan magnitudo yang lebih kecil akan disembunyikan. Untuk menghilangkan derau frekuensi tinggi, filter gambar terlebih dahulu dengan kernel Gaussian secara opsional. Contoh:

// Load a Landsat 8 image, select the panchromatic band.
var image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318').select('B8');

// Perform Canny edge detection and display the result.
var canny = ee.Algorithms.CannyEdgeDetector({
  image: image, threshold: 10, sigma: 1
});
Map.setCenter(-122.054, 37.7295, 10);
Map.addLayer(canny, {}, 'canny');

Perhatikan bahwa parameter threshold menentukan magnitudo gradien minimum dan parameter sigma adalah deviasi standar (SD) dari prafilter Gauss untuk menghilangkan derau frekuensi tinggi. Untuk ekstraksi garis dari pendeteksi tepi, Earth Engine menerapkan transformasi Hough (Duda dan Hart 1972). Melanjutkan contoh sebelumnya, ekstrak garis dari detektor Canny dengan:

// Perform Hough transform of the Canny result and display.
var hough = ee.Algorithms.HoughTransform(canny, 256, 600, 100);
Map.addLayer(hough, {}, 'hough');

Algoritma khusus lainnya di Earth Engine adalah zeroCrossing(). Zero-crossing didefinisikan sebagai piksel yang piksel kanan, bawah, atau diagonal kanan bawahnya memiliki tanda yang berlawanan. Jika salah satu piksel ini memiliki tanda berlawanan, piksel saat ini ditetapkan ke 1 (zero-crossing); jika tidak, piksel akan ditetapkan ke nol. Untuk mendeteksi tepi, algoritma zero-crossing dapat diterapkan ke estimasi turunan kedua gambar. Berikut ini menunjukkan penggunaan zeroCrossing() untuk deteksi tepi:

// Load a Landsat 8 image, select the panchromatic band.
var image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318').select('B8');
Map.addLayer(image, {max: 12000});

// Define a "fat" Gaussian kernel.
var fat = ee.Kernel.gaussian({
  radius: 3,
  sigma: 3,
  units: 'pixels',
  normalize: true,
  magnitude: -1
});

// Define a "skinny" Gaussian kernel.
var skinny = ee.Kernel.gaussian({
  radius: 3,
  sigma: 1,
  units: 'pixels',
  normalize: true,
});

// Compute a difference-of-Gaussians (DOG) kernel.
var dog = fat.add(skinny);

// Compute the zero crossings of the second derivative, display.
var zeroXings = image.convolve(dog).zeroCrossing();
Map.setCenter(-122.054, 37.7295, 10);
Map.addLayer(zeroXings.selfMask(), {palette: 'FF0000'}, 'zero crossings');

Output zero-crossing untuk area di dekat bandara San Francisco, CA akan terlihat seperti Gambar 1.

SFO zero crossing
Gambar 1. Output zero-crossing (merah) dengan band pankromatik Landsat 8 di latar belakang untuk area di dekat bandara San Francisco, California (kanan).