Как посчитать сумму пикселей в каждом классе в классифицированном изображении (Landsat) в Google Earth Engine?
Я делаю диссертацию об изменениях ледника. Я провел контролируемую классификацию изображения Landsat 8 и хотел бы подсчитать, сколько пикселей в каждом классе. Я хочу сделать диаграмму, кстати.
Но я застрял, мой код работает с ошибкой. Я пытался использовать метод ui.Chart.image.byClass() с указанными параметрами, но это не работает.
Мой код:
var img = ee.Image('LANDSAT/LC8_L1T_TOA/LC81940282016238LGN00') ;
// Add pseudocolor image
Map.addLayer(img, {bands: ['B6', 'B5', 'B4'] }, 'Pseudocolor image' ) ;
// Training points for classification - Point geometries
var points = [class1,class2,class3, class4, class5] ;
var trainingPoints = ee.FeatureCollection(points) ;
var training = img.sampleRegions(trainingPoints, ['class'] ,30) ;
var trained = ee.Classifier.minimumDistance().train(training, 'class' ) ;
var classified = img.classify(trained) ;
var palette = ['red','red', '#696969' , '#90EE90' , '#008000' ] ;
Map.addLayer(classified, {min: 0 , max : 5 , palette : palette }, 'L8
classified' ) ;
print(classified);
var options = {
lineWidth: 1,
pointSize: 2,
hAxis: {title: 'Classes'},
vAxis: {title: 'Num of pixels'},
title: 'Number of pixels in each class.'
};
var chart = ui.Chart.image.byClass({
image : classified ,
classBand : 'classification',
region : aletsch //<-- A previousy defined line type geometry
}).setOptions(options) ;
И ошибка, которую он выдает:
Dictionary.get: словарь не содержит ключ: группы.
Есть ли другие инструменты для подсчета количества пикселей в каждом классе?
1 ответ
То, что вам не хватает, это группа, которую нужно собрать. Earth Engine знает, что вы хотите использовать "классификацию" для группировки результатов, но затем не может найти другую полосу для подсчета (или суммирования или уменьшения каким-либо образом). Вот один из вариантов:
var pixelChart = ui.Chart.image.byClass({
image: ee.Image(1).addBands(classified),
classBand: 'classification',
region: region,
scale: 30,
reducer: ee.Reducer.count()
}).setOptions(options);
Это подсчитывает количество пикселей в постоянном изображении 1. Возможно, лучшим вариантом будет суммирование площади (в квадратных метрах):
var areaChart = ui.Chart.image.byClass({
image: ee.Image.pixelArea().addBands(classified),
classBand: 'classification',
region: region,
scale: 30,
reducer: ee.Reducer.sum()
});
Смотрите также этот урок. Кстати, всегда указывайте масштаб.