Преобразование массива изображений Google Earth Engine в массив Numpy (каждый пиксель представляет собой массив значений диапазонов); (Python) - PullRequest
0 голосов
/ 13 февраля 2020

Вот пример получения изображения Sentinel-2 из Google Earth Engine

import ee

# Sentinel 2 Image Collection
s2_image_collection = ee.ImageCollection("COPERNICUS/S2_SR")

# Defining bounds
sls_latitude = 37.424160
sls_longitude = -122.167951
sls_polygon = ee.Geometry.Polygon(
    coords=[
      ee.Geometry.Point(-122.170884, 37.446027),
      ee.Geometry.Point(-122.152749, 37.430515),
      ee.Geometry.Point(-122.174323, 37.419214),
      ee.Geometry.Point(-122.189342, 37.429405),
     ]
)

bounds = sls_polygon

start = ee.Date('2019-10-01');
finish = ee.Date('2019-12-31');

filteredCollection = s2_image_collection.filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 15))\
                                        .filterBounds(bounds)\
                                        .filterDate(start, finish)

# Get First Image in Collection
image = filteredCollection.first().clip(bounds)

Теперь, чтобы преобразовать изображение в «Array Image», где каждый пиксель является массивом значений полосы, я Я следую инструкциям здесь: https://developers.google.com/earth-engine/arrays_array_images#array -изображения .

# Now select the bands of interest
image_select = image.select(['B4', 'B3', 'B2']);

# Make an Array Image, with a 1-D Array per pixel.
arrayImage1D = image_select.toArray();

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

А потом, когда я использую getInfo(), я получаю:

arrayImage1D.getInfo()

{'type': 'Image',
 'bands': [{'id': 'array',
   'data_type': {'type': 'PixelType',
    'precision': 'int',
    'min': 0,
    'max': 65535,
    'dimensions': 1},
   'dimensions': [324, 299],
   'origin': [7174, 5532],
   'crs': 'EPSG:32610',
   'crs_transform': [10, 0, 499980, 0, -10, 4200000]}],
 'properties': {'system:footprint': {'type': 'Polygon',
   'coordinates': [[[-122.17088399999999, 37.446027],
     [-122.189342, 37.429405],
     [-122.174323, 37.419214],
     [-122.15274900000004, 37.430515],
     [-122.17088399999999, 37.446027]]]}}}

Так теперь мои вопросы:

  1. Почему размеры показывают [324, 299] для arrayImage1D? Разве это не должен быть одномерный массив?
  2. Как я на самом деле вижу значения для этого массива? Первоначально я хотел преобразовать в массив numpy, но, может быть, это не то, что я хочу сделать?
  3. В действительности я пытаюсь начать с коллекции изображений, в которой много изображений курс года для того же места. Я хочу взять разность каждого изображения во времени. Другими словами, для изображения 2019-01-05 получите массив значений диапазона каждого пикселя и сравните его с изображением для того же местоположения 2019-01-01. Повторите это в течение года и сохраните распределение различий. Какой лучший способ сделать это? Будет ли преобразование в массив numpy или я должен использовать TFRecord (https://developers.google.com/earth-engine/tfrecord; Экспорт массива изображений в TFRecord в Google Earth Engine )?
...