เมื่อโหลดคอลเล็กชันการสะท้อน TOA ของ Landsat 8ลงในตัวแปรที่ชื่อ l8
คุณจะเห็นว่าโค้ดต่อไปนี้
จะทำให้เกิดคอมโพสิตค่าล่าสุด
โปรแกรมแก้ไขโค้ด (JavaScript)
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31'); Map.addLayer(landsat2016, visParams, 'l8 collection');
ปัญหาอย่างหนึ่งของภาพคอมโพสิตนี้คือมีเมฆปกคลุม แทนที่จะใช้แค่
พิกเซลสุดท้ายในคอลเล็กชัน (เมื่อเพิ่มคอลเล็กชันลงในแผนที่ Earth
Engine จะเรียกใช้ mosaic()
โดยปริยาย) คุณสามารถลด ImageCollection
(ดูข้อมูลเพิ่มเติมเกี่ยวกับการลดคอลเล็กชันรูปภาพ)
การคอมโพสิตด้วยตัวลด
คุณได้รู้จักรีดิวเซอร์เป็นครั้งแรกสำหรับการรับ
สถิติในภูมิภาคของรูปภาพ นั่นคือการลดเชิงพื้นที่ การลด
คอลเล็กชันรูปภาพให้เหลือรูปภาพเดียวเป็นการลดชั่วคราวเมื่อคอลเล็กชัน
แสดงรูปภาพในช่วงเวลาต่างๆ ประเภทของ Reducer
ที่คุณใช้จะกำหนดวิธีที่ Earth
Engine จัดการกับพิกเซลที่ทับซ้อนกัน Landsat 8 จะโคจรผ่านจุดเดียวกันบนโลกทุกๆ 16 วัน ซึ่งหมายความว่าในช่วง 6 เดือนจะมีรูปภาพประมาณ 12 รูป (และจะมีรูปภาพมากขึ้นในบริเวณที่ฉากทับซ้อนกัน) พิกเซลแต่ละพิกเซลบนแผนที่ได้มาจากกองพิกเซล
- พิกเซลหนึ่งจากแต่ละรูปภาพในคอลเล็กชันที่แสดง
การเพิ่มคอลเล็กชันลงในแผนที่จะส่งผลให้ระบบเลือกพิกเซลล่าสุด ซึ่งก็คือพิกเซลจากรูปภาพล่าสุดในกอง ลักษณะการทำงานนี้อาจเปลี่ยนแปลงได้โดยใช้ตัวลดของ Earth Engine ตัวอย่างเช่น แทนที่จะใช้พิกเซลล่าสุดจากกองซ้อน คุณสามารถสั่งให้ Earth Engine เลือกค่ามัธยฐานในกองซ้อนได้ ซึ่งมีประโยชน์ในการนำเมฆ (ซึ่งมีค่าสูง) และเงา (ซึ่งมีค่าต่ำ) ออก เมื่อลดคอลเล็กชันรูปภาพโดยใช้ตัวลดค่ามัธยฐาน ค่าคอมโพสิตคือค่ามัธยฐานในแต่ละแบนด์เมื่อเวลาผ่านไป เช่น การใช้ฉาก Landsat ในปี 2016
โปรแกรมแก้ไขโค้ด (JavaScript)
// Get the median over time, in each band, in each pixel. var median = l8.filterDate('2016-01-01', '2016-12-31').median(); // Make a handy variable of visualization parameters. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; // Display the median composite. Map.addLayer(median, visParams, 'median');
สิ่งใหม่ในโค้ดนี้คือmedian()
เมธอดที่ใช้กับคอลเล็กชันรูปภาพ
เช่นเดียวกับวิธีการกรอง นี่คือทางลัดสำหรับเมธอด reduce()
ทั่วไปในคอลเล็กชันรูปภาพซึ่งรับ ee.Reducer()
เป็นอาร์กิวเมนต์ ดูee.Reducer
แพ็กเกจในแท็บเอกสารของโปรแกรมแก้ไขโค้ด
เพื่อดูรายการตัวลดทั้งหมดของ Earth Engine เมื่อพิจารณาตัวลดสำหรับคอลเล็กชันรูปภาพ โปรดทราบว่าเอาต์พุตเป็นรูปภาพ ดังนั้นตัวลดที่มีเอาต์พุตที่ไม่ใช่ตัวเลข เช่น ตัวลด histogram
หรือ toList
จะใช้กับคอลเล็กชันรูปภาพไม่ได้

เมื่อซูมออกในค่ามัธยฐานแบบรวม คุณควรเห็นภาพคล้ายกับรูปที่ 6 ซึ่งควร ดูดีกว่าค่าผสมมูลค่าล่าสุดที่คุณสร้างไว้ก่อนหน้านี้อย่างมาก ในตอนนี้ เราควรย้อนกลับไปพิจารณาสิ่งที่ทำไปแล้วเพื่อสร้าง ค่ามัธยฐานแบบผสม Earth Engine ได้โหลดคอลเล็กชัน Landsat 8 ทั้งหมดใน สหรัฐอเมริกาภาคพื้นทวีป และคำนวณค่ามัธยฐานสำหรับทุกพิกเซล ซึ่งถือว่าเป็นข้อมูลปริมาณมหาศาลทีเดียว แน่นอนว่าคุณสามารถคำนวณค่ามัธยฐานรายปีได้โดยการกรองคอลเล็กชันก่อน ดังที่เคยทำ ประเด็นคือหากคุณต้องดาวน์โหลดภาพทั้งหมดนั้นและสร้างภาพคอมโพสิตนี้ ก็จะเป็น โปรเจ็กต์ขนาดใหญ่ Earth Engine ช่วยให้คุณได้รับผลลัพธ์ในไม่กี่วินาที
ดูข้อมูลเพิ่มเติมเกี่ยวกับการคอมโพสิตและการโมเสคที่นี่
การมาสก์
แม้ว่าค่ามัธยฐานแบบผสมจะดีกว่าค่าแบบผสมล่าสุด แต่คุณอาจต้องการมาสก์บางส่วนของรูปภาพ การมาสก์พิกเซลในรูปภาพจะทำให้พิกเซลเหล่านั้น
โปร่งใสและไม่รวมพิกเซลเหล่านั้นในการวิเคราะห์ พิกเซลแต่ละพิกเซลในแต่ละแถบของรูปภาพจะมี
มาสก์ ส่วนที่มีค่ามาสก์เป็น 0 หรือต่ำกว่าจะเป็นแบบโปร่งใส ส่วนที่มีมาสก์เป็น
ค่าใดก็ตามที่มากกว่า 0 จะได้รับการแสดงผล มาสก์ของรูปภาพจะตั้งค่าโดยใช้การเรียกใช้ เช่น
image1.mask(image2)
การเรียกนี้จะใช้ค่าของ image2
และ
ทำให้ค่าเหล่านั้นเป็นมาสก์ของ image1
พิกเซลใดๆ ใน image2
ที่มีค่าเป็น 0 จะทำให้โปร่งใสใน image1
เช่น สมมติว่าคุณต้องการมาสก์พิกเซลน้ำทั้งหมดในคอมโพสิตค่ามัธยฐาน คุณสร้างมาสก์น้ำได้โดยใช้ชุดข้อมูลที่อธิบายโดย Hansen et al. (2013) ซึ่งอยู่ใน แคตตาล็อกข้อมูล Earth Engine (ดูข้อมูลเพิ่มเติมเกี่ยวกับชุดข้อมูลของ Hansen และคณะได้ในบทแนะนำนี้) ในชุดข้อมูลนี้ น้ำมีค่า 2 ที่ดินมีค่า 1 และ "ไม่มีข้อมูล" มีค่า 0 ใช้ตรรกะเล็กน้อยเพื่อสร้างมาสก์ รูปภาพที่มีค่าเป็น 0 ในบริเวณที่ไม่มีพื้นดิน
โปรแกรมแก้ไขโค้ด (JavaScript)
// Load or import the Hansen et al. forest change dataset. var hansenImage = ee.Image('UMD/hansen/global_forest_change_2015'); // Select the land/water mask. var datamask = hansenImage.select('datamask'); // Create a binary mask. var mask = datamask.eq(1); // Update the composite mask with the water mask. var maskedComposite = median.updateMask(mask); Map.addLayer(maskedComposite, visParams, 'masked');
โค้ดนี้มีสิ่งใหม่ๆ 2-3 อย่างที่ควรกล่าวถึงโดยละเอียด ก่อนอื่น ฟังก์ชัน select()
มีประโยชน์ในการดึงแบนด์ที่สนใจจากรูปภาพ
ในที่นี้ เราจะเลือกเฉพาะแถบความถี่ที่เราสนใจ datamask
สิ่งใหม่ถัดไป
คือโอเปอเรเตอร์ทางตรรกะ eq()
ซึ่งหมายถึง "เท่ากับ" เราใช้
eq(1)
เพื่อสร้างรูปภาพไบนารีซึ่งพิกเซลทั้งหมดที่ไม่มีค่า
เป็น 1 ในแถบ datamask
(พิกเซลที่เป็นน้ำหรือไม่มีข้อมูล) จะมีค่า
เป็น 0 ในรูปภาพผลลัพธ์
การมาสก์นี้จะทำให้พิกเซลทั้งหมดในคอมโพสิตค่ามัธยฐานที่อยู่เหนือพื้นดิน
(ตามชุดข้อมูลของ Hansen
et al.) ปรากฏให้เห็น แต่พิกเซลที่อยู่เหนือน้ำ (หรือไม่มีข้อมูล) จะโปร่งใสและ
จะได้รับการยกเว้นจากการวิเคราะห์ใดๆ ที่คุณทำกับรูปภาพ maskedComposite
การต่อภาพ
การรวมแนวคิดของคอลเล็กชันรูปภาพ ตัวดำเนินการเชิงตรรกะ การมาสก์ และการคอมโพสิตจะช่วยให้คุณได้ผลลัพธ์ด้านแผนที่ที่น่าสนใจ เช่น สมมติว่า คุณต้องการรูปภาพที่พิกเซลของพื้นดินแสดงเป็นสีจริง และพิกเซลอื่นๆ ทั้งหมด แสดงเป็นสีน้ำเงิน คุณสามารถทำได้ดังนี้
โปรแกรมแก้ไขโค้ด (JavaScript)
// Make a water image out of the mask. var water = mask.not(); // Mask water with itself to mask all the zeros (non-water). water = water.mask(water); // Make an image collection of visualization images. var mosaic = ee.ImageCollection([ median.visualize(visParams), water.visualize({palette: '000044'}), ]).mosaic(); // Display the mosaic. Map.addLayer(mosaic, {}, 'custom mosaic');
โค้ดนั้นมีหลายอย่างเกิดขึ้น ดังนั้นเรามาวิเคราะห์กัน ก่อนอื่น เราจะใช้ตัวดำเนินการเชิงตรรกะ not()
เพื่อกลับหน้ากากที่เราสร้างไว้ก่อนหน้านี้ กล่าวคือ not()
จะเปลี่ยนเลขศูนย์ทั้งหมดเป็น 1 และเปลี่ยนตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดเป็น 0 การเรียกตัวแปรนั้นว่า water
ไม่ถูกต้องนักเนื่องจากมีพิกเซลที่ไม่มีข้อมูลรวมอยู่ด้วย แต่ก็ใช้ได้ในบริบทการทำแผนที่ปัจจุบัน ขั้นตอนถัดไปคือการมาสก์
"น้ำ" ด้วยตัวเอง ซึ่งจะทำให้ได้รูปภาพที่พิกเซลน้ำทั้งหมดเป็น 1 และ
ส่วนอื่นๆ ทั้งหมดจะถูกมาสก์ ขั้นตอนสุดท้ายคือการรวมรูปภาพด้วย
mosaic()
เนื่องจาก mosaic()
ทำงานกับคอลเล็กชันรูปภาพ เราจึงส่งรายการรูปภาพที่ต้องการรวมไว้ในตัวสร้างคอลเล็กชันรูปภาพ จากนั้นเรียกใช้ mosaic()
เป็นขั้นตอนสุดท้าย ลำดับของรูปภาพในรายการนั้นมีความสำคัญ
กล่าวคือ รูปภาพเอาต์พุตจะมีพิกเซลสุดท้ายที่ไม่ได้มาสก์จาก
กองรูปภาพในคอลเล็กชันอินพุต ในกรณีนี้ การดำเนินการดังกล่าวใช้ได้เนื่องจากเลเยอร์น้ำ
เป็นรูปภาพสุดท้าย (บนสุด) ในคอลเล็กชัน และมีเฉพาะพิกเซลที่ไม่ได้มาสก์ซึ่งมีน้ำ
โปรดทราบว่ารูปภาพในคอลเล็กชันคือรูปภาพการแสดงภาพ เมื่อคุณเรียกใช้
visualize()
ในรูปภาพ ระบบจะเปลี่ยนรูปภาพนั้นเป็นรูปภาพ 3 แถบ 8 บิตตามพารามิเตอร์การแสดงภาพ
ที่คุณส่ง พารามิเตอร์การแสดงภาพเริ่มต้นใช้ได้ดีกับรูปภาพ 3 แถบ
8 บิต คุณจึงไม่จำเป็นต้องใช้พารามิเตอร์การแสดงภาพเมื่อเพิ่มรูปภาพลงใน
แผนที่ ผลลัพธ์ควรมีลักษณะเหมือนรูปที่ 7

ในตอนนี้ คุณได้เห็นวิธีแสดงภาพคอลเล็กชันรูปภาพเป็นค่าล่าสุด วิธีการคอมโพสิตคอลเล็กชันรูปภาพโดยใช้ตัวลด และวิธีการสร้าง คอมโพสิตที่กำหนดเองโดยการมาสก์และโมเสกคอลเล็กชันรูปภาพ ในหน้าถัดไป ให้ดูวิธี เพิ่มดัชนีพืชพรรณในทุกรูปภาพในคอลเล็กชัน และใช้ดัชนีเพื่อสร้าง คอมโพสิต "พิกเซลที่เขียวที่สุด"