คอนโวลูชัน

หากต้องการใช้การฟัซซิออนเชิงเส้นกับรูปภาพ ให้ใช้ image.convolve() อาร์กิวเมนต์เดียวที่ใช้กับการดำเนินการฟิวชันคือการคูณ ee.Kernel ซึ่งระบุด้วยรูปร่างและน้ำหนักใน Kernel พิกเซลแต่ละพิกเซลของเอาต์พุตรูปภาพจาก convolve() คือชุดค่าผสมเชิงเส้นของค่า Kernel และพิกเซลรูปภาพอินพุตที่ Kernel ครอบคลุม โดยจะใช้กับแต่ละย่านความถี่แยกกัน เช่น คุณอาจต้องการใช้ Kernel แบบ Low Pass (การปรับให้เรียบ) เพื่อนำข้อมูลความถี่สูงออก รูปภาพต่อไปนี้แสดงการใช้ Kernel ชนิด Low Pass ขนาด 15x15 กับภาพ Landsat 8

เครื่องมือแก้ไขโค้ด (JavaScript)

// Load and display an image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');
Map.setCenter(-121.9785, 37.8694, 11);
Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'input image');

// Define a boxcar or low-pass kernel.
var boxcar = ee.Kernel.square({
  radius: 7, units: 'pixels', normalize: true
});

// Smooth the image by convolving with the boxcar kernel.
var smooth = image.convolve(boxcar);
Map.addLayer(smooth, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'smoothed');

เอาต์พุตของการฟัซชันด้วยตัวกรองความถี่ต่ำควรมีลักษณะคล้ายกับรูปที่ 1 โปรดทราบว่าอาร์กิวเมนต์ของ Kernel จะกําหนดขนาดและค่าสัมประสิทธิ์ของ Kernel กล่าวโดยละเอียดคือ เมื่อตั้งค่าพารามิเตอร์ units เป็นพิกเซล พารามิเตอร์ radius จะระบุจํานวนพิกเซลจากศูนย์กลางที่ Kernel จะครอบคลุม หากตั้งค่า normalize เป็น "จริง" สัมประสิทธิ์ของ Kernel จะมีผลรวมเท่ากับ 1 หากตั้งค่าพารามิเตอร์ magnitude ระบบจะคูณค่าสัมประสิทธิ์ของ Kernel กับขนาด (หาก normalize เป็นจริงด้วย ค่าสัมประสิทธิ์จะรวมกันเป็น magnitude) หากค่าสัมประสิทธิ์ของ Kernel เป็นค่าลบ การตั้งค่า normalize เป็นจริงจะทำให้ค่าสัมประสิทธิ์รวมกันเป็น 0

boxcar_sf
รูปที่ 1 รูปภาพ Landsat 8 ที่แปลงด้วย Kernel การปรับให้เรียบ บริเวณอ่าวซานฟรานซิสโก รัฐแคลิฟอร์เนีย สหรัฐอเมริกา

ใช้กรวยกรองอื่นๆ เพื่อให้ได้เอฟเฟกต์การประมวลผลรูปภาพที่ต้องการ ตัวอย่างนี้ใช้ลิบบาล์กัลเพื่อตรวจหาขอบแบบไอโซทรอปิก

เครื่องมือแก้ไขโค้ด (JavaScript)

// Define a Laplacian, or edge-detection kernel.
var laplacian = ee.Kernel.laplacian8({ normalize: false });

// Apply the edge-detection kernel.
var edgy = image.convolve(laplacian);
Map.addLayer(edgy,
             {bands: ['B5', 'B4', 'B3'], max: 0.5, format: 'png'},
             'edges');

โปรดสังเกตตัวระบุรูปแบบในพารามิเตอร์การแสดงภาพ Earth Engine จะส่งไทล์ที่แสดงไปยังเครื่องมือแก้ไขโค้ดในรูปแบบ JPEG เพื่อประสิทธิภาพ แต่ระบบจะส่งไทล์ขอบในรูปแบบ PNG เพื่อจัดการกับระดับการโปร่งใสของพิกเซลที่อยู่นอกขอบเขตรูปภาพ เมื่อเกิดภาพที่ไม่ต่อเนื่อง การตั้งค่ารูปแบบเป็น PNG จะทำให้การแสดงผลสอดคล้องกัน ผลลัพธ์ของการฟิวส์กับเคอร์เนลการตรวจหาขอบแบบ Laplace ควรมีลักษณะดังรูปที่ 2

laplacian_sf
รูปที่ 2 รูปภาพ Landsat 8 ที่ฟุ้งด้วยเคอร์เนลการตรวจหาขอบแบบ Laplace บริเวณอ่าวซานฟรานซิสโก รัฐแคลิฟอร์เนีย สหรัฐอเมริกา

นอกจากนี้ยังมีนิวเคลียสตรวจหาขอบแบบ anisotropic (เช่น Sobel, Prewitt, Roberts) ซึ่งสามารถเปลี่ยนทิศทางได้ด้วย kernel.rotate() อื่นๆ ได้แก่ พารามิเตอร์ Gaussian และพารามิเตอร์รูปทรงต่างๆ ที่มีน้ำหนักสม่ำเสมอ หากต้องการสร้าง Kernel ที่มีน้ำหนักและรูปร่างที่กําหนดเอง ให้ใช้ ee.Kernel.fixed() ตัวอย่างเช่น โค้ดนี้จะสร้างนิวเคลียส 9x9 ของ 1 โดยมี 0 อยู่ตรงกลาง

เครื่องมือแก้ไขโค้ด (JavaScript)

// Create a list of weights for a 9x9 kernel.
var row = [1, 1, 1, 1, 1, 1, 1, 1, 1];
// The center of the kernel is zero.
var centerRow = [1, 1, 1, 1, 0, 1, 1, 1, 1];
// Assemble a list of lists: the 9x9 kernel weights as a 2-D matrix.
var rows = [row, row, row, row, centerRow, row, row, row, row];
// Create the kernel from the weights.
var kernel = ee.Kernel.fixed(9, 9, rows, -4, -4, false);
print(kernel);