مجموعه‌های تصاویر

مجموعه تصاویر به مجموعه‌ای از تصاویر Earth Engine اشاره دارد. برای مثال، مجموعه همه تصاویر Landsat 8 یک ee.ImageCollection است. مانند تصویر SRTM که با آن کار می‌کردید، مجموعه‌های تصویر نیز دارای شناسه هستند. همانند تصاویر تکی، می‌توانید شناسه مجموعه تصویر را با جستجو در کاتالوگ داده Earth Engine از «ویرایشگر کد» و نگاه کردن به صفحه جزئیات مجموعه داده پیدا کنید. برای مثال، «landsat 8 toa» را جستجو کنید و روی اولین نتیجه کلیک کنید که باید با مجموعه داده USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance مطابقت داشته باشد. یا آن مجموعه داده را بااستفاده از دکمه وارد کردن وارد کنید و نام آن را به l8 تغییر دهید، یا شناسه را در سازنده مجموعه تصویر کپی کنید:

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

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

درحال فیلتر کردن مجموعه‌های تصاویر

شایان ذکر است که این مجموعه نشان‌دهنده هر صحنه Landsat 8 جمع‌آوری‌شده، در سراسر زمین است. اغلب استخراج یک تصویر یا زیرمجموعه‌ای از تصاویر برای آزمایش الگوریتم‌ها مفید است. راه محدود کردن مجموعه براساس زمان یا مکان، فیلتر کردن آن است. برای مثال، برای فیلتر کردن مجموعه به تصاویری که مکان خاصی را پوشش می‌دهند، ابتدا بااستفاده از ابزارهای ترسیم هندسی، منطقه موردنظرتان را با نقطه (یا خط یا چندضلعی) تعریف کنید. به منطقه موردنظرتان بروید، نشانگر را روی وارد کردن هندسه نگه دارید (اگر ازقبل یک یا چند هندسه تعریف کرده‌اید) و روی +لایه جدید کلیک کنید (اگر هیچ موردی برای وارد کردن ندارید، به مرحله بعدی بروید). ابزار طراحی نقطه () را دریافت کنید و نقطه‌ای در منطقه موردعلاقه‌تان ایجاد کنید. نام واردات point. اکنون، مجموعه l8 را فیلتر کنید تا فقط تصاویری را که با نقطه تلاقی دارند دریافت کنید، سپس فیلتر دومی اضافه کنید تا مجموعه را فقط به تصاویری که در سال ۲۰۱۵ به‌دست آمده‌اند محدود کنید:

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

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

در اینجا، filterBounds() و filterDate() روش‌های میان‌بر برای روش عمومی‌تر filter() در مجموعه‌های تصویر هستند که ee.Filter() را به‌عنوان آرگومان خود می‌گیرد. برای کسب اطلاعات بیشتر درباره این روش‌ها، برگه اسناد را در «ویرایشگر کد» کاوش کنید. متغیر مستقل ورودی به filterBounds() نقطه‌ای است که دیجیتالی کرده‌اید و متغیرهای مستقل ورودی به filterDate() دو تاریخ هستند، که به‌صورت رشته بیان شده‌اند.

توجه داشته باشید که می‌توانید مجموعه‌های فیلترشده را print() کنید. نمی‌توانید بیش‌از ۵۰۰۰ مورد را به‌طور هم‌زمان چاپ کنید، بنابراین نمی‌توانید، برای مثال، کل مجموعه l8 را چاپ کنید. پس‌از اجرای روش print()، می‌توانید مجموعه‌های چاپ‌شده را در کنسول بررسی کنید. توجه داشته باشید که وقتی ImageCollection را بااستفاده از دکمه باز کردن () باز می‌کنید، سپس فهرست features را باز می‌کنید، فهرستی از تصاویر را خواهید دید که هرکدام از آن‌ها را نیز می‌توانید باز و بازرسی کنید. این یکی از راه‌های پیدا کردن شناسه یک تصویر است. روش برنامه‌نویسی‌تر دیگری برای دریافت تصاویر تکی برای تجزیه‌وتحلیل، مرتب‌سازی مجموعه برای دریافت جدیدترین، قدیمی‌ترین، یا بهینه‌ترین تصویر نسبت به برخی‌از ویژگی‌های فراداده است. برای مثال، با بررسی اشیای تصویر در مجموعه‌های تصویر چاپ‌شده، ممکن است ویژگی فراداده‌ای به‌نام CLOUD_COVER را مشاهده کرده باشید. می‌توانید از آن ویژگی برای دریافت تصویری با کمترین میزان ابر در سال ۲۰۱۵ در منطقه موردنظرتان استفاده کنید:

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

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

اکنون آماده نمایش تصویر هستید!

انحراف: نمایش تصاویر RGB

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

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

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

توجه داشته باشید که ابتدا نقشه روی تصویر در مقیاس بزرگ‌نمایی ۹ متمرکز می‌شود. سپس تصویر با شیء خالی ({}) برای پارامتر visParams نمایش داده می‌شود (برای جزئیات، به اسناد Map.addLayer() مراجعه کنید). درنتیجه، تصویر با تجسم پیش‌فرض نمایش داده می‌شود: سه باند اول به‌ترتیب به R،‏ G،‏ B نگاشت می‌شوند و به [0, 1] کشیده می‌شوند زیرا باندها از نوع داده float هستند. این یعنی باند هواپخش ساحلی («B1») به رنگ قرمز، باند آبی («B2») به رنگ سبز، و باند سبز («B3») به رنگ آبی رندر می‌شود. برای رندر کردن تصویر به‌عنوان ترکیب رنگ واقعی، باید به Earth Engine بگویید که از باندهای Landsat 8 «B4»،‏ «B3»، و «B2» به‌ترتیب برای R،‏ G، و B استفاده کند. بااستفاده از ویژگی bands شیء visParams، مشخص کنید از کدام باندها استفاده شود. درباره باندهای Landsat در این مرجع بیشتر بدانید.

همچنین باید مقادیر min و max مناسب برای نمایش بازتاب از اهداف معمول سطح زمین را ارائه دهید. اگرچه می‌توان از فهرست‌ها برای مشخص کردن مقادیر مختلف برای هر باند استفاده کرد، اما در اینجا کافی است 0.3 را به‌عنوان max مشخص کنید و از مقدار پیش‌فرض صفر برای پارامتر min استفاده کنید. ترکیب پارامترهای تجسم در یک شیء و نمایش:

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

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

نتیجه باید چیزی شبیه به شکل ۵ باشد. توجه داشته باشید که این کد شیء پارامترهای مرئی‌سازی را به متغیری برای استفاده احتمالی در آینده اختصاص می‌دهد. همان‌طور که به‌زودی متوجه خواهید شد، این شیء هنگام تجسم مجموعه‌های تصویر مفید خواهد بود!

Tutorial_api_05_true_color.png
شکل ۵. تصویر بازتاب TOA از Landsat 8 به‌عنوان ترکیب رنگ واقعی، کشیده‌شده به [0, 0.3].

با تجسم باندهای مختلف بازی کنید. ترکیب محبوب دیگر «B5»،‏ «B4»، و «B3» است که ترکیب رنگ کاذب نامیده می‌شود. برخی‌از ترکیب‌های رنگ کاذب جالب دیگر در اینجا شرح داده شده است.

ازآنجاکه Earth Engine برای انجام تحلیل‌های مقیاس بزرگ طراحی شده است، شما محدود به کار کردن با فقط یک صحنه نیستید. اکنون زمان آن رسیده است که کل مجموعه را به‌عنوان ترکیب RGB نمایش دهید!

درحال نمایش مجموعه تصاویر

افزودن مجموعه تصویر به نقشه مشابه افزودن تصویر به نقشه است. برای مثال، بااستفاده از تصاویر ۲۰۱۶ در مجموعه l8 وvisParams شیء تعریف‌شده قبلی،

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

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');

توجه داشته باشید که اکنون می‌توانید کوچک‌نمایی کنید و موزاییک پیوسته‌ای را ببینید که تصاویر Landsat در آن جمع‌آوری شده است (یعنی روی زمین). همچنین توجه داشته باشید که وقتی از برگه بازرس استفاده می‌کنید و روی تصویر کلیک می‌کنید، فهرستی از مقادیر پیکسل (یا نمودار) را در بخش پیکسل‌ها و فهرستی از اشیای تصویر را در بخش اشیا بازرس خواهید دید.

اگر به‌اندازه کافی نمای دور را انتخاب کرده باشید، احتمالاً متوجه چند ابر در موزاییک شده‌اید. وقتی ImageCollection را به نقشه اضافه می‌کنید، به‌عنوان ترکیبی از مقدار اخیر نمایش داده می‌شود، یعنی فقط جدیدترین پیکسل‌ها نمایش داده می‌شوند (مثل فراخوانی mosaic() در مجموعه). به همین دلیل است که ممکن است بین مسیرهایی که در زمان‌های مختلف گرفته شده‌اند، ناپیوستگی ببینید. به همین دلیل است که بسیاری از مناطق ممکن است ابری به‌نظر برسند. در صفحه بعد، با نحوه تغییر دادن روش ترکیب تصاویر آشنا شوید تا از شر آن ابرهای مزاحم خلاص شوید!