การคำนวณโดยใช้รูปภาพ

เมื่อทราบวิธีโหลดและแสดงรูปภาพแล้ว ก็ได้เวลาใช้การคำนวณกับรูปภาพนั้น เช่น คุณสามารถคำนวณความชันของภูมิประเทศได้โดยส่งรูปภาพระดับความสูง SRTM ไปยังเมธอด slope ของแพ็กเกจ ee.Terrain

โปรแกรมแก้ไขโค้ด (JavaScript)

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

โปรดทราบว่าในโค้ด ee.Terrain.slope(srtm) รูปภาพ srtm จะ ระบุเป็นอาร์กิวเมนต์ของอัลกอริทึมความชัน ผลลัพธ์ควรมีลักษณะคล้ายกับ รูปที่ 3

Tutorial_api_03_slope.png
รูปที่ 3 รูปภาพความชัน

การคำนวณรูปภาพ

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

โปรแกรมแก้ไขโค้ด (JavaScript)

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

ผลลัพธ์ควรมีลักษณะคล้ายกับรูปที่ 4 คุณควรพิจารณา aspect.divide(180).multiply(Math.PI).sin() โค้ดอย่างละเอียด การเชื่อมโยงหลายๆ วิธี เช่นนี้ โค้ดจะบอกว่า "หารสัดส่วนด้วย 180 คูณผลลัพธ์ด้วย π และสุดท้ายให้ใช้ sin" คุณสามารถดำเนินการทางคณิตศาสตร์ที่ซับซ้อนกับรูปภาพได้โดยการรวมวิธีการในลักษณะนี้ ดูรายการการดำเนินการทางคณิตศาสตร์ทั้งหมด add(), subtract(), multiply() ฯลฯ ได้ใน เอกสาร Image

Tutorial_api_04_sin.png
รูปที่ 4 ความผิดพลาดของลักษณะภูมิประเทศ

สถิติรูปภาพ

การดำเนินการอีกประเภทหนึ่งที่มีประโยชน์กับรูปภาพคือการคำนวณสถิติของพิกเซลใน ภูมิภาคของรูปภาพ หรือการซ้อนทับแบบราสเตอร์กับเวกเตอร์ หากต้องการคำนวณสถิติใน Earth Engine ให้ใช้ Reducer ตามที่แสดงโดยคลาสในแพ็กเกจ ee.Reducer ตัวอย่างเช่น สมมติว่า คุณสนใจค่าเฉลี่ยของระดับความสูงในบางภูมิภาค คุณกำหนดภูมิภาคได้โดย วาดรูปหลายเหลี่ยมโดยใช้เครื่องมือวาดรูปทรงเรขาคณิต หากต้องการวาดภูมิภาคแบบอินเทอร์แอกทีฟ ให้รับเครื่องมือวาดรูปหลายเหลี่ยม () แล้วแปลงรูปหลายเหลี่ยมเป็นดิจิทัลเหนือ พื้นที่ที่สนใจ แล้วคลิกออกเมื่อเสร็จสิ้น โปรดทราบว่าระบบจะตั้งชื่อออบเจ็กต์ ee.Geometryที่ได้ว่า geometry และเพิ่ม เป็นการนำเข้าที่ด้านบนของสคริปต์โดยอัตโนมัติ เปลี่ยนชื่อตัวแปรเป็น "polygon" โดยคลิก ที่ชื่อตัวแปรในการนำเข้า แล้วพิมพ์ชื่อใหม่

จากนั้นรับค่าพิกเซลเฉลี่ยในรูปหลายเหลี่ยมโดยใช้โค้ดต่อไปนี้

โปรแกรมแก้ไขโค้ด (JavaScript)

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

สิ่งที่ควรทราบมีดังนี้ ก่อนอื่น โปรดสังเกตว่า reduceRegion() เป็น เมธอดที่ใช้ได้กับออบเจ็กต์ Image (ดูข้อมูลเพิ่มเติม เกี่ยวกับการลดภูมิภาคที่นี่) ประการที่ 2 อาร์กิวเมนต์ของเมธอดจะระบุไว้ใน ออบเจ็กต์ JavaScript ที่ส่งเป็นอาร์กิวเมนต์เดียว (กล่าวคือ คีย์ของออบเจ็กต์คือชื่อพารามิเตอร์ของเมธอด ค่าคืออาร์กิวเมนต์ของเมธอด ) ประการที่สาม พารามิเตอร์ reducer จะระบุประเภทสถิติที่จะ คํานวณ และพารามิเตอร์ geometry จะระบุภูมิภาคที่จะคํานวณ สถิติ พารามิเตอร์ scale คือขนาดพิกเซลในหน่วยเมตรที่จะใช้ หากต้องการ หลีกเลี่ยงความคลุมเครือ คุณควรกำหนดสเกลเสมอเมื่อทำการลดค่า เนื่องจาก Earth Engine อาจไม่สามารถกำหนดสเกลที่เหมาะสมจากอินพุตได้โดยอัตโนมัติ (ดูข้อมูลเพิ่มเติมเกี่ยวกับสเกลใน Earth Engine)

สุดท้าย ค่าที่ส่งคืนของ reduceRegion() คือพจนานุกรม ซึ่งคีย์คือชื่อแถบความถี่ และค่าคือสถิติพิกเซลสำหรับแถบความถี่ เมธอด get() ในพจนานุกรมจะแสดงค่าที่สอดคล้องกับคีย์ ที่ระบุเป็นอาร์กิวเมนต์ ในกรณีนี้ srtm รูปภาพมีแถบ 1 แถบ "elevation" ดังนั้นโค้ดตัวอย่างจึงรับสถิตินั้นจากพจนานุกรมและพิมพ์ออกมา

เมื่อเรียกใช้โค้ดนี้ หากได้รับข้อผิดพลาดที่มีลักษณะดังนี้

ก็ไม่ต้องกังวลไป คุณแก้ไขข้อผิดพลาดได้ด้วยวิธีต่างๆ ดังนี้ เมธอด reduceRegion() มีการตรวจสอบเพื่อให้แน่ใจว่าคุณได้พิจารณาแล้วว่าต้องการรวมพิกเซลจำนวนมากในการคำนวณจริงหรือไม่ ซึ่งมีจุดประสงค์เพื่อป้องกัน ไม่ให้คุณทำสิ่งที่ไม่ควรทำโดยไม่ตั้งใจ เช่น พยายามคำนวณค่าเฉลี่ยของทุก พิกเซลขนาด 1 เมตรในโลก (อย่าทำ) หากต้องการแก้ไขข้อผิดพลาด ให้ตั้งค่าพารามิเตอร์ bestEffort เป็น true โดยเพิ่ม bestEffort: true ลงในพจนานุกรมของพารามิเตอร์ หรือตั้งค่าพารามิเตอร์ maxPixels เป็นค่า ที่สูงกว่าค่าเริ่มต้น 10 ล้านพิกเซล หรือทั้ง 2 อย่าง หาก bestEffort เป็น จริง Earth Engine จะคำนวณมาตราส่วนใหม่โดยอัตโนมัติเพื่อให้ maxPixels ไม่เกิน

นอกเรื่อง: ขนาดใน Earth Engine

ในตัวอย่างก่อนหน้า scale จะตั้งค่าเป็นความละเอียดดั้งเดิมโดยประมาณ ของรูปภาพ SRTM คุณดูความละเอียดดั้งเดิมของรูปภาพได้โดยทำดังนี้

โปรแกรมแก้ไขโค้ด (JavaScript)

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

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

ที่ผ่านมา คุณทำงานกับรูปภาพเดียวที่มีแถบเดียว ในหน้าถัดไป คุณจะ ได้เรียนรู้เกี่ยวกับรูปภาพหลายแถบความถี่และคอลเล็กชันรูปภาพ