การตรวจหาขอบใช้ได้กับงานประมวลผลรูปภาพหลากหลาย นอกจากนิวเคลียสการตรวจหาขอบที่อธิบายไว้ใน ส่วนการกรองเชิงซ้อนแล้ว Earth Engine ยังมีอัลกอริทึมการตรวจหาขอบเฉพาะอีกหลายรายการ อัลกอริทึมการตรวจหาขอบของ Canny (Canny 1986) ใช้ตัวกรองแยกกัน 4 ตัวเพื่อระบุขอบแนวทแยง แนวตั้ง และแนวนอน การคํานวณจะดึงค่าอนุพันธ์แรกสําหรับทิศทางแนวนอนและแนวตั้ง และคํานวณขนาดของลําดับชั้น ระบบจะระงับการแสดงผลของเส้นลาดที่มีค่าน้อยกว่า หากต้องการกำจัดสัญญาณรบกวนความถี่สูง ให้กรองรูปภาพด้วย Kernel แบบ Gaussian ล่วงหน้า (ไม่บังคับ) เช่น
เครื่องมือแก้ไขโค้ด (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
จะกำหนดขนาดของ Gradient ขั้นต่ำ และพารามิเตอร์ sigma
คือค่าเบี่ยงเบนมาตรฐาน (SD) ของตัวกรองก่อนการกรองแบบกaussian เพื่อนำสัญญาณรบกวนความถี่สูงออก สําหรับการดึงข้อมูลเส้นจากตัวตรวจหาขอบ Earth Engine จะใช้การเปลี่ยนรูปแบบของ Hough (Duda and Hart 1972) ต่อจากตัวอย่างก่อนหน้านี้ ให้ดึงเส้นออกจากตัวตรวจจับ Canny ด้วย
เครื่องมือแก้ไขโค้ด (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 หมายถึงพิกเซลที่พิกัดขวา ล่าง หรือขวาล่างตามแนวทแยงมีเครื่องหมายตรงข้าม หากพิกเซลใดพิกเซลหนึ่งมีเครื่องหมายตรงข้าม ระบบจะตั้งค่าพิกเซลปัจจุบันเป็น 1 (จุดตัด 0) มิเช่นนั้น ระบบจะตั้งค่าเป็น 0 หากต้องการตรวจหาขอบ ให้ใช้อัลกอริทึมการข้ามศูนย์กับค่าประมาณของอนุพันธ์ลำดับที่ 2 ของรูปภาพ
ตัวอย่างต่อไปนี้แสดงการใช้ zeroCrossing()
เพื่อตรวจหาขอบ
เครื่องมือแก้ไขโค้ด (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
