ترکیب، پوشش و موزاییک

با بارگذاری مجموعه بازتابی Landsat 8 TOA در متغیری به نام l8 ، مشاهده کردید که کد زیر منجر به یک ترکیب با مقدار اخیر می شود:

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

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

یکی از مشکلات این کامپوزیت این است که پر از ابر است. به جای گرفتن آخرین پیکسل مجموعه (وقتی مجموعه ای را به نقشه اضافه می کنید، Earth Engine به طور ضمنی mosaic() روی آن فراخوانی می کند)، می توانید ImageCollection کاهش دهید ( درباره کاهش مجموعه های تصاویر بیشتر بدانید ).

ترکیب با کاهنده ها

شما برای اولین بار با کاهش دهنده هایی برای دریافت آمار در یک منطقه تصویر آشنا شدید. این یک کاهش فضایی بود. کاهش یک مجموعه تصویر به یک تصویر یک کاهش زمانی است زمانی که مجموعه تصاویر را در طول زمان نشان می دهد. نوع Reducer که استفاده می‌کنید مشخص می‌کند که Earth Engine چگونه پیکسل‌های همپوشانی را کنترل می‌کند. لندست 8 هر 16 روز از یک نقطه روی زمین بازدید می کند. این بدان معناست که در یک دوره 6 ماهه، تقریباً 12 تصویر (و بیشتر در جایی که صحنه ها با هم تداخل دارند) وجود خواهد داشت. هر پیکسل روی نقشه از یک پشته پیکسل مشتق شده است - یکی از هر تصویر در مجموعه نمایش داده می شود.

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

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

// Get the median over time, in each band, in each pixel.
var median = l8.filterDate('2016-01-01', '2016-12-31').median();

// Make a handy variable of visualization parameters.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.
Map.addLayer(median, visParams, 'median');

نکته جدید در این کد، متد median() است که برای یک مجموعه تصویر اعمال می شود. مانند روش های فیلتر کردن، این یک میانبر برای متد reduce() عمومی تر در مجموعه های تصویری است که یک ee.Reducer() را به عنوان آرگومان می گیرد. بسته ee.Reducer را در برگه Docs در ویرایشگر کد مشاهده کنید تا لیستی از تمام کاهنده های Earth Engine را ببینید. هنگام در نظر گرفتن یک کاهنده برای مجموعه تصویر، توجه داشته باشید که خروجی یک تصویر است، بنابراین کاهنده هایی با خروجی های غیر عددی، به عنوان مثال کاهنده های histogram یا toList ، با مجموعه تصویر کار نمی کنند.

Tutorial_api_06_median_composite
شکل 6. کامپوزیت میانه لندست 8.

وقتی روی کامپوزیت میانه بزرگنمایی می کنید، باید چیزی شبیه شکل 6 ببینید. این باید به طور قابل توجهی بهتر از ترکیب ارزش اخیری که قبلا ساخته اید به نظر برسد. در این مرحله، ارزش آن را دارد که به عقب برگردیم و در نظر بگیریم که چه کارهایی برای ساخت آن کامپوزیت متوسط انجام شده است. Earth Engine کل مجموعه Landsat 8 را در قاره ایالات متحده بارگذاری کرده است و میانگین هر پیکسل را محاسبه کرده است. این داده های زیادی است! البته، می‌توانید میانگین سالانه را با فیلتر کردن مجموعه، همانطور که قبلاً انجام داده‌اید ، محاسبه کنید. نکته این است که اگر مجبور بودید همه آن تصاویر را دانلود کنید و این کامپوزیت را بسازید، پروژه بزرگی خواهد بود. با Earth Engine، در چند ثانیه نتیجه می گیرید!

در اینجا درباره ترکیب و موزاییک سازی بیشتر بدانید.

نقاب زدن

اگرچه کامپوزیت میانه نسبت به کامپوزیت با ارزش اخیر بهبود یافته است، ممکن است بخواهید قسمت هایی از تصویر را پنهان کنید. پوشاندن پیکسل ها در یک تصویر، آن پیکسل ها را شفاف می کند و آنها را از تجزیه و تحلیل خارج می کند. هر پیکسل در هر باند تصویر دارای یک ماسک است. مواردی که مقدار ماسک آنها 0 یا کمتر است شفاف خواهند بود. آنهایی که ماسکی با هر مقدار بالاتر از 0 دارند رندر خواهند شد. ماسک یک تصویر با استفاده از تماسی مانند image1.mask(image2) تنظیم می شود. این فراخوانی مقادیر image2 را می گیرد و آنها را ماسک image1 می کند. هر پیکسل در image2 که دارای مقدار 0 باشد در image1 شفاف می شود.

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

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

// Load or import the Hansen et al. forest change dataset.
var hansenImage = ee.Image('UMD/hansen/global_forest_change_2015');

// Select the land/water mask.
var datamask = hansenImage.select('datamask');

// Create a binary mask.
var mask = datamask.eq(1);

// Update the composite mask with the water mask.
var maskedComposite = median.updateMask(mask);
Map.addLayer(maskedComposite, visParams, 'masked');

چند مورد جدید در این کد وجود دارد که قابل ذکر است. ابتدا، تابع select() برای استخراج باندهای مورد علاقه از یک تصویر مفید است. در اینجا، ما فقط باند مورد علاقه خود را انتخاب می کنیم: datamask . مورد جدید بعدی عملگر منطقی eq() است که مخفف "برابر" است. ما از eq(1) برای ایجاد یک تصویر باینری استفاده می کنیم که در آن تمام پیکسل هایی که مقدار 1 در باند datamask ندارند (آنهایی که آب هستند یا داده ای ندارند) در تصویر حاصل مقدار 0 را دریافت می کنند.

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

موزاییک کاری

با ترکیب مفاهیم مجموعه تصاویر، عملگرهای منطقی، ماسکینگ و ترکیب بندی، می توانید به نتایج کارتوگرافی جالبی دست پیدا کنید. برای مثال، فرض کنید تصویری می‌خواهید که در آن پیکسل‌های زمین با رنگ واقعی و بقیه پیکسل‌ها به رنگ آبی نمایش داده شوند، می‌توانید این کار را انجام دهید:

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

// Make a water image out of the mask.
var water = mask.not();

// Mask water with itself to mask all the zeros (non-water).
water = water.mask(water);

// Make an image collection of visualization images.
var mosaic = ee.ImageCollection([
  median.visualize(visParams),
  water.visualize({palette: '000044'}),
]).mosaic();

// Display the mosaic.
Map.addLayer(mosaic, {}, 'custom mosaic');

چیزهای زیادی در آن کد وجود دارد، پس بیایید آن را تشریح کنیم. ابتدا از عملگر منطقی not() برای معکوس کردن ماسکی که قبلا ساخته بودیم استفاده می کنیم. به طور خاص، not() همه صفرها را به یک و همه غیرصفرها را به صفر تبدیل می کند. کاملاً صحیح نیست که آن متغیر را water بنامیم زیرا شامل برخی از پیکسل‌های گره داده نیز می‌شود، اما در زمینه نقشه‌برداری کنونی مشکلی ندارد. مورد بعدی این است که "آب" را با خودش بپوشاند. این منجر به تصویری می‌شود که در آن تمام پیکسل‌های آب 1 هستند و هر چیز دیگری پوشانده می‌شود. مرحله آخر ترکیب تصاویر با mosaic() است. از آنجایی که mosaic() روی یک مجموعه تصویر کار می کند، لیستی از تصاویر را که می خواهیم ترکیب کنیم به سازنده مجموعه تصویر ارسال می کنیم، سپس mosaic() به عنوان مرحله نهایی فراخوانی می کنیم. ترتیب تصاویر در آن لیست مهم است. به طور خاص، تصویر خروجی حاوی آخرین پیکسل بدون ماسک از پشته تصاویر در مجموعه ورودی خواهد بود. در این مورد، این کار می کند زیرا لایه آب آخرین تصویر (بالا) در مجموعه است و فقط حاوی پیکسل های بدون ماسک است که در آن آب رخ می دهد.

توجه داشته باشید که تصاویر مجموعه تصاویر تجسمی هستند. هنگامی که visualize() را روی یک تصویر فراخوانی می کنید، با توجه به پارامترهای بصری که ارسال می کنید، به یک تصویر 3 باندی 8 بیتی تبدیل می شود. پارامترهای تجسم پیش فرض برای تصاویر 3 باند و 8 بیتی به خوبی کار می کنند، بنابراین وقتی تصویر را به نقشه اضافه می کنید نیازی به پارامترهای تجسم ندارید. نتیجه باید مانند شکل 7 باشد.

Tutorial_api_07_mosaic.png
شکل 7. موزاییک سفارشی که نواحی آب را به رنگ یکنواخت در می آورد.

در این مرحله، روش‌هایی برای تجسم مجموعه‌های تصویری به‌عنوان کامپوزیت‌های با ارزش اخیر، روش‌هایی برای ترکیب مجموعه‌های تصویر با استفاده از کاهنده‌ها، و روش‌هایی برای ساخت کامپوزیت‌های سفارشی با ماسک کردن و موزاییک کردن مجموعه‌ای از تصاویر را مشاهده کرده‌اید. در صفحه بعد، یاد بگیرید که چگونه به هر تصویر در یک مجموعه یک شاخص گیاهی اضافه کنید و از این شاخص برای ایجاد یک ترکیب "سبزترین پیکسل" استفاده کنید.