GEE Adım 2: Image Collection Parametreleri
Google Earth Engine derslerinin ilk yazısında çalışma alanının nasıl belirleneceğinden bahsederek konuya giriş yapmıştım. Bu yazımda ise GEE veri setlerini incelediğinizde karşınıza çıkacak ee.ImageCollection ve ee.Image arasındaki farklardan bahsedip ee.ImageCollection parametreleri üzerinde konuşup uygulamalar yapacağım.
Bu yazının sonunda temel düzeyde;
Coğrafi veri tipleri olan Raster veri ve Vektör veri nedir,
ImageCollection ve Image veri setleri arasındaki fark nedir,
Image Collection veri setleri nasıl import edilir,
Image Collection veri setlerinde kullanılan parametreler nelerdir ve nasıl kullanılır
sorularının cevaplarını teorik ve uygulamalı olarak öğrenmiş olacağınızı düşünüyorum.
Öncelikle konunun daha iyi anlaşılması için coğrafi veri tipinden kısaca bahsetmek istiyorum. Gerçek dünya veri setleri RASTER ve VEKTÖR veri tiplerinden oluşur. Aşağıdaki görselde de gözlemleyebileceğimiz gibi vektör veriler nokta, çizgi ve alanlardan oluşur. Yani bir harita sisteminde yolları, sokakları çizgilerle, okul, hastane, postane gibi yerleri alan ile ve farklı ağaç türleri, insanlar, araçlar gibi değişkenleri ise nokta veri tipiyle ifade ederiz. Ancak vektör veriler tek başına kullanıldığında gerçek dünyayı tam anlamıyla ifade etmekte yetersiz kalır çünkü gerçek dünyada yükseklik, sıcaklık, sulu alan, arazi alanları gibi kavramlarda bulunur. Raster veri katmanı sayesinde ise vektör veri ile ifade edemediğimiz tüm değişkenleri tanımlayabiliriz. Raster veriler görüntü piksellerinden oluştukları için çok hassastırlar. Örneğin yeşillik bir alanda çimlerde görülen her bir farklı renk tonunu raster veri setinde bilgi kaybı olmaksızın saklayabiliriz.


Şimdi veri tiplerinden kısaca bahsettikten sonra asıl konumuza giriş yapalım. GEE’de kullandığınız veri setlerini iki farklı şekilde import edebilirsiniz.
var ımg_collection= ee.ImageCollection('kullanılacak_veriseti')var ımg_collection= ee.Image('kullanılacak_veriseti')
Peki ImageCollection ve Image arasındaki fark nedir? Yukarıda raster veri tipinden bahsetmiştik, Image veri setleri tek katmanlı (single raster) görüntüdür. Image Collection veri setleri ise birden fazla resmi ve birden fazla raster katmanını içeren görüntülerdir. Bu sebeple her iki görüntü kümesini işlerken farklı parametreler kullanmamız gerekir.

İlk olarak ImageCollection’da kullanabileceğimiz parametrelere bakalım.

Yukarıdaki görselde gördüğünüz gibi görüntüye sığmayacak kadar kullanabileceğimiz parametre/fonksiyon bulunuyor. Bu yazıyı çok uzun tutmak istemediğim için temel olarak en sık kullanılan parametreleri inceleyip uygulamalarını göstereceğim.
- ImageCollection veri setimizi import edelim.
Veri setini geçen derste nasıl yükleyip çalışma alanı belirleyeceğimizi anlatmıştık. Aşağıdaki kod ile çalışma alanı belirtmeden tüm dünyaya ait Sentinel veri setini alıp Map.addLayer() argümanını kullanarak haritamızın üzerine katman olarak ekledik. Bu kodu çalıştırıp eklediğiniz katmanı göremezseniz telaşlanmayın! Yeni başlıyoruz 🙂
var Sentinel= ee.ImageCollection('COPERNICUS/S2_SR')
Map.addLayer(Sentinel,{},'Sentinel Image',false);
- Veri setine filterBounds() ve filterDate() filtrelerini uygulayalım.
**Bir önceki yazıya ek olarak bu derste çalışma alanımızı koordinat olarak ekleyelim. Buradaki koordinat Artvin/Arhavi’ye aittir.
Aşağıdaki ee.Geometry.Point() argümanını kullanarak çalışma alanı olarak belirlediğimiz koordinatı ifade etmiş olduk. Geçen dersteki çalışma alanını belirleme yöntemlerine ek olarak bu argüman yardımı ile de çalışma alanınızı koordinat girerek belirleyebilirsiniz.
Geometrik koordinatlarımızı belirttikten sonra veri seti üzerinde bu alanın belirtmek için filterBounds() parametresi kullanılır. Bu şekilde harita üzerinde koordinatları verilen alanın sınırlarını çevrelemiş oluruz.
Bir diğer yaptığımız filtreleme işlemi ise görüntü üzerinde tarih filtreleme parametresi olan filterDate(). Uydu görüntüleri üzerinde analiz yaparken belirli bir tarih aralığına ihtiyaç duyabiliriz. Örneğin Türkiye’deki son 3 yıldaki sıcaklık değişimini gözlemlemek istediğiniz bir çalışma yapacağınızda tarihi son 3 yıl olarak sınırlandırmanız gerekir.
var geo =ee.Geometry.Point(41.3531, 41.3090);
var start = ee.Date('2021-04-01'); //Başlamasıı istediğimiz tarih
var end =ee.Date('2021-04-30'); // Bitmesini istediğimiz tarih
var Sentinel= ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(geo) // yukarıda belirlediğimiz geometri alanında çalışmak için
.filterDate(start,end) //Görüntü üzerinde belirlediğimiz tarihleri filtreledik
//.filterDate('2022-01-01', '2022-02-01') bu şekildede tarih aralığı belirtilebilir
Map.addLayer(Sentinel,{},'Sentinel Image',false);
- print() ile console ekranına imagecollection’a ait görüntü bilgilerini yazdıralım.
print(' Sentinel Image: ', Sentinel);

NOT: Map.addlayer() görselleştirme katmanında uyguladığımız adımları direk haritada görmek için sondaki parametrenin ‘true’ olarak seçilmesi gerekir, ‘false’ olarak seçili olduğunda harita üzerinde ‘Layers’ üzerine gelerek eklediğimiz katmanı seçmemiz gerekir.
- first() ImageCollection içinden belirtilen tarihteki yakalanan ilk görüntüyü getirir.
İlk görüntümüzü import ederken başlama tarihi olarak 2021/04/01 tarihini vermiştik bu koleksiyon içerisinden .first() komutu ile ilk görüntüyü çektiğimizde ise gelen ilk görüntünün 2021/04/02 tarihinde olduğunu görüyoruz. Demek ki belirtilen çalışma alanı için tanımladığımız tarih aralığındaki ilk görüntü 2021/04/02 tarihinde varmış.
//Yukarıda Sentinel görüntüsünü tarih ve çalışma alanına göre filtreleyip import etmiştik. Burada o görüntü üzerinden devam ettik.
var first_sent =Sentinel.first();
Map.addLayer(first_sent,{bands: ['B4','B3','B2']},'Sentinel First Image',false);
print(first_sent);


- select() ile meta görüntü üzerinden belirlediğimiz bantları seçebiliriz
var Sentinel_2= ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(geo)
.select('B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B11','B12')
//.select('B1','B2','B3')
.filterDate('2022-01-01', '2022-02-01');
Map.addLayer(Sentinel_2,{},'Select Bands',false);
- toList() Koleksiyonu listeye dönüştürür ve listedeki görüntülerin sayısını verir. Oluşturduğumuz listeyi console ekranında görebiliriz.
var size=Sentinel.toList(100).length();
print('Number of Sentinel Images: ',size);
Sentinel görüntü koleksiyonunda (‘2021-04-01′,’2021-04-30’) tarihleri arasında 12 görüntü bulunuyormuş.

- aggregate_stats(), aggregate_max() Görüntü koleksiyonlarının property(özelliklerini) kullanarak istatistiklerini, maksimum, minimum, product gibi aggregate değerlerini bulabiliriz.
// var ile değişken tanımlayarak .aggregate_stats('CLOUDY_PIXEL_PERCENTAGE')işlemini uygulayabileceğimiz gibi print() fonksiyonu içerisinde direkt görüntü üzerinde uygulayıp yazdırabiliriz bu elde edeceğimiz sonucu değiştirmez.
var stat_sentinel = Sentinel.aggregate_stats('CLOUDY_PIXEL_PERCENTAGE');
print('Sentinel Cloudy Statistics Print: ', Sentinel.aggregate_stats('CLOUDY_PIXEL_PERCENTAGE'));
//////////////////////////////////////////////////////////////
print('Sentinel Cloudy Statistics: ', stat_sentinel);
/////////////////////////////////////////////////////////////
print('Sentinel Max: ', Sentinel.aggregate_max('WATER_PERCENTAGE'));
/////////////////////////////////////////////////////////////
print('Sentinel Product: ', Sentinel.aggregate_product('WATER_PERCENTAGE'));


- Görüntü özelliklerini(property) nasıl bulacağız?
Veri setini ilk import ettiğimizde görüntü bilgilerini print() ile yazdırmıştık. Bu bilgileri detaylı incelediğimizde istediğimiz görüntüye tıklayarak analizimizde kullanacağımız property seçip aggregate fonksiyonlarında kullanabiliriz.

- flatten() işlemi görüntünün özelliklerini düzgünleştirip(vektör/matris formatına getirip) daha fazla analiz yapabilmeye yarar.
var flatten_sentinel = Sentinel_2.flatten();
print('flatten_sentinels: ', flatten_sentinel);
- getInfo() ile görüntü bilgilerine ulaşabiliriz
var Info_sentinel = Sentinel_2.getInfo();
print('Info_sentinel: ', Info_sentinel);

- sort() ile meta verideki belirli özellikleri filtreleyerek alabiliriz.
Aşağıdaki kod ile Sentinel görüntü koleksiyonundan en düşük bulut oranına sahip değişkenler sıralandı ve ilki alındı.
var sort_cloud_sent = ee.Image(Sentinel.sort('CLOUD_COVER').first());
print('Least Cloud Sentinel', sort_cloud_sent);
Map.addLayer(sort_cloud_sent,{bands: ['B3','B4','B2']},'Least Cloud Sentinel',false);

- filterMetadata() ile meta veriden görüntüyü alırken filtreleyerek import edebiliriz.
Aşağıdaki kodda .filterMetadata(‘CLOUDY_PIXEL_PERCENTAGE’,’less_than’,15); kodu ile property olarak CLOUDY_PIXEL_PERCENTAGE seçtik ve bulutluluk oranı %15’ten az olan görüntüyü getirmesini istedik.
var Sentinel_3= ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(geo)
.select('B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B11','B12')
.filterDate('2022-01-01', '2022-02-01')
.filterMetadata('CLOUDY_PIXEL_PERCENTAGE','less_than',15);
//.sort('CLOUD_COVER');
Map.addLayer(Sentinel_3,{},'Cloud Sort',false);
- reduce() görüntülerin minimum, maksimum, ortalama veya standart sapmasını temsil eden tek bir görüntü elde etmeye yarar.
var reduce_sentinel=Sentinel_2.reduce(ee.Reducer.mean())
Map.addLayer(reduce_sentinel,{},'Reduce',false);
- mosaic()
var mosaic_sentinel=Sentinel.mosaic()
Map.addLayer(mosaic_sentinel,{},'Mosaic',false);
Anlatmak istediklerim burada bitiyor. Umarım sizler için açıklayıcı ve yararlı bir yazı olmuştur.
Bir sonraki yazıda görüşmek dileğiyle 🙂
İyi Çalışmalar 🙂