Экспортированное изображение черного цвета со значением 0

Я попытался использовать следующий код, но при экспорте своей карты я проверяю свои выходные данные в arcmap. Он полностью черный и значение равно 0. Я не знаю, что не так с моим кодом.

https://code.earthengine.google.com/476db72426a67e03a604b6712ce97ef4?hl=ar

// The purpose of this script is to estimate sub-pixel fractions
// of identifiable spectral "endmembers".  This involves finding
// "pure" areas to estimate the endmembers, some matrix algebra
// followed by the mapping of the fractional cover.

// Use the reflective bands. 
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];

// First, let's find a cloud free scene in our area of interest.
// Make a point using the geometry tools and name the import 'point'.
// Import Landsat 8 TOA data and name the collection 'l8'.
var image = ee.Image(l8
    .filterBounds(point)
    .filterMetadata('CLOUD_COVER','less_than', 2)
    .filter(ee.Filter.calendarRange(2020,2020,'year'))
    .filter(ee.Filter.calendarRange(10,12,'month'))
    .first())
    .select(bands);
    
  print(image)
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.3}, 'image');

// Now, delineate polygons of 'pure' regions.  Click +New Layer for 
// each polygon.  Name the imports 'bare', 'vegetation' and 'water'.
// Get the mean spectrum in each of the endmember polygons.
var bareMean = image.reduceRegion(ee.Reducer.mean(), bare, 30).values();
var waterMean = image.reduceRegion(ee.Reducer.mean(), water, 30).values();
var vegMean = image.reduceRegion(ee.Reducer.mean(), vegetation, 30).values();
var snowMean = image.reduceRegion(ee.Reducer.mean(), snow, 30).values();

// Optional: plot the endmembers
print(ui.Chart.image.regions(image, ee.FeatureCollection([
    ee.Feature(bare, {label: 'bare'}), 
    ee.Feature(water, {label: 'water'}),
    ee.Feature(vegetation, {label: 'vegetation'}),
    ee.Feature(snow, {label: 'snow'})]), 
  ee.Reducer.mean(), 30, 'label', [0.48, 0.56, 0.65, 0.86, 1.61, 3.2]));

// Turn the endmember lists into an array that can be used in unmixing.
// Concatenate the lists along the 1-axis to make an array.
var endmembers = ee.Array.cat([bareMean, vegMean, waterMean, snowMean], 1);
//print(endmembers)

// Turn the image into an array image, in which each pixel has a 2-D matrix.
var arrayImage = image.toArray().toArray(1);

// Perform the unmixing in array space using the matrixSolve image method.  
// Note the need to cast the endmembers into an array image.
var unmixed = ee.Image(endmembers).matrixSolve(arrayImage);

// Convert the result from an array image back to a multi-band image.
var unmixedImage = unmixed.arrayProject([0])
    .arrayFlatten([['bare', 'veg', 'water', 'snow']]);

// Display the result.
Map.addLayer(unmixedImage, {}, 'fractions');

// Constrained:constraining the result to be non-negative and sum to one.
var constrained = image.unmix([bareMean, vegMean, waterMean, snowMean], true, true);
Map.addLayer(constrained, {}, 'constrained fractions');

//Export output to Google Drive
Export.image.toDrive({
  image: constrained,
  description: 'unmix',
  scale: 30,
  region: point,
  maxPixels: 1e9,
  fileFormat: 'GeoTIFF'
});

Пожалуйста, помогите мне, как решить эту проблему.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы экспортируете только один пиксель — для region установлено значение point. Все полосы на самом деле не равны 0, но любой инструмент, который вы используете для визуализации изображения, будет иметь проблемы с выбором хорошего растяжения, что даст вам черный пиксель.

Например, вы можете использовать image.geometry() вместо pixel в этом случае:

Export.image.toDrive({
  image: constrained,
  description: 'unmix',
  scale: 3000,
  region: image.geometry(),
  maxPixels: 1e9,
  fileFormat: 'GeoTIFF'
});

Большое спасибо за ваш ответ. Он дает мне значения от 0 до 1, но меня интересует масштаб 3000. Он не дает мне изображение в реальном разрешении Landsat (30 м). Однако мне нужны дробные изображения с разрешением 500 м для сравнения с продуктами MDOIS. Как вы думаете, приемлемо ли экспортировать мои изображения с разрешением 500 м? @DanielWiell

Mbariz 22.11.2022 10:31

Я просто выбрал 3000, чтобы ускорить экспорт. Вы должны быть в порядке как с 30 м, так и с 500 м.

Daniel Wiell 22.11.2022 10:43

Я могу получить только значение от 0 до 1 с масштабом 500 м, а не с 30 м. Масштаб 30 м дает мне значение от -3 до 3, и изображение выглядит странно. @DanielWiell

Mbariz 22.11.2022 11:30

Я не понимаю, как это может быть. Я экспортировал это на 500 м, загрузил результат с Google Диска и закинул в QGIS. Это показывает красивую картинку, где первые полосы существенно растянуты между 0 и 1. code.earthengine.google.com/…

Daniel Wiell 22.11.2022 12:20

Большое спасибо. Я могу использовать экспортированное изображение на расстоянии 500 м. Не могли бы вы подсказать, как я могу изменить свой код для коллекции изображений? Мне интересно, как изменить мой код, чтобы применить метод разделения для изображений в одной строке и пути или изображений в нескольких строках и путях. Есть ли у вас какие-либо идеи? Пожалуйста, помогите мне изменить мой код для коллекции изображений. @DanielWell

Mbariz 22.11.2022 14:11

Напишите для этого отдельный вопрос. Вам нужно предоставить много дополнительных сведений. Начните с конечной цели вашего упражнения — результата, который вы ищете. Как вы хотите объединить изображения в коллекции изображений и т. д.

Daniel Wiell 22.11.2022 14:16

Другие вопросы по теме