Я попытался использовать следующий код, но при экспорте своей карты я проверяю свои выходные данные в 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'
});
Пожалуйста, помогите мне, как решить эту проблему.
Вы экспортируете только один пиксель — для region
установлено значение point
. Все полосы на самом деле не равны 0, но любой инструмент, который вы используете для визуализации изображения, будет иметь проблемы с выбором хорошего растяжения, что даст вам черный пиксель.
Например, вы можете использовать image.geometry()
вместо pixel
в этом случае:
Export.image.toDrive({
image: constrained,
description: 'unmix',
scale: 3000,
region: image.geometry(),
maxPixels: 1e9,
fileFormat: 'GeoTIFF'
});
Я просто выбрал 3000
, чтобы ускорить экспорт. Вы должны быть в порядке как с 30 м, так и с 500 м.
Я могу получить только значение от 0 до 1 с масштабом 500 м, а не с 30 м. Масштаб 30 м дает мне значение от -3 до 3, и изображение выглядит странно. @DanielWiell
Я не понимаю, как это может быть. Я экспортировал это на 500 м, загрузил результат с Google Диска и закинул в QGIS. Это показывает красивую картинку, где первые полосы существенно растянуты между 0 и 1. code.earthengine.google.com/…
Большое спасибо. Я могу использовать экспортированное изображение на расстоянии 500 м. Не могли бы вы подсказать, как я могу изменить свой код для коллекции изображений? Мне интересно, как изменить мой код, чтобы применить метод разделения для изображений в одной строке и пути или изображений в нескольких строках и путях. Есть ли у вас какие-либо идеи? Пожалуйста, помогите мне изменить мой код для коллекции изображений. @DanielWell
Напишите для этого отдельный вопрос. Вам нужно предоставить много дополнительных сведений. Начните с конечной цели вашего упражнения — результата, который вы ищете. Как вы хотите объединить изображения в коллекции изображений и т. д.
Большое спасибо за ваш ответ. Он дает мне значения от 0 до 1, но меня интересует масштаб 3000. Он не дает мне изображение в реальном разрешении Landsat (30 м). Однако мне нужны дробные изображения с разрешением 500 м для сравнения с продуктами MDOIS. Как вы думаете, приемлемо ли экспортировать мои изображения с разрешением 500 м? @DanielWiell