4 votos

Histograma de imagen clasificada en Google Earth Engine

Estoy usando Google Earth Engine para ejecutar una clasificación supervisada y quiero visualizar, para cada clase en mi clasificación, la distribución de DN o Reflectancia en cada banda de una imagen Landsat.

La manera en que visualizo el resultado es la siguiente: Me gustaría tener un histograma como el que se muestra a continuación para cada clase en mi imagen clasificada ingresa la descripción de la imagen aquí

¿Cómo selecciono una propiedad de una capa (en este caso, el tipo de cobertura de la tierra) para crear un histograma de esos píxeles?

usando ejemplos de GEE:

    // Ampliar la clasificación de cobertura de tierra MODIS (250m) a Landsat
// resolución (30m) usando un clasificador supervisado.

var geometry = /* color: #ffc82d */ee.FeatureCollection(
        [ee.Feature(
            ee.Geometry.Polygon(
                [[[29.9761962890625, 31.592573630393357],
                  [29.981689453125, 30.111869849235248],
                  [32.574462890625, 30.116621582819374],
                  [32.530517578125, 31.620643692450585]]]),
            {
              "system:index": "0"
            })]);

// Utilizar la clasificación de cobertura de tierra MCD12 como datos de entrenamiento.
var modisLandcover = ee.Image('MODIS/051/MCD12Q1/2001_01_01')
  .select('Land_Cover_Type_1');

// Una paleta para visualizar imágenes de cobertura de tierra.
var landcoverPalette = [
    'aec3d4', // agua
    '152106', '225129', '369b47', '30eb5b', '387242', // bosque
    '6a2325', 'c3aa69', 'b76031', 'd9903d', '91af40',  // arbusto, pasto, sabana
    '111149', // humedales
    '8dc33b', // tierras de cultivo
    'cc0013', // urbano
    '6ca80d', // mosaico de cultivos
    'd7cdcc', // nieve y hielo
    'f7e084', // estéril
    '6f6f6f'  // tundra
];

// Un conjunto de parámetros de visualización utilizando la paleta de cobertura de tierra.
var landcoverVisualization = {palette: landcoverPalette, min: 0, max: 17, format: 'png'};
// Centrar sobre nuestra región de interés.
Map.centerObject(geometry, 11);
// Dibujar la imagen de cobertura de tierra MODIS.
Map.addLayer(modisLandcover, landcoverVisualization, 'Cobertura de tierra MODIS');

// Cargar y filtrar datos Landsat.
var l7 = ee.ImageCollection('LANDSAT/LE07/C01/T1')
    .filterBounds(geometry)
    .filterDate('2000-01-01', '2001-01-01');

// Dibujar el composite Landsat, visualizando bandas de color verdadero.
var landsatComposite = ee.Algorithms.Landsat.simpleComposite({
  collection: l7,
  asFloat: true
});
Map.addLayer(landsatComposite, {min: 0, max: 0.3, bands: ['B3','B2','B1']}, 'Composite Landsat');

// Crear un conjunto de entrenamiento muestreando las imágenes apiladas.
var training = modisLandcover.addBands(landsatComposite).sample({
  region: geometry,
  scale: 30,
  numPixels: 1000
});

// Entrenar un clasificador utilizando los datos de entrenamiento.
var classifier = ee.Classifier.cart().train({
  features: training,
  classProperty: 'Land_Cover_Type_1',
});

// Aplicar el clasificador al composite original.
var upsampled = landsatComposite.classify(classifier);

// Dibujar la imagen de cobertura de tierra ampliada.
Map.addLayer(upsampled, landcoverVisualization, 'Cobertura de tierra ampliada');

// Mostrar el área de entrenamiento.
Map.addLayer(ee.Image().paint(geometry, 1, 2), null, 'Región de entrenamiento');

3voto

wenhoo Puntos 18

Mi solución rápida sería para una clase (por ejemplo, agua):

  • enmascarar píxeles de agua de la imagen clasificada
  • agregar valores de banda DN de Landsat
  • crear histograma de la imagen

    var agua = upsampled.eq(0) agua = agua.selfMask()

    Map.addLayer(agua, {}, "Agua")

    agua = agua.addBands(landsatComposite).select('B[1-4]')`

    // Predefinir algunas opciones de personalización. var opciones = { title: 'Agua - histograma DN Landsat 7, bandas 1-4', fontSize: 20, hAxis: {title: 'DN'}, vAxis: {title: 'conteo de DN'}, series: { 0: {color: 'Azul'}, 1: {color: 'Verde'}, 2: {color: 'Rojo'}, 3: {color: 'Magenta'}}};

    // Crear el histograma, establecer las opciones. var histograma = ui.Chart.image.histogram(agua, geometría, 300) .setSeriesNames(['Azul', 'Verde', 'Rojo', 'NIR']) .setOptions(opciones);

    print(histograma)

enter image description here

Enlace al script completo: https://code.earthengine.google.com/a4b56b96f8e05fba7a6b95649acaf8cd

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X