Die Kantenerkennung kann für eine Vielzahl von Aufgaben der Bildverarbeitung verwendet werden. Zusätzlich zu den im Abschnitt zu Convolutionen beschriebenen Kernen zur Kantenerkennung gibt es in Earth Engine mehrere spezielle Algorithmen zur Kantenerkennung. Der Canny-Algorithmus zur Kantenerkennung (Canny 1986) verwendet vier separate Filter, um diagonale, vertikale und horizontale Kanten zu identifizieren. Bei der Berechnung wird der Wert der ersten Ableitung für die horizontale und vertikale Richtung extrahiert und die Steigungssteigung berechnet. Steigungen mit geringerer Größe werden unterdrückt. Um hochfrequentes Rauschen zu entfernen, können Sie das Bild optional mit einem Gaußschen Kernel vorfiltern. Beispiel:
Code-Editor (JavaScript)
// 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');
Der Parameter threshold
bestimmt die minimale Gradientengröße und der Parameter sigma
ist die Standardabweichung (SD) eines gaussianischen Vorfilters zum Entfernen von Hochfrequenzrauschen. Für die Linienextraktion aus einem Kantensegmentator wird in Earth Engine die Hough-Transformation (Duda und Hart, 1972) implementiert. Fahren Sie mit dem vorherigen Beispiel fort und extrahieren Sie Linien aus dem Canny-Detektor mit:
Code-Editor (JavaScript)
// Perform Hough transform of the Canny result and display. var hough = ee.Algorithms.HoughTransform(canny, 256, 600, 100); Map.addLayer(hough, {}, 'hough');
Ein weiterer spezieller Algorithmus in Earth Engine ist zeroCrossing()
. Ein Nulldurchgang wird als Pixel definiert, bei dem das Pixel rechts, unten oder diagonal rechts unten das entgegengesetzte Vorzeichen hat. Wenn eines dieser Pixel ein entgegengesetztes Vorzeichen hat, wird das aktuelle Pixel auf 1 (Nulldurchgang) gesetzt, andernfalls auf null. Zur Erkennung von Kanten kann der Algorithmus für Nulldurchgänge auf eine Schätzung der zweiten Ableitung des Bildes angewendet werden.
Im folgenden Beispiel wird die Verwendung von zeroCrossing()
für die Kantenerkennung veranschaulicht:
Code-Editor (JavaScript)
// 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');
Die Ausgabe für Nulldurchgänge für ein Gebiet in der Nähe des Flughafens von San Francisco, Kalifornien, sollte in etwa so aussehen wie in Abbildung 1.