Birleştirme, maskeleme ve mozaikleme

Landsat 8 TOA yansıma koleksiyonu l8 adlı bir değişkene yüklendiğinde, aşağıdaki kodun son değer bileşiğiyle sonuçlandığını gördünüz:

Kod Düzenleyici (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');

Bu bileşik görüntünün sorunlarından biri, bulutlarla dolu olmasıdır. Koleksiyondaki son pikseli almak yerine (haritaya bir koleksiyon eklediğinizde Earth Engine, koleksiyon üzerinde dolaylı olarak mosaic() yöntemini çağırır) ImageCollection değerini azaltabilirsiniz (Görüntü koleksiyonlarını azaltma hakkında daha fazla bilgi edinin).

Redüktörlerle birleştirme

İndirgeyicilerle ilk olarak bir görüntü bölgesinde istatistik alma konusunda tanışmıştınız. Bu, uzamsal bir küçültmeydi. Koleksiyon, zaman içindeki görüntüleri temsil ediyorsa bir görüntü koleksiyonunu tek bir görüntüye indirgemek zamansal bir indirgemedir. Kullandığınız Reducer türü, Earth Engine'in çakışan pikselleri nasıl işleyeceğini belirler. Landsat 8, her 16 günde bir Dünya'daki aynı noktayı ziyaret eder. Bu, 6 aylık bir dönemde yaklaşık 12 görüntü (ve sahnelerin çakıştığı daha fazla görüntü) olacağı anlamına gelir. Haritadaki her piksel, bir piksel yığınından (görüntülenen koleksiyondaki her görüntüden bir tane) türetilir.

Koleksiyonu haritaya eklediğinizde en son piksel (yığındaki en son görüntüden alınan piksel) seçilir. Bu davranış, Earth Engine indirgeyicileri kullanılarak değiştirilebilir. Örneğin, Earth Engine'e yığındaki en son pikseli almak yerine yığındaki ortanca değeri seçmesi talimatı verilebilir. Bu sayede bulutlar (yüksek değere sahip) ve gölgeler (düşük değere sahip) kaldırılır. Bir görüntü koleksiyonu, ortanca değer azaltıcı kullanılarak azaltıldığında bileşik değer, zaman içinde her bir banttaki ortanca değer olur. Örneğin, 2016'da Landsat sahnelerini kullanarak:

Kod Düzenleyici (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');

Bu koddaki yeni şey, bir görüntü koleksiyonuna uygulanan median() yöntemidir. Filtreleme yöntemleri gibi bu da resim koleksiyonlarında bir bağımsız değişken olarak ee.Reducer() alan daha genel reduce() yöntemi için bir kısayoldur. Tüm Earth Engine indirgeyicilerin listesini görmek için Kod Düzenleyici'nin Docs sekmesindeki ee.Reducer paketine bakın. Bir görüntü koleksiyonu için indirgeyici seçerken çıkışın bir görüntü olduğunu unutmayın. Bu nedenle, sayısal olmayan çıkışlara sahip indirgeyiciler (ör. histogram veya toList indirgeyiciler) bir görüntü koleksiyonuyla çalışmaz.

Tutorial_api_06_median_composite
Şekil 6. Landsat 8 ortanca bileşiği.

Ortanca bileşik görüntüyü uzaklaştırdığınızda Şekil 6'ya benzer bir görüntü elde edersiniz. Bu, daha önce yaptığınız son değer bileşiminden çok daha iyi görünmelidir. Bu noktada, geri adım atıp bu ortanca bileşiği oluşturmak için neler yapıldığını düşünmekte fayda var. Earth Engine, ABD kıtası genelindeki tüm Landsat 8 koleksiyonunu yükledi ve her pikselin medyanını hesapladı. Bu çok fazla veri demek. Elbette, daha önce yaptığınız gibi önce koleksiyonu filtreleyerek yıllık medyanları hesaplayabilirsiniz. Tüm bu görüntüleri indirip bu bileşimi oluşturmanız gerekseydi bu büyük bir proje olurdu. Earth Engine ile saniyeler içinde sonuç alırsınız.

Birleştirme ve mozaikleme hakkında daha fazla bilgiyi burada bulabilirsiniz.

Maskeleme

Ortanca bileşik, son değer bileşiğine göre daha iyi olsa da görüntünün bazı kısımlarını maskelemek isteyebilirsiniz. Bir görüntüdeki pikselleri maskelemek, bu pikselleri şeffaf hale getirir ve analizden hariç tutar. Bir görüntünün her bandındaki her pikselin bir maskesi vardır. Maske değeri 0 veya daha düşük olanlar şeffaf olur. 0'ın üzerinde herhangi bir değere sahip maskeler oluşturulur. Bir görüntünün maskesi, image1.mask(image2) gibi bir çağrı kullanılarak ayarlanır. Bu çağrı, image2 değerlerini alır ve bunları image1 maskesi yapar. image2 içinde 0 değerine sahip tüm pikseller image1 içinde şeffaf hale getirilir.

Örneğin, ortanca bileşikteki tüm su piksellerini maskelemek istediğinizi varsayalım. Earth Engine Data Catalog'unda yer alan Hansen ve diğerleri (2013) tarafından açıklanan veri kümesi kullanılarak bir su maskesi oluşturulabilir. (Hansen ve diğerlerinin veri kümesi hakkında daha fazla bilgiyi bu eğitimde bulabilirsiniz.) Bu veri kümesinde suyun değeri 2, karaların değeri 1 ve "veri yok"un değeri 0'dır. Kara olmayan yerlerde sıfırların bulunduğu bir maske resmi oluşturmak için biraz mantık kullanın:

Kod Düzenleyici (JavaScript)

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

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

Bu kodda ayrıntılı olarak bahsetmeye değer birkaç yeni şey var. İlk olarak, select() işlevi bir görüntüden ilgilenilen bantları ayıklamak için kullanışlıdır. Burada yalnızca ilgilendiğimiz bandı seçiyoruz: datamask. Bir sonraki yeni şey, "eşittir" anlamına gelen eq() mantıksal operatörüdür. eq(1) kullanarak ikili görüntü oluşturuyoruz. Bu görüntüde, datamask bandında 1 değerine sahip olmayan tüm pikseller (su veya veri içermeyen pikseller) 0 değerini alır.

Bu maskeleme sonucunda, ortanca bileşikteki karada bulunan tüm pikseller (Hansen ve ark. veri kümesine göre) görünür, ancak su (veya veri yok) üzerindeki pikseller şeffaftır ve maskedComposite görüntüsü üzerinde yaptığınız analizlere dahil edilmez.

Mozaikleme

Görüntü koleksiyonları, mantıksal operatörler, maskeleme ve birleştirme kavramlarını birleştirerek ilginç haritacılık sonuçları elde edebilirsiniz. Örneğin, kara piksellerinin gerçek renkli, diğer tüm piksellerin mavi gösterildiği bir görüntü istiyorsanız şuna benzer bir şey yapabilirsiniz:

Kod Düzenleyici (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');

Bu kodda çok fazla şey oluyor, bu yüzden onu inceleyelim. İlk olarak, daha önce oluşturduğumuz maskeyi tersine çevirmek için not() mantıksal operatörünü kullanırız. Özellikle not(), tüm sıfırları bire ve sıfır olmayan tüm değerleri sıfıra dönüştürür. Bu değişkeni water olarak adlandırmak tamamen doğru değildir çünkü bazı veri içermeyen pikseller de içerir ancak mevcut haritacılık bağlamında bu sorun teşkil etmez. Bir sonraki adım, "su"yu kendisiyle maskelemektir. Bu işlem sonucunda, tüm su piksellerinin 1 olduğu ve diğer her şeyin maskelendiği bir görüntü elde edilir. Son adım, resimleri mosaic() ile birleştirmektir. mosaic() bir görüntü koleksiyonu üzerinde çalıştığından, görüntü koleksiyonu oluşturucuya birleştirmek istediğimiz görüntülerin listesini iletiriz ve son adım olarak mosaic() işlevini çağırırız. Bu listedeki resimlerin sırası önemlidir. Özellikle, çıkış görüntüsü, giriş koleksiyonundaki görüntü yığınından maskelenmemiş son pikseli içerir. Bu örnekte, su katmanı koleksiyondaki son (en üstteki) görüntü olduğu ve yalnızca suyun bulunduğu maskelenmemiş pikselleri içerdiği için bu yöntem işe yarar.

Koleksiyondaki resimlerin görselleştirme resimleri olduğunu unutmayın. Bir görüntüde visualize() yöntemini çağırdığınızda, ilettiğiniz görselleştirme parametrelerine göre 3 bantlı, 8 bitlik bir görüntüye dönüştürülür. Varsayılan görselleştirme parametreleri 3 bantlı, 8 bitlik görüntüler için iyi sonuç verir. Bu nedenle, görüntüyü haritaya eklerken görselleştirme parametrelerine ihtiyacınız yoktur. Sonuç, Şekil 7'deki gibi görünmelidir.

Tutorial_api_07_mosaic.png
Şekil 7. Su alanlarını tek renk yapan özel mozaik.

Bu noktada, görüntü koleksiyonlarını son değer bileşikleri olarak görselleştirme yöntemlerini, azaltıcıları kullanarak görüntü koleksiyonlarını birleştirme yöntemlerini ve bir görüntü koleksiyonunu maskeleyip mozaikleyerek özel bileşikler oluşturma yöntemlerini gördünüz. Sonraki sayfada, bir koleksiyondaki her görüntüye bitki örtüsü indeksi eklemeyi ve bu indeksi kullanarak "en yeşil piksel" bileşiği oluşturmayı öğreneceksiniz.