تشخیص لبه

تشخیص لبه برای طیف وسیعی از وظایف پردازش تصویر قابل استفاده است. علاوه بر هسته های تشخیص لبه توضیح داده شده در بخش پیچیدگی ، چندین الگوریتم تشخیص لبه تخصصی در Earth Engine وجود دارد. الگوریتم تشخیص لبه Canny (Canny 1986) از چهار فیلتر مجزا برای شناسایی لبه های مورب، عمودی و افقی استفاده می کند. این محاسبه اولین مقدار مشتق را برای جهات افقی و عمودی استخراج می کند و مقدار گرادیان را محاسبه می کند. گرادیان های قدر کوچکتر سرکوب می شوند. برای حذف نویز با فرکانس بالا، به صورت اختیاری تصویر را با یک هسته گاوسی از قبل فیلتر کنید. به عنوان مثال:

ویرایشگر کد (جاوا اسکریپت)

// 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 استخراج کنید:

ویرایشگر کد (جاوا اسکریپت)

// 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() است. تلاقی صفر به هر پیکسلی گفته می شود که در آن پیکسل سمت راست، پایین یا مورب پایین سمت راست دارای علامت مخالف باشد. اگر هر یک از این پیکسل ها دارای علامت مخالف باشد، پیکسل فعلی روی 1 تنظیم می شود (تقاطع صفر). در غیر این صورت روی صفر تنظیم می شود. برای شناسایی لبه‌ها، الگوریتم صفر-تقاطع را می‌توان برای تخمین مشتق دوم تصویر اعمال کرد. موارد زیر استفاده از zeroCrossing() را برای تشخیص لبه نشان می دهد:

ویرایشگر کد (جاوا اسکریپت)

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

خروجی گذرگاه صفر برای منطقه ای نزدیک فرودگاه سانفرانسیسکو، CA باید چیزی شبیه به شکل 1 باشد.

گذرگاه صفر SFO
شکل 1. خروجی صفر گذر (قرمز) با نوار پانکروماتیک Landsat 8 در پس زمینه برای منطقه ای نزدیک فرودگاه سانفرانسیسکو، کالیفرنیا (راست).