זיהוי קצוות

זיהוי קצוות רלוונטי למגוון רחב של משימות עיבוד תמונה. בנוסף לליבת זיהוי הקצוות שמתוארת בקטע 'שילובים', יש ב-Earth Engine כמה אלגוריתמים מיוחדים לזיהוי קצוות. אלגוריתם זיהוי הקצוות של Canny (Canny 1986) משתמש בארבעה מסננים נפרדים כדי לזהות את הקצוות האנכיים, האופקיים והאלכסוניים. החישוב מחלץ את ערך הנגזרת הראשונה לכיוונים האופקיים והאנכיים ומחשב את עוצמת השיפוע. שיפועים של עוצמה קטנה יותר מודחקים. כדי לבטל רעש בתדר גבוה, אפשר לסנן מראש את התמונה באמצעות ליבה גאוסיאנית. לדוגמה:

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

הערה: הפרמטר threshold קובע את עוצמת השיפוע המינימלית, והפרמטר sigma הוא סטיית התקן (SD) של מסנן מקדים גופרתי להסרת רעש בתדר גבוה. כדי לחלץ קווים ממזהה קצוות,‏ Earth Engine מטמיע את טרנספורמציית Hough (Duda and Hart 1972). בהמשך לדוגמה הקודמת, כדי לחלץ שורות ממזהה Canny:

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

אלגוריתם נוסף שמתמחה ב-Earth Engine הוא zeroCrossing(). נקודה שבה ערך הפונקציה עובר מ-0 ל-0 מוגדרת כפיקסל שבו הפיקסל הימני, התחתון או הפיקסל האלכסוני הימני התחתון יש לו את הסימן ההפוך. אם אחד מהפיקסלים האלה הוא בעל סימן הפוך, הפיקסל הנוכחי מוגדר כ-1 (מעבר לאפס). אחרת, הוא מוגדר כ-0. כדי לזהות קצוות, אפשר להחיל את האלגוריתם של צירי האפס על אומדן של הנגזרת השנייה של התמונה. הדוגמה הבאה ממחישה את השימוש ב-zeroCrossing() לזיהוי קצוות:

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

הפלט של מעברי האפס באזור ליד נמל התעופה של סן פרנסיסקו, קליפורניה אמור להיראות בערך כמו באיור 1.

zero crossings SFO
איור 1. פלט של צמתים אפסיים (אדום) עם הפס הפנוכרומטי של Landsat 8 ברקע, באזור ליד נמל התעופה של סן פרנסיסקו, קליפורניה (ימין).