محاسبات با استفاده از تصاویر

اکنون که می دانید چگونه یک تصویر را بارگذاری و نمایش دهید، وقت آن است که یک محاسبات روی آن اعمال کنید. برای مثال، می‌توانید شیب زمین را با ارسال تصویر ارتفاع SRTM به روش slope بسته ee.Terrain محاسبه کنید.

ویرایشگر کد (جاوا اسکریپت)

// 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 ما،

ویرایشگر کد (جاوا اسکریپت)

// 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 تقسیم کنید، نتیجه آن را در π ضرب کنید و در نهایت گناه را بگیرید". شما می توانید با ترکیب روش ها به این روش، عملیات پیچیده ریاضی را روی تصاویر انجام دهید. برای مشاهده لیست کامل عملیات ریاضی، add() , subtract() , multiply() و غیره به Image docs مراجعه کنید.

Tutorial_api_04_sin.png
شکل 4. جنبه گناه از زمین.

آمار تصویری

دسته مفید دیگری از عملیات روی تصاویر شامل محاسبه آمار پیکسل در مناطق تصویر یا پوشش های شطرنجی-بردار است. برای محاسبه آمار در Earth Engine، از یک کاهنده که توسط کلاس‌های بسته ee.Reducer نشان داده شده است استفاده کنید. برای مثال، فرض کنید به میانگین ارتفاع در یک منطقه علاقه مند هستید. شما می توانید یک منطقه را با رسم چند ضلعی با استفاده از ابزار ترسیم هندسه تعریف کنید. برای ترسیم یک منطقه به صورت تعاملی، ابزار ترسیم چند ضلعی ( )، سپس یک چند ضلعی را در منطقه مورد نظر خود دیجیتالی کنید و پس از اتمام کار بر روی خروج کلیک کنید. توجه داشته باشید که شی حاصل ee.Geometry به طور خودکار geometry نامیده می شود و به عنوان یک import در بالای اسکریپت شما اضافه می شود. با کلیک بر روی نام متغیر در importها و تایپ نام جدید، آن متغیر را به 'polygon' تغییر نام دهید.

سپس با استفاده از کد زیر، مقدار میانگین پیکسل را در چند ضلعی بدست آورید:

ویرایشگر کد (جاوا اسکریپت)

// 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 است ( در مورد کاهش مناطق در اینجا بیشتر بیاموزید ). دوم، آرگومان های متد در یک شی جاوا اسکریپت ارائه می شوند که به عنوان یک آرگومان واحد ارسال می شود. (به طور خاص، کلیدهای شی نام پارامترهای متد هستند. مقادیر آرگومان های متد هستند). سوم، پارامتر reducer نوع آماری را که باید محاسبه شود و پارامتر geometry منطقه ای را که در آن آمار محاسبه می شود، مشخص می کند. پارامتر scale اندازه پیکسل در متر برای استفاده است. برای جلوگیری از ابهام، همیشه باید مقیاس را هنگام انجام کاهش ها مشخص کنید زیرا ممکن است Earth Engine نتواند به طور خودکار مقیاس مناسب را از ورودی ها تعیین کند. ( در مورد مقیاس در Earth Engine بیشتر بدانید ).

در نهایت، مقدار بازگشتی reduceRegion() یک فرهنگ لغت است که در آن کلیدها نام باندها و مقادیر آمار پیکسل برای باندها هستند. متد get() در دیکشنری مقدار مربوط به کلید ارائه شده به عنوان آرگومان را برمی گرداند. در این مورد، تصویر srtm دارای یک باند، 'elevation' است، بنابراین کد مثال آن آمار را از فرهنگ لغت دریافت می کند و آن را چاپ می کند.

وقتی این کد را اجرا می کنید، اگر با خطای زیر مواجه شدید:

نترس! چندین کار وجود دارد که می توانید برای رفع خطا انجام دهید. متد reduceRegion() یک بررسی دارد تا مطمئن شود که آیا واقعاً می خواهید پیکسل های زیادی را در محاسبات خود وارد کنید یا خیر. هدف از این کار، جلوگیری از انجام تصادفی کار احمقانه است، مانند تلاش برای محاسبه میانگین هر پیکسل یک متری در جهان (این کار را نکنید). برای رفع خطا، یا با افزودن bestEffort: true به فرهنگ لغت پارامترها، پارامتر bestEffort را روی true تنظیم کنید، یا پارامتر maxPixels را روی مقداری بالاتر از پیش فرض 10 میلیون پیکسل یا هر دو تنظیم کنید. اگر bestEffort درست باشد، Earth Engine به‌طور خودکار مقیاس را دوباره محاسبه می‌کند تا از maxPixels تجاوز نشود.

انحراف: مقیاس در موتور زمین

در مثال قبلی، scale تقریباً روی وضوح اصلی تصویر SRTM تنظیم شده است. می توانید وضوح تصویر اصلی را با موارد زیر کشف کنید:

ویرایشگر کد (جاوا اسکریپت)

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

اگر مقیاسی کوچک‌تر از وضوح اصلی مشخص کنید، Earth Engine با خوشحالی تصویر ورودی را با استفاده از نزدیک‌ترین همسایه نمونه‌برداری می‌کند، سپس تمام پیکسل‌های کوچک‌تر را در محاسبه لحاظ می‌کند. اگر مقیاس را بزرگ‌تر تنظیم کنید، Earth Engine از پیکسل‌های ورودی نسخه‌ای از ورودی استفاده می‌کند (یعنی پیکسل‌ها را از سطح بالاتری از هرم تصویر دریافت کنید). در این سند، درباره نحوه کنترل مقیاس Earth Engine بیشتر بدانید.

تا کنون، شما با یک تصویر واحد با یک باند کار کرده اید. در صفحه بعد، با تصاویر چند باندی و مجموعه تصاویر آشنا خواهید شد.