ก่อนหน้านี้ คุณได้เรียนรู้วิธีรับฉาก Landsat แต่ละฉากโดยทำสิ่งต่อไปนี้
โดยที่ l8
และ point
คือการนำเข้าที่แสดงถึงคอลเล็กชัน TOA ของ Landsat 8
และรูปทรงเรขาคณิตของพื้นที่ที่สนใจ
โปรแกรมแก้ไขโค้ด (JavaScript)
// Define a point of interest. Use the UI Drawing Tools to import a point // geometry and name it "point" or set the point coordinates with the // ee.Geometry.Point() function as demonstrated here. var point = ee.Geometry.Point([-122.292, 37.9018]); // Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Get the least cloudy image in 2015. var image = ee.Image( l8.filterBounds(point) .filterDate('2015-01-01', '2015-12-31') .sort('CLOUD_COVER') .first() );
สมมติว่าตอนนี้คุณต้องการคำนวณดัชนีพืชพรรณความแตกต่างที่ปรับให้เป็นมาตรฐาน (NDVI) จากภาพ Landsat พืชจะสะท้อนแสงในส่วนอินฟราเรดใกล้ (NIR) ของสเปกตรัมแม่เหล็กไฟฟ้าและดูดซับแสงในส่วนสีแดง (ดูข้อมูลเพิ่มเติมเกี่ยวกับการสะท้อน NIR จากพืช) NDVI ใช้ค่านี้เพื่อสร้างค่าเดียวที่สะท้อนกิจกรรมการสังเคราะห์แสงที่เกิดขึ้นในพิกเซลโดยประมาณ การคำนวณคือ (NIR - แดง) / (NIR + แดง) ซึ่งจะส่งผลให้ได้ตัวเลขระหว่าง 1 ถึง -1 โดยพิกเซลที่มี กิจกรรมการสังเคราะห์แสงสูงจะมี NDVI สูง นี่คือวิธีหนึ่งในการคำนวณ NDVI ใน Earth Engine
โปรแกรมแก้ไขโค้ด (JavaScript)
// Compute the Normalized Difference Vegetation Index (NDVI). var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); // Display the result. Map.centerObject(image, 9); var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']}; Map.addLayer(ndvi, ndviParams, 'NDVI image');
ผลลัพธ์ควรมีลักษณะคล้ายกับรูปที่ 8 โปรดทราบว่าเราใช้ฟังก์ชัน select()
ที่คุณได้เรียนรู้ในส่วนก่อนหน้าเกี่ยวกับ
การมาสก์เพื่อรับแถบ NIR และแถบสีแดง จากนั้นจึงคำนวณ NDVI โดยใช้ตัวดำเนินการทางคณิตศาสตร์ของรูปภาพ
ที่คุณได้เห็นมาก่อนใน
ส่วนเกี่ยวกับImage
คณิตศาสตร์ สุดท้าย ให้แสดงรูปภาพพร้อมจานสี ในที่นี้
เราใช้ชื่อสีแทนสตริงเลขฐาน 16 ในจานสี (ดูรายละเอียดได้ที่ข้อมูลอ้างอิงภายนอกนี้
เกี่ยวกับสี CSS)

การดำเนินการความแตกต่างที่ปรับให้เป็นมาตรฐานเป็นสิ่งที่พบได้ทั่วไปในการรับรู้จากระยะไกล จึงมีฟังก์ชันทางลัดในee.Image
ซึ่งมีประโยชน์ในการลดความซับซ้อนของโค้ดในตัวอย่างก่อนหน้า
โปรแกรมแก้ไขโค้ด (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
การแมปฟังก์ชันกับคอลเล็กชัน
สมมติว่าตอนนี้คุณต้องการเพิ่ม NDVI ให้กับรูปภาพทุกรูปในคอลเล็กชันรูปภาพ
วิธีทำเช่นนั้นใน Earth Engine คือการmap()
ฟังก์ชันในคอลเล็กชัน
อย่าสับสนระหว่าง map()
กับออบเจ็กต์ Map
โดยวิธีแรกเป็นเมธอด
ในคอลเล็กชัน และใช้ map ใน
ความหมายของการประมวลผลแบบขนาน
ของการใช้ฟังก์ชันกับทุกองค์ประกอบในคอลเล็กชัน ฟังก์ชันนี้จะกำหนดการดำเนินการที่จะใช้กับทุกองค์ประกอบในคอลเล็กชัน คุณได้เห็น
ฟังก์ชันอย่างง่ายในบทแนะนำ JavaScript แต่
ตอนนี้เราจะสร้างฟังก์ชันที่มีฟังก์ชันการทำงานของ Earth Engine เช่น
คัดลอกโค้ด NDVI ก่อนหน้าลงในฟังก์ชันที่แสดงผลรูปภาพอินพุตที่มีแบนด์ NDVI
โปรแกรมแก้ไขโค้ด (JavaScript)
var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // Test the addNDVI function on a single image. var ndvi = addNDVI(image).select('NDVI');
โค้ดนี้อาจไม่มีประสิทธิภาพเท่าที่ควรในการคำนวณ NDVI สำหรับรูปภาพเดียว แต่คุณสามารถใช้ฟังก์ชันนี้เป็นอาร์กิวเมนต์กับ map()
เพื่อเพิ่มแบนด์ NDVI
ลงในรูปภาพทุกรูปในคอลเล็กชัน การทดสอบฟังก์ชันในรูปภาพเดียวเป็นอันดับแรกมักจะมีประโยชน์ เพื่อให้แน่ใจว่าฟังก์ชันทำงานตามที่คุณคาดหวัง เมื่อทดสอบฟังก์ชัน
ในรูปภาพแต่ละรูปและพิจารณาแล้วว่าฟังก์ชันดังกล่าวทําในสิ่งที่คุณต้องการ คุณก็สามารถแมปฟังก์ชัน
กับคอลเล็กชันได้โดยทําดังนี้
โปรแกรมแก้ไขโค้ด (JavaScript)
var withNDVI = l8.map(addNDVI);
หากต้องการยืนยันว่าการดำเนินการนี้จะใส่แบนด์ NDVI ในทุกรูปภาพในคอลเล็กชันนี้
คุณสามารถเพิ่มwithNDVI
คอลเล็กชันลงในแผนที่และค้นหาตำแหน่งแบบสุ่ม
ด้วยแท็บเครื่องมือตรวจสอบ คุณจะเห็นว่าตอนนี้รูปภาพแต่ละรูปในคอลเล็กชัน
มีแถบที่ชื่อว่า NDVI
สร้างภาพคอมโพสิตพิกเซลที่เขียวที่สุด
ตอนนี้คุณได้สร้างคอลเล็กชันรูปภาพซึ่งแต่ละรูปภาพมีแบนด์ NDVI แล้ว เราจึงสามารถ
สำรวจวิธีใหม่ในการสร้างคอมโพสิตได้ qualityMosaic()
คุณอาจสังเกตเห็น
ความไม่ต่อเนื่องระหว่างเส้นทางของ Landsat แม้ในคอมโพสิตพิกเซลมัธยฐาน สาเหตุส่วนหนึ่งอาจเกิดจากความแตกต่างของปรากฏการณ์ทางชีววิทยาอันเป็นผลมาจากรูปภาพในเส้นทางที่อยู่ติดกันซึ่งรวบรวมในเวลาที่ต่างกัน (โดยเฉพาะอย่างยิ่งคือห่างกัน 8 วัน) วิธีหนึ่งในการ
ลดปัญหานี้คือการพยายามตั้งค่าพิกเซลในคอมโพสิตจากระยะ
ฟีโนโลยีที่ใกล้เคียงกัน เช่น เวลาที่พืชมีความเขียวสูงสุด (เมื่อมีใบ
และสังเคราะห์แสงได้) หากเรากำหนดให้ความเขียวสูงสุดเป็น NDVI สูงสุด เราจะใช้ qualityMosaic()
เพื่อสร้างคอมโพสิตที่แต่ละพิกเซลมีพิกเซล NDVI สูงสุดจากคอลเล็กชัน
ตอนนี้คุณใช้ประโยชน์จากแถบ NDVI ที่เพิ่มลงในคอลเล็กชัน withNDVI
ได้แล้ว
โปรแกรมแก้ไขโค้ด (JavaScript)
// Make a "greenest" pixel composite. var greenest = withNDVI.qualityMosaic('NDVI'); // Display the result. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(greenest, visParams, 'Greenest pixel composite');
ผลลัพธ์ของโค้ดนี้ควรมีลักษณะคล้ายกับรูปที่ 9 เมื่อเปรียบเทียบรูปที่ 9 กับ
ค่ามัธยฐานของภาพคอมโพสิตที่แสดงในรูปที่ 6
จะเห็นว่าภาพคอมโพสิตของพิกเซลที่เขียวที่สุดนั้นเขียวกว่ามาก อย่างไรก็ตาม การตรวจสอบแหล่งน้ำอย่างละเอียดจะทำให้เห็นปัญหาที่แตกต่างออกไป โดยเฉพาะอย่างยิ่ง
แหล่งน้ำจะดูขุ่นมัว เนื่องจากวิธีการทำงานของเมธอด qualityMosaic()
คือจะตรวจสอบอนุกรมเวลาทั้งหมดในแต่ละสถานที่ และตั้งค่าพิกเซลที่มี
ค่าสูงสุดในแถบ NDVI เป็นค่าคอมโพสิต เนื่องจาก NDVI เหนือเมฆสูงกว่าน้ำ พื้นที่น้ำจึงมีพิกเซลที่มีเมฆ ในขณะที่พื้นที่ที่มีพืชพรรณทั้งหมดจะปรากฏเป็นสีเขียว เนื่องจาก NDVI จะสูงที่สุดเมื่อพืชพรรณในพิกเซลสังเคราะห์แสงได้

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