สถิติของภูมิภาครูปภาพ

reduceRegion

หากต้องการดูสถิติของค่าพิกเซลในภูมิภาคของ ee.Image ให้ใช้ image.reduceRegion() ซึ่งจะลดพิกเซลทั้งหมดในภูมิภาคเป็นสถิติหรือการนําเสนอข้อมูลพิกเซลในภูมิภาคแบบกะทัดรัดอื่นๆ (เช่น ฮิสโตแกรม) ภูมิภาคจะแสดงเป็น Geometry ซึ่งอาจเป็นรูปหลายเหลี่ยมที่มีหลายพิกเซล หรืออาจเป็นจุดเดียว ซึ่งในกรณีนี้จะมีเพียงพิกเซลเดียวในภูมิภาค ไม่ว่าในกรณีใด ผลลัพธ์ที่ได้จะเป็นสถิติที่มาจากพิกเซลในภูมิภาคนั้นๆ ดังที่แสดงในรูปที่ 1

แผนภาพ reduceRegion
รูปที่ 1 ภาพ ee.Reducer ที่นำไปใช้ในรูปภาพและภูมิภาค

ตัวอย่างการหาสถิติพิกเซลในภูมิภาคของรูปภาพโดยใช้ reduceRegion() คือลองหาค่าสเปกตรัมเฉลี่ยของภาพรวม Landsat 5 ปีภายในขอบเขตของป่าสน Sierra Nevada (แสดงในรูปที่ 2)

// Load input imagery: Landsat 7 5-year composite.
var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');

// Load an input region: Sierra Nevada.
var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3')
  .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada'))
  .first());

// Reduce the region. The region parameter is the Feature geometry.
var meanDictionary = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  scale: 30,
  maxPixels: 1e9
});

// The result is a Dictionary.  Print it.
print(meanDictionary);

หากต้องการบังคับให้คำนวณ ให้พิมพ์ผลลัพธ์ ซึ่งเครื่องมือแก้ไขโค้ดจะแสดงเป็น Dictionary ในคอนโซล เอาต์พุตควรมีลักษณะดังนี้

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
แผนภาพ reduceRegion
รูปที่ 2 ภาพสีผสมของข้อมูลภาพ Landsat สำหรับแคลิฟอร์เนียและเนวาดา ภูมิภาคที่จะลดจะแสดงเป็นสีขาว

โปรดทราบว่าในตัวอย่างนี้จะมีการระบุการลดขนาดโดยระบุ reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 เมตร) และ maxPixels สำหรับจำนวนพิกเซลสูงสุดที่จะป้อนไปยังตัวลดขนาด คุณควรระบุรูปแบบเสมอในreduceRegion() เนื่องจากในขั้นตอนการประมวลผลที่ซับซ้อน ซึ่งอาจเกี่ยวข้องกับข้อมูลจากแหล่งที่มาต่างๆ ที่มีสเกลต่างกัน สเกลของเอาต์พุตจะกำหนดจากอินพุตอย่างไม่แน่ชัด ในกรณีนี้ รูปแบบเริ่มต้นของมาตราส่วนจะเป็น 1 องศา ซึ่งโดยทั่วไปจะให้ผลลัพธ์ที่ไม่เป็นที่พอใจ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Earth Engine จัดการมาตราส่วนได้ที่หน้านี้

การตั้งค่ามาตราส่วนทำได้ 2 วิธี ได้แก่ โดยการระบุพารามิเตอร์ scale หรือโดยการระบุ CRS และการเปลี่ยนรูปแบบ CRS (ดูข้อมูลเพิ่มเติมเกี่ยวกับ CRS และการเปลี่ยนรูปแบบ CRS ได้ที่อภิธานศัพท์) ตัวอย่างเช่น การลดmeanDictionary (ด้านบน) เทียบเท่ากับค่าต่อไปนี้

// As an alternative to specifying scale, specify a CRS and a CRS transform.
// Make this array by constructing a 4326 projection at 30 meters,
// then copying the bounds of the composite, from composite.projection().
var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563];

// Perform the reduction, print the result.
print(image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  crs: 'EPSG:4326',
  crsTransform: affine,
  maxPixels: 1e9
}));

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

พิกเซลในภูมิภาค

ระบบจะพิจารณาว่าพิกเซลอยู่ในภูมิภาค (และถ่วงน้ำหนัก) ตามกฎต่อไปนี้ ซึ่งใช้กับมาตราส่วนและการฉายที่ระบุ

  • ตัวลดที่ไม่ถ่วงน้ำหนัก (เช่น ee.Reducer.count() หรือ ee.Reducer.mean().unweighted()): ระบบจะรวมพิกเซลหากจุดศูนย์กลางของพิกเซลนั้นอยู่ในขอบเขต และหน้ากากของรูปภาพไม่ใช่ 0
  • ตัวลดที่มีน้ำหนัก (เช่น ee.Reducer.mean()): ระบบจะรวมพิกเซลไว้ด้วยหากมีอย่างน้อย (โดยประมาณ) 0.5% ของพิกเซลอยู่ในภูมิภาคนั้น และหน้ากากของรูปภาพไม่ใช่ 0 น้ำหนักของพิกเซลคือค่าต่ำสุดของหน้ากากของรูปภาพและเศษ (โดยประมาณ) ของพิกเซลที่ภูมิภาคนั้นครอบคลุม

ต้องมีพารามิเตอร์ maxPixels เพื่อให้การคํานวณสําเร็จ หากไม่ใส่พารามิเตอร์นี้ในตัวอย่าง ระบบจะแสดงข้อผิดพลาดดังตัวอย่างต่อไปนี้

มีหลายวิธีในการแก้ไขข้อผิดพลาดเหล่านี้ เช่น เพิ่ม maxPixels ดังที่แสดงในตัวอย่าง เพิ่ม scale หรือตั้งค่า bestEffort เป็น "จริง" ซึ่งจะคํานวณขนาดใหม่ (ใหญ่ขึ้น) โดยอัตโนมัติเพื่อไม่ให้เกิน maxPixels หากคุณไม่ได้ระบุ maxPixels ระบบจะใช้ค่าเริ่มต้น