คุณสามารถทําการคํานวณทางคณิตศาสตร์ของรูปภาพได้โดยใช้โอเปอเรเตอร์ เช่น add()
และ subtract()
แต่สําหรับการคํานวณที่ซับซ้อนซึ่งมีมากกว่า 2 รายการ ฟังก์ชัน expression()
จะเป็นทางเลือกที่ดี ดูข้อมูลเพิ่มเติมเกี่ยวกับโอเปอเรเตอร์และนิพจน์ได้ที่ส่วนต่อไปนี้
โอเปอเรเตอร์
โอเปอเรเตอร์ทางคณิตศาสตร์จะดำเนินการทางคณิตศาสตร์พื้นฐานกับแถบรูปภาพ โดยรับอินพุต 2 รายการ ได้แก่ รูปภาพ 2 รูปหรือรูปภาพ 1 รูปและเทอมคงที่ ซึ่งจะตีความว่าเป็นรูปภาพคงที่ย่านความถี่เดียวที่ไม่มีพิกเซลที่มีการมาสก์ ระบบจะดำเนินการต่อพิกเซลสำหรับแต่ละย่านความถี่
ตัวอย่างพื้นฐานคือ พิจารณางานการคำนวณดัชนีความแตกต่างของพืช (NDVI) ที่ปรับมาตรฐานแล้วโดยใช้ภาพ VIIRS ซึ่งใช้โอเปอเรเตอร์ add()
, subtract()
และ divide()
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load a VIIRS 8-day surface reflectance composite for May 2024. var viirs202405 = ee.ImageCollection('NASA/VIIRS/002/VNP09H1').filter( ee.Filter.date('2024-05-01', '2024-05-16')).first(); // Compute NDVI. var ndvi202405 = viirs202405.select('SurfReflect_I2') .subtract(viirs202405.select('SurfReflect_I1')) .divide(viirs202405.select('SurfReflect_I2') .add(viirs202405.select('SurfReflect_I1')));
import ee import geemap.core as geemap
Colab (Python)
# Load a VIIRS 8-day surface reflectance composite for May 2024. viirs202405 = ( ee.ImageCollection('NASA/VIIRS/002/VNP09H1') .filter(ee.Filter.date('2024-05-01', '2024-05-16')) .first() ) # Compute NDVI. ndvi202405 = ( viirs202405.select('SurfReflect_I2') .subtract(viirs202405.select('SurfReflect_I1')) .divide( viirs202405.select('SurfReflect_I2').add( viirs202405.select('SurfReflect_I1') ) ) )
ระบบจะพิจารณาเฉพาะจุดตัดของพิกเซลที่ไม่มีการมาสก์ระหว่างอินพุต 2 รายการและแสดงผลแบบไม่มาสก์ ส่วนที่เหลือทั้งหมดจะได้รับการมาสก์ โดยทั่วไป หากอินพุตใดอินพุตหนึ่งมีเพียงย่านความถี่เดียว ระบบจะใช้ย่านความถี่นั้นกับย่านความถี่ทั้งหมดในอินพุตอีกรายการ หากอินพุตมีจำนวนแถบเท่ากัน แต่ชื่อไม่เหมือนกัน ระบบจะใช้อินพุตคู่กันตามลําดับตามปกติ แถบเอาต์พุตจะตั้งชื่อตามอินพุตที่ยาวกว่า หรือหากมีความยาวเท่ากัน ก็จะตั้งชื่อตามลําดับของอินพุตแรก ประเภทของพิกเซลเอาต์พุตคือสหพันธ์ของประเภทอินพุต
ตัวอย่างต่อไปนี้ของการลบภาพหลายย่านความถี่แสดงให้เห็นวิธีจับคู่ย่านความถี่โดยอัตโนมัติ ซึ่งจะทำให้เกิด "เวกเตอร์การเปลี่ยนแปลง" สําหรับแต่ละพิกเซลของย่านความถี่ที่ปรากฏร่วมกันแต่ละย่าน
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load a VIIRS 8-day surface reflectance composite for September 2024. var viirs202409 = ee.ImageCollection('NASA/VIIRS/002/VNP09H1').filter( ee.Filter.date('2024-09-01', '2024-09-16')).first(); // Compute multi-band difference between the September composite and the // previously loaded May composite. var diff = viirs202409.subtract(ndvi202405); Map.addLayer(diff, { bands: ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'], min: -1, max: 1 }, 'difference'); // Compute the squared difference in each band. var squaredDifference = diff.pow(2); Map.addLayer(squaredDifference, { bands: ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'], min: 0, max: 0.7 }, 'squared diff.');
import ee import geemap.core as geemap
Colab (Python)
# Load a VIIRS 8-day surface reflectance composite for September 2024. viirs202409 = ( ee.ImageCollection('NASA/VIIRS/002/VNP09H1') .filter(ee.Filter.date('2024-09-01', '2024-09-16')) .first() ) # Compute multi-band difference between the September composite and the # previously loaded May composite. diff = viirs202409.subtract(ndvi202405) m = geemap.Map() m.add_layer( diff, { 'bands': ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'], 'min': -1, 'max': 1, }, 'difference', ) # Compute the squared difference in each band. squared_difference = diff.pow(2) m.add_layer( squared_difference, { 'bands': ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'], 'min': 0, 'max': 0.7, }, 'squared diff.', ) display(m)
ในส่วนที่ 2 ของตัวอย่างนี้ ระบบจะคํานวณผลต่างของค่ายกกำลัง 2 โดยใช้ image.pow(2)
ดูรายการโอเปอเรเตอร์ทางคณิตศาสตร์ทั้งหมดที่จัดการการดำเนินการทางคณิตศาสตร์พื้นฐาน ตรีโกณมิติ การยกกำลัง การปัดเศษ การแคสต์ การดำเนินการแบบบิต และอื่นๆ ได้ที่เอกสารประกอบ API
นิพจน์
หากต้องการใช้นิพจน์ทางคณิตศาสตร์ที่ซับซ้อนมากขึ้น ให้ลองใช้ image.expression()
ซึ่งจะแยกวิเคราะห์การนําเสนอข้อความของการดำเนินการทางคณิตศาสตร์
ตัวอย่างต่อไปนี้ใช้ expression()
เพื่อคํานวณดัชนีความอุดมสมบูรณ์ของพืช (Enhanced Vegetation Index หรือ EVI)
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load a Landsat 8 image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Compute the EVI using an expression. var evi = image.expression( '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', { 'NIR': image.select('B5'), 'RED': image.select('B4'), 'BLUE': image.select('B2') }); Map.centerObject(image, 9); Map.addLayer(evi, {min: -1, max: 1, palette: ['a6611a', 'f5f5f5', '4dac26']});
import ee import geemap.core as geemap
Colab (Python)
# Load a Landsat 8 image. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') # Compute the EVI using an expression. evi = image.expression( '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', { 'NIR': image.select('B5'), 'RED': image.select('B4'), 'BLUE': image.select('B2'), }, ) # Define a map centered on San Francisco Bay. map_evi = geemap.Map(center=[37.4675, -122.1363], zoom=9) # Add the image layer to the map and display it. map_evi.add_layer( evi, {'min': -1, 'max': 1, 'palette': ['a6611a', 'f5f5f5', '4dac26']}, 'evi' ) display(map_evi)
โปรดทราบว่าอาร์กิวเมนต์แรกสำหรับ expression()
คือการแสดงผลแบบข้อความของการดำเนินการทางคณิตศาสตร์ ส่วนอาร์กิวเมนต์ที่ 2 คือพจนานุกรมที่มีคีย์เป็นชื่อตัวแปรที่ใช้ในนิพจน์ และค่าคือแถบรูปภาพที่ควรจับคู่กับตัวแปร แถบในรูปภาพอาจเรียกว่า b("band name")
หรือ b(index)
เช่น b(0)
แทนที่จะระบุพจนานุกรม คุณกำหนดแถบจากรูปภาพอื่นที่ไม่ใช่อินพุตได้เมื่อใช้พจนานุกรมการแมปแถบ โปรดทราบว่า expression()
ใช้ "การหารแบบปัดเศษลง" ซึ่งจะทิ้งเศษและแสดงผลจำนวนเต็มเมื่อมีการหารจำนวนเต็ม 2 จำนวน เช่น
10 / 20 = 0
หากต้องการเปลี่ยนลักษณะการทำงานนี้ ให้คูณหนึ่งในออบเจ็กต์โดย 1.0
: 10 * 1.0 / 20 = 0.5
ระบบจะพิจารณาเฉพาะจุดตัดของพิกเซลที่ไม่มีการมาสก์และแสดงผลแบบไม่มาสก์เมื่อประเมินแถบจากรูปภาพต้นทางมากกว่า 1 รูป โอเปอเรเตอร์นิพจน์ที่รองรับแสดงอยู่ในตารางต่อไปนี้
ประเภท | สัญลักษณ์ | ชื่อ |
---|---|---|
การดำเนินการทางคณิตศาสตร์ | + - * / % ** | บวก ลบ คูณ หาร มอดุลัส เลขยกกำลัง |
เชิงสัมพันธ์ | == != < > <= >= | เท่ากับ ไม่เท่ากับ น้อยกว่า มากกว่า ฯลฯ |
ตรรกะ | && || ! ^ | And, Or, Not, Xor |
Ternary | ? : | เงื่อนไข if then else |