Diziler ve dizi resimleri

Earth Engine'daki diziler, sayı listelerinden ve liste listelerinden oluşur. İç içe yerleştirme derecesi, boyut sayısını belirler. Basit ve motive edici bir örnekle başlamak için Landsat 8 püsküllü kap (TC) katsayılarından oluşturulan Array örneğini inceleyin (Baig et al., 2014):

Kod Düzenleyici (JavaScript)

// Create an Array of Tasseled Cap coefficients.
var coefficients = ee.Array([
  [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872],
  [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608],
  [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559],
  [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773],
  [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085],
  [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252],
]);

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Create an Array of Tasseled Cap coefficients.
coefficients = ee.Array([
    [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872],
    [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608],
    [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559],
    [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773],
    [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085],
    [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252],
])

Her eksenin uzunluğunu döndüren length() işlevini kullanarak bunun 6x6 boyutunda bir 2 boyutlu dizi olduğunu onaylayın:

Kod Düzenleyici (JavaScript)

// Print the dimensions.
print(coefficients.length()); //    [6,6]

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Print the dimensions.
display(coefficients.length())  #    [6,6]

Aşağıdaki tabloda, matris girişlerinin 0 ekseni ve 1 ekseni boyunca düzenlenmesi gösterilmektedir:

1 eksenli ->
012345
00,30290,27860,47330,55990,5080,1872
1-0,2941-0,243-0,54240,72760,0713-0,1608
0 ekseni20,15110,19730,32830,3407-0,7117-0,4559
3-0,82390,08490,4396-0,0580,2013-0,2773
4-0,32940,05570,10560,1855-0,43490,8085
50,1079-0,90230,41190,0575-0,02590,0252

Tablonun solundaki dizinler, 0 ekseni boyunca konumları gösterir. 0 eksenindeki her listedeki n. öğe, 1 ekseni boyunca n. konumdadır. Örneğin, dizideki [3,1] koordinatındaki giriş 0,0849'dur. "Yeşillik"in ilgilenilen TC bileşeni olduğunu varsayalım. slice() kullanarak yeşillik alt matrisini alabilirsiniz:

Kod Düzenleyici (JavaScript)

// Get the 1x6 greenness slice, display it.
var greenness = coefficients.slice({axis: 0, start: 1, end: 2, step: 1});
print(greenness);

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Get the 1x6 greenness slice, display it.
greenness = coefficients.slice(axis=0, start=1, end=2, step=1)
display(greenness)

2 boyutlu yeşillik matrisi aşağıdaki gibi görünmelidir:

[[-0.2941,-0.243,-0.5424,0.7276,0.0713,-0.1608]]
    

slice() parametresinin start ve end parametrelerinin, tabloda gösterilen 0 ekseni dizelerine karşılık geldiğini unutmayın (start dahildir ve end hariçtir).

Dizi Resimleri

Yeşillik görüntüsü elde etmek için Landsat 8 görüntüsünün bantlarını yeşillik matrisiyle matris çarpımı yapın. Bunu yapmak için öncelikle çok bantlı Landsat görüntüsünü, her pikselin bant değerlerinin Array olduğu bir "dizi görüntüsüne" dönüştürün. Örneğin:

Kod Düzenleyici (JavaScript)

// Load a Landsat 8 image, select the bands of interest.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')
  .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']);

// Make an Array Image, with a 1-D Array per pixel.
var arrayImage1D = image.toArray();

// Make an Array Image with a 2-D Array per pixel, 6x1.
var arrayImage2D = arrayImage1D.toArray(1);

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Load a Landsat 8 image, select the bands of interest.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(
    ['B2', 'B3', 'B4', 'B5', 'B6', 'B7']
)

# Make an Array Image, with a 1-D Array per pixel.
array_image_1d = image.toArray()

# Make an Array Image with a 2-D Array per pixel, 6x1.
array_image_2d = array_image_1d.toArray(1)

Bu örnekte, toArray() işlevinin image'yi her pikselin 1 boyutlu bir vektör olduğu ve girişlerinin image bantlarındaki ilgili konumlardaki 6 değere karşılık geldiği bir dizi görüntüye dönüştürdüğünü unutmayın. Bu şekilde oluşturulan 1 boyutlu vektörlerden oluşan dizi görüntüsünde 2 boyutlu şekil kavramı yoktur. Matris çarpımı gibi yalnızca 2 boyutlu işlemleri gerçekleştirmek için toArray(1) ile piksele göre 2 boyutlu bir dizi resmine dönüştürün. 2 boyutlu dizi görüntüsünün her pikselinde, bant değerlerinin 6x1 matrisi bulunur. Bunu anlamak için aşağıdaki örnek oyuncağı inceleyin:

Kod Düzenleyici (JavaScript)

var array1D = ee.Array([1, 2, 3]);              // [1,2,3]
var array2D = ee.Array.cat([array1D], 1);     // [[1],[2],[3]]

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

array_1d = ee.Array([1, 2, 3])  # [1,2,3]
array_2d = ee.Array.cat([array_1d], 1)  # [[1],[2],[3]]

array1D vektörünün 0 ekseni boyunca değiştiğini gözlemleyin. array2D matrisi de bu özelliği taşır ancak ek bir boyutu vardır. Dizi görüntüsünde toArray(1) çağrısı yapmak, her pikselde cat(bandVector, 1) çağrısı yapmak gibidir. 2 boyutlu dizi resmini kullanarak, her pikselin yeşillik katsayılarından oluşan 2 boyutlu bir matris içerdiği bir resimle soldan çarpın:

Kod Düzenleyici (JavaScript)

// Do a matrix multiplication: 1x6 times 6x1.
// Cast the greenness Array to an Image prior to multiplication.
var greennessArrayImage = ee.Image(greenness).matrixMultiply(arrayImage2D);

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Do a matrix multiplication: 1x6 times 6x1.
# Cast the greenness Array to an Image prior to multiplication.
greenness_array_image = ee.Image(greenness).matrixMultiply(array_image_2d)

Sonuç olarak, her pikselin 1x6 yeşillik matrisinin (solda) ve 6x1 bant matrisinin (sağda) çarpımından elde edilen 1x1 matris olduğu yeni bir dizi resmi elde edilir. Görüntüleme amacıyla, arrayGet() ile normal, tek bantlı bir resme dönüştürün:

Kod Düzenleyici (JavaScript)

// Get the result from the 1x1 array in each pixel of the 2-D array image.
var greennessImage = greennessArrayImage.arrayGet([0, 0]);

// Display the input imagery with the greenness result.
Map.setCenter(-122.3, 37.562, 10);
Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image');
Map.addLayer(greennessImage, {min: -0.1, max: 0.13}, 'greenness');

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Get the result from the 1x1 array in each pixel of the 2-D array image.
greenness_image = greenness_array_image.arrayGet([0, 0])

# Display the input imagery with the greenness result.
m = geemap.Map()
m.set_center(-122.3, 37.562, 10)
m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image')
m.add_layer(greenness_image, {'min': -0.1, 'max': 0.13}, 'greenness')
m

Birden fazla püsküllü şapka bileşenini aynı anda hesaplamak ve sonucu görüntülemek için katsayı dizisi işlevinin tamamını kullanan tam bir örnek aşağıda verilmiştir:

Kod Düzenleyici (JavaScript)

// Define an Array of Tasseled Cap coefficients.
var coefficients = ee.Array([
  [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872],
  [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608],
  [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559],
  [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773],
  [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085],
  [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252],
]);

// Load a Landsat 8 image, select the bands of interest.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')
  .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']);

// Make an Array Image, with a 1-D Array per pixel.
var arrayImage1D = image.toArray();

// Make an Array Image with a 2-D Array per pixel, 6x1.
var arrayImage2D = arrayImage1D.toArray(1);

// Do a matrix multiplication: 6x6 times 6x1.
var componentsImage = ee.Image(coefficients)
  .matrixMultiply(arrayImage2D)
  // Get rid of the extra dimensions.
  .arrayProject([0])
  .arrayFlatten(
    [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']]);

// Display the first three bands of the result and the input imagery.
var vizParams = {
  bands: ['brightness', 'greenness', 'wetness'],
  min: -0.1, max: [0.5, 0.1, 0.1]
};
Map.setCenter(-122.3, 37.562, 10);
Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image');
Map.addLayer(componentsImage, vizParams, 'components');

Python kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap

Colab (Python)

# Define an Array of Tasseled Cap coefficients.
coefficients = ee.Array([
    [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872],
    [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608],
    [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559],
    [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773],
    [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085],
    [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252],
])

# Load a Landsat 8 image, select the bands of interest.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(
    ['B2', 'B3', 'B4', 'B5', 'B6', 'B7']
)

# Make an Array Image, with a 1-D Array per pixel.
array_image_1d = image.toArray()

# Make an Array Image with a 2-D Array per pixel, 6x1.
array_image_2d = array_image_1d.toArray(1)

# Do a matrix multiplication: 6x6 times 6x1.
components_image = (
    ee.Image(coefficients)
    .matrixMultiply(array_image_2d)
    # Get rid of the extra dimensions.
    .arrayProject([0])
    .arrayFlatten(
        [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']]
    )
)

# Display the first three bands of the result and the input imagery.
viz_params = {
    'bands': ['brightness', 'greenness', 'wetness'],
    'min': -0.1,
    'max': [0.5, 0.1, 0.1],
}
m = geemap.Map()
m.set_center(-122.3, 37.562, 10)
m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image')
m.add_layer(components_image, viz_params, 'components')
m

Bir dizi resminden bant alırken önce project() ile fazladan boyutlardan kurtulduğunuzdan, ardından arrayFlatten() ile tekrar normal bir resme dönüştürdüğünüzden emin olun. Çıkış şu şekilde görünecektir:

püsküllü şapka resmi
Şekil 1. Ponponlu şapka bileşenleri "parlaklık" (kırmızı), "yeşillik" (yeşil) ve "ıslaklık" (mavi).