UYARI: Landsat ETM+ ve OLI verilerini uyumlu hale getirmek için bu eğitimde açıklanan prosedürler eskidir ve Landsat Collection 2 yüzey yansıtma verileriyle çalışırken önerilmez veya gerekli değildir. Daha fazla bilgi için Landsat uyumlaştırmasıyla ilgili SSS girişini inceleyin. 1. Koleksiyon verileri kullanımdan kaldırıldı ve bu eğitimdeki kod artık çalışmayacak veya güncellenmeyecek.
Open In Code Editor (Kod Düzenleyici'de Aç)
Bu eğitimde, Landsat ETM+ yüzey yansıtma değerlerinin Landsat OLI yüzey yansıtma değerleriyle uyumlu hale getirilmesi ele alınmaktadır. Aşağıdakileri sağlar:
- Spektral dönüştürme işlevi
- Analize hazır veriler oluşturma işlevleri
- Zaman serisi görselleştirme örneği
Bu kılavuz, 35 yılı aşkın bir süredir toplanan Landsat verilerinin bölgesel zaman serilerini uyumlu hale getirmek ve görselleştirmek için uçtan uca bir rehber olarak tasarlanmıştır. Bu veriler, ilgilendiğiniz bölgelerde hemen kullanılabilir.
ETM+'yı OLI'ye dönüştürme katsayılarının TM için de geçerli olduğunu unutmayın. Bu nedenle, bu eğitimde ETM+ ile ilgili referanslar TM ile eş anlamlıdır.
Landsat hakkında
Landsat, 1972'den beri orta çözünürlüklü Dünya görüntüleri toplayan bir uydu görüntüleme programıdır. Uzay tabanlı en uzun süreli Dünya gözlem programı olarak, peyzaj değişikliğindeki zamansal ve mekansal trendleri belirlemek için değerli bir zamansal kayıt sağlar. Bu eğitimde Thematic Mapper (TM), Enhanced Thematic Mapper Plus (ETM+) ve Operational Land Imager (OLI) cihaz verileri kullanılmaktadır. Bu veriler birbiriyle yakından ilişkilidir ve 1984'ten günümüze kadar sürekli kayıt üreten, 30 metre uzamsal çözünürlüğe sahip, sensör başına 16 günlük bir sıklıkla tutarlı bir zaman serisinde birleştirilmesi nispeten kolaydır. Çok Bantlı Tarayıcı cihazı, Landsat kayıtlarını 1972'ye kadar genişletir ancak bu eğitimde kullanılmaz. Verileri oldukça farklı olduğundan sonraki sensörlerle entegrasyonu zordur. Tüm sensörlerde uyumlaştırma örnekleri için Savage et al. (2018) ve Vogeler et al. (2018)'e bakın.
Neden uyumlaştırma?
Roy ve diğerleri (2016), uygulamaya bağlı olarak Landsat ETM+ ve OLI'nin spektral özellikleri arasında küçük ancak potansiyel olarak önemli farklılıklar olduğunu göstermektedir. Veri kümelerini uyumlu hale getirmek isteyebileceğiniz nedenler arasında şunlar yer alır: Landsat TM, ETM+ ve OLI'yi kapsayan uzun bir zaman serisi oluşturma, ETM+ SLC-off boşluklarından ve bulut/gölge maskelemeden kaynaklanan eksik gözlemlerin etkilerini azaltmak için yıla yakın tarihli yıllık kompozitler oluşturma veya bir zaman serisindeki gözlem sıklığını artırma. Daha fazla bilgi için lütfen yukarıdaki bağlantılı el yazmasına bakın.
Talimatlar
İşlevler
Aşağıda, ETM+ ile OLI'yi uyumlu hale getirmek ve bu eğitimin uygulama bölümünde bir pikselin spektral-zamansal geçmişini görselleştirmek için kullanılacak analize hazır veriler oluşturmak üzere gereken bir dizi işlev yer almaktadır.
Uyumlaştırma
Uyumlaştırma, Roy ve diğerleri (2016) Tablo 2 OLS regresyon katsayılarında sunulan katsayılara göre ETM+ spektral alanının OLI spektral alanına doğrusal dönüşümüyle sağlanır.
Bantla ilgili katsayılar, eğim (slopes) ve kesişim (itcps) görüntü sabitleriyle birlikte aşağıdaki sözlükte tanımlanır. Y eksenini kesen değerlerin,USGS Landsat yüzey yansıtma verilerinin ölçeklendirmesiyle eşleşmesi için 10.000 ile çarpıldığını unutmayın.
var coefficients = {
itcps: ee.Image.constant([0.0003, 0.0088, 0.0061, 0.0412, 0.0254, 0.0172])
.multiply(10000),
slopes: ee.Image.constant([0.8474, 0.8483, 0.9047, 0.8462, 0.8937, 0.9071])
};
Aynı spektral yanıt penceresi için ETM+ ve OLI bant adları eşit değildir ve standartlaştırılması gerekir. Aşağıdaki işlevler, her veri kümesinden yalnızca yansıtma bantlarını ve pixel_qa bandını seçer ve bunları temsil ettikleri dalga boyu aralığına göre yeniden adlandırır.
// Function to get and rename bands of interest from OLI.
function renameOli(img) {
return img.select(
['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'pixel_qa'],
['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa']);
}
// Function to get and rename bands of interest from ETM+.
function renameEtm(img) {
return img.select(
['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'pixel_qa'],
['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa']);
}
Son olarak, doğrusal modeli ETM+ verilerine uygulayan, veri türünü OLI ile tutarlılık için Int16 olarak yayınlayan ve bulut ile gölge maskelemede daha sonra kullanılmak üzere pixel_qa bandını yeniden ekleyen dönüştürme işlevini tanımlayın.
function etmToOli(img) {
return img.select(['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2'])
.multiply(coefficients.slopes)
.add(coefficients.itcps)
.round()
.toShort()
.addBands(img.select('pixel_qa'));
}
Bulut ve gölge maskeleme
Analize hazır verilerde bulutlar ve bulut gölgeleri maskelenmelidir. Aşağıdaki işlev, CFmask'ı (Zhu ve diğerleri, 2015)
pixel_qa, bulut ve bulut gölgesi olarak tanımlanan pikselleri boş olarak ayarlamak için her Landsat USGS yüzey yansıtma görüntüsüyle birlikte verilir.
function fmask(img) {
var cloudShadowBitMask = 1 << 3;
var cloudsBitMask = 1 << 5;
var qa = img.select('pixel_qa');
var mask = qa.bitwiseAnd(cloudShadowBitMask)
.eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return img.updateMask(mask);
}
Spektral indeks hesaplama
Yakında kullanıma sunulacak uygulama, orman yangınından etkilenen bir orman pikselinin spektral geçmişini göstermek için normalleştirilmiş yanma oranı (NBR) spektral indeksini kullanır. NBR'nin kullanılmasının nedeni Cohen ve diğerlerinin (2018), ABD genelinde orman bozulması (sinyal) ile ilgili olarak 13 spektral indeks/bant arasında NBR'nin en yüksek sinyal-gürültü oranına sahip olduğunu tespit etmesidir. Aşağıdaki işlevle hesaplanır.
function calcNbr(img) {
return img.normalizedDifference(['NIR', 'SWIR2']).rename('NBR');
}
Kendi uygulamanızda farklı bir spektral indeks kullanmayı tercih edebilirsiniz. Buradan ek bir dizin ekleyebilir veya mevcut dizini değiştirebilirsiniz.
İşlevleri birleştirme
Her veri kümesi için, ilgili görüntü koleksiyonlarına uygulanmalarını kolaylaştırmak amacıyla yukarıdaki tüm işlevleri birleştiren bir sarmalayıcı işlev tanımlayın.
// Define function to prepare OLI images.
function prepOli(img) {
var orig = img;
img = renameOli(img);
img = fmask(img);
img = calcNbr(img);
return ee.Image(img.copyProperties(orig, orig.propertyNames()));
}
// Define function to prepare ETM+ images.
function prepEtm(img) {
var orig = img;
img = renameEtm(img);
img = fmask(img);
img = etmToOli(img);
img = calcNbr(img);
return ee.Image(img.copyProperties(orig, orig.propertyNames()));
}
Uygulamanızda işlevleri dahil etmeyi veya hariç tutmayı seçebilirsiniz. Bu işlevleri gerektiği şekilde değiştirin.
Zaman serisi örneği
Yukarıdaki prepOli ve prepEtm sarmalayıcı işlevleri, bir pikselin veya piksel bölgesinin spektral kronolojisini görselleştirmek için sensörler arası analize hazır veriler oluşturmak üzere Landsat yüzey yansıtma koleksiyonları üzerinde eşlenebilir. Bu örnekte, 35 yılı aşkın bir zaman serisi oluşturacak ve tek bir pikselin spektral geçmişini göstereceksiniz. Bu piksel, 1980'li ve 1990'lı yıllarda bazı rahatsızlıklar yaşayan ve 2011'de büyük bir yangın geçiren olgun bir Pasifik Kuzeybatı konifer ormanı parçasının (Şekil 1) yakın geçmişiyle ilgilidir.

Şekil 1. İlgilenilen örnek alan için konum ve site karakteri. ABD, Oregon, Hood Dağı'nın kuzey yamacındaki olgun Pasifik Kuzeybatı kozalaklı ağaç ormanı. Görseller: Google Earth, USDA Forest Service, Landsat ve Copernicus.
Alakalı konum tanımlama
Bu uygulamanın sonucu, bir piksel için Landsat gözlemlerinin zaman serisidir. Pikselin konumunu tanımlamak için ee.Geometry.Point nesnesi kullanılır.
var aoi = ee.Geometry.Point([-121.70938, 45.43185]);
Uygulamanızda farklı bir piksel seçebilirsiniz. Yukarıdaki boylam ve enlem koordinatlarını değiştirerek bunu yapabilirsiniz. Alternatif olarak, ee.Geometry.Polygon() ve ee.Geometry.Rectangle() gibi diğer ee.Geometry nesne tanımlarını kullanarak bir piksel grubunun spektral geçmişini özetleyebilirsiniz.
Daha fazla bilgi için lütfen Geliştirici Kılavuzu'nun Geometriler bölümüne bakın.
Landsat sensör koleksiyonlarını alma
OLI, ETM+ ve TM için Landsat USGS yüzey yansıtma koleksiyonlarını edinin.
Veri kümeleri hakkında daha fazla bilgi edinmek için bağlantıları ziyaret edin.
var oliCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR');
var etmCol = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR');
var tmCol = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR');
Görüntü koleksiyonu filtresi tanımlama
Resim koleksiyonlarını ilgi alanının coğrafi sınırı, fotosentezin en yoğun olduğu sezon ve kaliteye göre sınırlamak için bir filtre tanımlayın.
var colFilter = ee.Filter.and(
ee.Filter.bounds(aoi), ee.Filter.calendarRange(182, 244, 'day_of_year'),
ee.Filter.lt('CLOUD_COVER', 50), ee.Filter.lt('GEOMETRIC_RMSE_MODEL', 10),
ee.Filter.or(
ee.Filter.eq('IMAGE_QUALITY', 9),
ee.Filter.eq('IMAGE_QUALITY_OLI', 9)));
Bu filtreleme ölçütlerini istediğiniz gibi değiştirin. Yukarıda bağlantısı verilen veri açıklaması sayfalarının "Resim Özellikleri" sekmesinde filtrelenecek diğer özellikleri belirleyin.
Koleksiyonları hazırlama
Koleksiyonları birleştirin, filtreyi uygulayın ve prepImg işlevini tüm resimlere eşleyin. Aşağıdaki snippet'in sonucu, filtre ölçütlerini karşılayan ve analize hazır NBR olarak işlenen OLI, ETM+ ve TM sensör koleksiyonlarındaki görüntüleri içeren tek bir ee.ImageCollection'dir.
// Filter collections and prepare them for merging.
oliCol = oliCol.filter(colFilter).map(prepOli);
etmCol = etmCol.filter(colFilter).map(prepEtm);
tmCol = tmCol.filter(colFilter).map(prepEtm);
// Merge the collections.
var col = oliCol.merge(etmCol).merge(tmCol);
Tüm gözlemleri gösteren bir zaman serisi grafiği oluşturun
Sensörler arası uyum, tüm gözlemlerin saçılım grafiği olarak çizilmesiyle niteliksel olarak değerlendirilebilir. Bu grafikte sensörler renkle ayırt edilir. Earth Engine'in ui.Chart.feature.groups işlevi bu yardımcı programı sağlar ancak önce gözlemlenen NBR değerinin her görüntüye özellik olarak eklenmesi gerekir. Görüntü koleksiyonu üzerinde, ilgi alanı ile kesişen tüm piksellerin medyanını hesaplayan ve sonucu görüntü özelliği olarak ayarlayan bir bölge azaltma işlevi eşleyin.
var allObs = col.map(function(img) {
var obs = img.reduceRegion(
{geometry: aoi, reducer: ee.Reducer.median(), scale: 30});
return img.set('NBR', obs.get('NBR'));
});
Kendi uygulamanızda, ilgi alanınız büyük bir alansa scale değerini artırmayı ve reduceRegion işlevinin bestEffort, maxPixels, tileScale bağımsız değişkenlerini belirterek işlemin maksimum piksel, bellek veya zaman aşımı sınırlamalarını aşmamasını sağlamayı düşünebilirsiniz. Ayrıca, medyan küçültücüyü tercih ettiğiniz istatistikle de değiştirebilirsiniz. Daha fazla bilgi için Geliştirici Kılavuzu'nun Bir Resim Bölgesinin İstatistikleri bölümüne bakın.
Koleksiyon artık ui.Chart.feature.groups işlevi tarafından kabul edilebilir.
İşlev, bir koleksiyon ve grafiğe eşlenecek koleksiyon nesnesi özelliklerinin adlarını bekler. Burada "system:time_start" özelliği x ekseni değişkeni, "NBR" ise y ekseni değişkeni olarak kullanılır. NBR özelliğinin, küçültülen resimdeki grup adına göre yukarıdaki reduceRegion işleviyle adlandırıldığını unutmayın. Farklı bir bant kullanıyorsanız ("NBR" değil) y ekseni özellik adı bağımsız değişkenini buna göre değiştirin. Son olarak, gruplandırma (seri) değişkenini, farklı renklerin atandığı "SATELLITE" olarak ayarlayın.
var chartAllObs =
ui.Chart.feature.groups(allObs, 'system:time_start', 'NBR', 'SATELLITE')
.setChartType('ScatterChart')
.setSeriesNames(['TM', 'ETM+', 'OLI'])
.setOptions({
title: 'All Observations',
colors: ['f8766d', '00ba38', '619cff'],
hAxis: {title: 'Date'},
vAxis: {title: 'NBR'},
pointSize: 6,
dataOpacity: 0.5
});
print(chartAllObs);
Biraz işlem süresinden sonra konsolda Şekil 2'ye benzer bir grafik görünür. Göz önünde bulundurulması gereken birkaç nokta:
- Yılda birden fazla gözlem yapılır.
- Zaman serisi üç farklı sensörden oluşur.
- Belirgin sensör önyargıları yoktur.
- Gözlem sıklığı yıldan yıla değişir.
- Yıllar içinde tutarlı ve nispeten dar olan, yıl içi varyanslar vardır. NDVI ile denendiğinde (img.normalizedDifference(['SWIR1', 'NIR']).rename('NDVI');) yıllar arası ve yıl içi yanıt değişkenliği çok daha fazla oluyor.
- NBR, bazı küçük bozulmalarla birlikte zaman serilerinin çoğunda yüksek kalmaya devam ediyor.
- NBR yanıtında büyük ve hızlı bir azalma, orman yangınından kaynaklanır.
- Ancak yangının (Dollar Gölü) Eylül 2011'de çıktığını unutmayın. Algılama yılındaki hata, yıllık bileşik tarih aralığının Temmuz-Ağustos olmasından kaynaklanmaktadır. Bu dönemden sonraki değişiklikler, bir sonraki kullanılabilir sıfır olmayan gözleme kadar (bu, sonraki yıl veya daha sonra olabilir) alınmaz.
- Bitki örtüsünün iyileşmesi (NBR yanıtının artması), büyük NBR kaybı tespit edildikten iki yıl sonra başlar.

Şekil 2. Landsat TM, ETM+ ve OLI'nin gösterimini içeren tek bir piksel için spektral yanıt zaman serisi grafiği. TM ve ETM+ görüntüleri, doğrusal dönüşümle OLI ile uyumlu hale getirilir. Resimler Temmuz ve Ağustos aylarına aittir ve yüksek kalite için filtrelenmiştir.
Yıllık ortancayı gösteren bir zaman serisi grafiği oluştur
Zaman serisini basitleştirmek ve gürültüyü kaldırmak için yıllık gözlem azaltma uygulanabilir. Burada ortanca değer kullanılır.
İlk adım, resimleri yıla göre gruplandırmaktır. Her resmin ee.Image.Date koleksiyon ayarını eşleyerek her resme yeni bir "yıl" özelliği ekleyin.
var col = col.map(function(img) {
return img.set('year', img.date().get('year'));
});
Yeni "yıl" özelliği, aynı yıla ait resimleri birleştirerek gruplandırmak için kullanılabilir. Farklı bir görüntü yılı koleksiyonu ile eksiksiz koleksiyon arasındaki birleştirme, aynı yılın listelerini sağlar. Bu listelerde ortanca değer azaltma işlemleri yapılabilir. Tam koleksiyonu, farklı yıl temsilcilerinden oluşan bir kümeye ayırın.
var distinctYearCol = col.distinct('year');
Farklı yıl koleksiyonu (distinctYearCol) ile eksiksiz koleksiyon (col) arasında eşleşen yılları tanımlayacak bir filtre ve birleştirme tanımlayın. Eşleşmeler "year_matches" adlı bir mülke kaydedilir.
var filter = ee.Filter.equals({leftField: 'year', rightField: 'year'});
var join = ee.Join.saveAll('year_matches');
Birleştirme işlemini uygulayın ve sonuçta elde edilen FeatureCollection'ı ImageCollection'a dönüştürün.
var joinCol = ee.ImageCollection(join.apply(distinctYearCol, col, filter));
// Apply median reduction among matching year collections.
var medianComp = joinCol.map(function(img) {
var yearCol = ee.ImageCollection.fromImages(img.get('year_matches'));
return yearCol.reduce(ee.Reducer.median())
.set('system:time_start', img.date().update({month: 8, day: 1}));
});
Belirli bir yıldaki resim koleksiyonunu temsil etmek için medyan dışında bir istatistik kullanmayı tercih ediyorsanız yukarıdaki ee.Reducer simgesini değiştirin.
Son olarak, yıl içi yaz gözlemlerinden elde edilen NBR değerlerinin medyanını gösteren bir grafik oluşturun. Bölge azaltma istatistiğini istediğiniz gibi değiştirin.
var chartMedianComp = ui.Chart.image
.series({
imageCollection: medianComp,
region: aoi,
reducer: ee.Reducer.median(),
scale: 30,
xProperty: 'system:time_start',
})
.setSeriesNames(['NBR Median'])
.setOptions({
title: 'Intra-annual Median',
colors: ['619cff'],
hAxis: {title: 'Date'},
vAxis: {title: 'NBR'},
lineWidth: 6
});
print(chartMedianComp);
Biraz işlem süresinden sonra konsolda Şekil 3'e benzer bir grafik görünür.

Şekil 3. Landsat TM, ETM+ ve OLI'den temsili veriler içeren tek bir piksel için ortalama yaz spektral yanıtı zaman serisi grafiği. TM ve ETM+ görüntüleri, doğrusal bir dönüşümle OLI ile uyumlu hale getirilir. Resimler, Temmuz ve Ağustos aylarına aittir ve yüksek kalite için filtrelenmiştir.
Ek bilgiler
Alternatif dönüştürme işlevleri
Roy ve diğerleri (2016) Tablo 2, ETM+ yüzey yansıtma değerini OLI yüzey yansıtma değerine ve bunun tersine dönüştürmek için OLS ve RMA regresyon katsayılarını sağlar. Yukarıdaki eğitimde yalnızca OLS regresyonu ile ETM+'dan OLI'ye dönüşüm gösterilmektedir. Tüm çeviri seçenekleriyle ilgili işlevleri Code Editor komut dosyasında veya GitHub kaynak komut dosyasında bulabilirsiniz.
Dollar Lake yangını
Bu eğitimde bahsedilen yangın, 2011 yılının Eylül ayının ortalarında ABD'nin Oregon eyaletindeki Hood Dağı'nın kuzey yamaçlarında çıkan Dollar Gölü yangınıdır. Bu konuyla ilgili daha fazla bilgi için bu blog yayınını ziyaret edin ve Varner et al. (2015)'i inceleyin.