بعد تحميل مجموعة بيانات انعكاس TOA من Landsat 8 في متغيّر باسم l8
، تبيّن لك أنّ الرمز التالي يؤدي إلى إنشاء صورة مركّبة تتضمّن أحدث القيم:
محرّر الرموز البرمجية (JavaScript)
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
(مزيد من المعلومات حول تقليل مجموعات الصور).
التركيب باستخدام Reducers
تم تعريفك أولاً على دوال الاختزال من أجل الحصول على إحصاءات في منطقة صورة. كان هذا تخفيضًا مكانيًا. يُعدّ تقليل مجموعة صور إلى صورة واحدة عملية تقليل مؤقتة عندما تمثّل المجموعة صورًا على مدار فترة زمنية. يحدّد نوع Reducer
الذي تستخدمه طريقة تعامل Earth Engine مع وحدات البكسل المتداخلة. يزور القمر الصناعي Landsat 8 الموقع الجغرافي نفسه على الأرض كل 16 يومًا. وهذا يعني أنّه خلال فترة 6 أشهر، سيتم عرض 12 صورة تقريبًا (والمزيد في حال تداخل المشاهد). يتم استخلاص كل بكسل على الخريطة من مجموعة من وحدات البكسل، واحدة من كل صورة في المجموعة المعروضة.
إنّ مجرد إضافة المجموعة إلى الخريطة يؤدي إلى اختيار أحدث بكسل، أي البكسل من أحدث صورة في الحزمة. ويمكن تغيير هذا السلوك باستخدام أدوات تقليل البيانات في Earth Engine. على سبيل المثال، بدلاً من استخدام أحدث بكسل من الحزمة، يمكن توجيه Earth Engine لاختيار القيمة المتوسطة في الحزمة. ويؤدي ذلك إلى إزالة الغيوم (التي لها قيمة عالية) والظلال (التي لها قيمة منخفضة). عندما يتم تقليل مجموعة صور باستخدام أداة تقليل الوسيط، تكون القيمة المركّبة هي الوسيط في كل نطاق، بمرور الوقت. على سبيل المثال، استخدام مشاهد Landsat في عام 2016:
محرّر الرموز البرمجية (JavaScript)
// 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
في علامة التبويب المستندات ضمن "محرّر الرموز" للاطّلاع على قائمة بجميع دوال الاختزال في Earth Engine. عند اختيار أداة تقليل لمجموعة صور، يجب مراعاة أنّ الناتج هو صورة، وبالتالي لن تعمل أدوات التقليل التي تنتج قيمًا غير رقمية، مثل أدوات التقليل histogram
أو toList
، مع مجموعة صور.

عند التصغير في الصورة المركّبة المتوسطة، من المفترض أن يظهر لك ما يشبه الشكل 6. يجب أن يبدو هذا أفضل بكثير من الصورة المركّبة التي أعددتها سابقًا. في هذه المرحلة، من المفيد التفكير في الخطوات التي تم اتّخاذها لإنشاء هذا المقياس المركّب. حمّل Earth Engine مجموعة Landsat 8 بأكملها على مستوى الولايات المتحدة القارية، واحتسب متوسط كل بكسل. هذه بيانات كثيرة! بالطبع، يمكنك حساب الوسائط السنوية من خلال فلترة المجموعة أولاً، كما فعلت سابقًا. الفكرة هي أنّه إذا كان عليك تنزيل كل هذه الصور وإنشاء هذه الصورة المركّبة، سيكون ذلك مشروعًا كبيرًا. باستخدام Earth Engine، يمكنك الحصول على نتيجة في ثوانٍ.
مزيد من المعلومات حول التركيب والتجميع
الإخفاء
على الرغم من أنّ الصورة المركّبة التي تستخدم الوسيط هي تحسين مقارنةً بالصورة المركّبة التي تستخدم القيمة الأخيرة، قد تحتاج إلى إخفاء أجزاء من الصورة. يؤدي إخفاء وحدات البكسل في صورة إلى جعلها شفافة واستبعادها من التحليل. يحتوي كل بكسل في كل نطاق من الصورة على قناع. ستكون العناصر التي تبلغ قيمة القناع فيها 0 أو أقل شفافة. سيتم عرض تلك التي تحتوي على قناع بأي قيمة أكبر من 0. يتم ضبط قناع الصورة باستخدام استدعاء مثل
image1.mask(image2)
. تأخذ هذه الدالة قيم image2
وتجعلها قناع image1
. سيتم جعل أي وحدات بكسل في image2
تحمل القيمة 0 شفافة في image1
.
على سبيل المثال، لنفترض أنّك تريد إخفاء جميع وحدات البكسل الخاصة بالمياه في الصورة المركّبة المتوسطة. يمكن إنشاء قناع مائي باستخدام مجموعة البيانات الموضّحة في Hansen et al. (2013) والموجودة في فهرس بيانات Earth Engine. (يمكنك الاطّلاع على مزيد من المعلومات حول مجموعة بيانات Hansen et al. في هذا الدليل التعليمي). في مجموعة البيانات هذه، تبلغ قيمة المياه 2، وتبلغ قيمة الأرض 1، وتبلغ قيمة "لا تتوفّر بيانات" 0. استخدِم بعض المنطق لإنشاء صورة قناع تحتوي على أصفار في المناطق التي لا توجد فيها أراضٍ:
محرّر الرموز البرمجية (JavaScript)
// 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 في الصورة الناتجة.
نتيجةً لهذا الإخفاء، ستظهر كل وحدات البكسل في الصورة المركّبة المتوسطة التي تقع فوق اليابسة (وفقًا لمجموعة بيانات Hansen et al.)، ولكن ستكون وحدات البكسل التي تقع فوق المياه (أو البيانات غير المتوفرة) شفافة وسيتم استبعادها من أي تحليل تجريه على صورة maskedComposite
.
تجميع الصور
من خلال الجمع بين مفاهيم مجموعات الصور وعوامل التشغيل المنطقية والإخفاء والتركيب، يمكنك تحقيق نتائج خرائطية مثيرة للاهتمام. على سبيل المثال، إذا أردت صورة يتم فيها عرض بكسلات الأراضي بالألوان الحقيقية وعرض جميع البكسلات الأخرى باللون الأزرق، يمكنك إجراء ما يلي:
محرّر الرموز البرمجية (JavaScript)
// 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 بتات وفقًا لمعلمات التصور التي تحددها. تعمل مَعلمات العرض المرئي التلقائية بشكل جيد مع الصور ذات النطاقات الثلاثة و8 بت، لذا لا تحتاج إلى مَعلمات العرض المرئي عند إضافة الصورة إلى الخريطة. يجب أن تبدو النتيجة مثل الشكل 7.

في هذه المرحلة، تعرّفت على طرق لتصوّر مجموعات الصور كمركّبات ذات قيم حديثة، وطرق لتركيب مجموعات الصور باستخدام أدوات الاختزال، وطرق لإنشاء مركّبات مخصّصة من خلال إخفاء أجزاء من مجموعة صور ودمجها معًا. في الصفحة التالية، تعرَّف على كيفية إضافة مؤشر نباتي إلى كل صورة في مجموعة واستخدام المؤشر لإنشاء صورة مركّبة "لأكثر البكسلات اخضرارًا".