Image classification/es

From GRASS-Wiki
Jump to: navigation, search

Clasificación de imágenes

Métodos de clasificación en GRASS

radiométrica
no supervisada
radiométrica
supervisada 1
radiométrica
supervisada 2
radiométrica y geométrica
supervisada
Prepocesamiento de imágenes r.smooth.seg (opcional, en caso de que los datos originales tengan ruido)
Segmentación i.segment
Preprocesamiento i.cluster i.class (monitorea digitalización), g.gui.iclass (en GRASS 70) i.gensig (usando mapas de entrenamiento) i.gensigset (usando mapas de entrenamiento)
Clasificación i.maxlik i.maxlik i.maxlik i.smap
Aclaraciones automático basado necesita digitalización previa necesita digitalización previa necesita digitalización previa
en estadísticas de imágenes de áreas de etremiento de áreas de entreamiento de áreas de entrenamiento

Es posible digitalizar áreas de entrenamiento con r.digit (no recomendado) o You can digitize training areas with either r.digit (not recommended), o la herramienta de digitalización de GRASS + v.to.rast (recomendado). En versiones < 7.0 era posible usar el módulo v.digit.


Preprocesamiento de imágenes (opcional)

  • r.smooth.seg - produce una aproximación suaviada de los datos y detecta discontinuidades. El módulo está basado en el modelo de variación Mumford-Shah para segmentación de imágenes. Usado como un análisis previo a la clasificación.
Para más detalles revise el maual r.smooth.seg. Este módulo anteriormente se llamaba r.seg.
  • i.segment - identifica segmentos (objetos) de datos de imágenes basado (actualmente) en un algoritmo de crecimiento y unión. El resultado de la segmentación puede ser útil (por si misma) como un paso previo a la clasificación, por ej. reduciendo el ruido y aumentando la velocidad de la clasificación.
    • Clasificación de estos segmentos: ver abajo en "Clasificación no supervisada".

Modo interactivo

  • i.class - Genera las firmas espectrales para una imagen al permitir al usuario marcar las regiones de interés.
El archivo de firmas puede ser usado como entrada para i.maxlik o como un archivo inicial (semilla) para i.cluster.
  • g.gui.iclass - Herramienta de clasificación supervisada de datos de imágenes.

Preprocesamiento

  • i.cluster - Genera firmas espectrales para tipos de cobertura en una imagen, usando un algoritmo de cluster.
El archivo de firmas resltante es usado como entrada para i.maxlik, para generar una clasificación no supervisada.
  • i.gensig - Genera estadísticas para i.maxlik a partir de capas de mapas ráster.
  • i.gensigset - Genera estadísticas para i.smap a partir de capas de mapas ráster.

Información relativa a i.cluster:

Clasificación no supervisada

Para una introducción, revise por ejemplo Cluster_analysis.

  • i.maxlik - Clasifica reflectancias espectrales de las celdas de datos de imágenes.
La clasificación está basada en la información de las firmas espectrales generada por i.cluster (ver abajo).

Vea el ejemplo de más abajo.

Clasificación supervisada

  • i.maxlik - Clasifica la reflectancia espectral de la celda de datos de imágenes.
La clasificación está basada en la información de las firmas espectrales generada ya sae con i.class, o i.gensig.
  • g.gui.iclass - Herramienta para clasificación supervisada de datos de imágenes.
  • i.smap - Realiza una clasificación de imágenes contextual (segmentación de imágenes) usando la estimación secuencial máxima a posteriori (SMAP).
  • En caso de mapas pancromaticos o de una cantidad limitada de canales, generalmente se recomienda generar canales sintéticos a través de análiss de texturas (r.texture).

Vea el ejemplo de más abajo.

Pequeño tutorial de clasificación

Se necesita: GRASS >= 6.4 . Las instrucciones para GRASS 7 están señaladas con un #GRASS7 al final del comando, si corre estas instrucciones en la consola de comandos de la GUI, copie la instrucción sin el # y todo lo que le sigue.

Se usan los datos del satélite Landsat preparados para los datos de muestra de North Carolina. Es un conjunto de datos multiespectrales en donde cada canal está guardado en un mapa separado.

Se usa la Localización North Carolina.

Calentando motores con Landsat TM

Ver qué mapas hay

 g.list rast 
 g.list type=rast mapset=landsat # GRASS7
 # definir la región a partir de uno de las bandas y mostrar la configuración de la región
 g.region rast=lsat7_2002_10 -p

Ver algunos mapas Landsat (1: azul, 2: verde, 3: rojo, 4: cercano al infrarojo, etc.)

 d.mon x0
 d.mon wx0 # GRASS7
 d.rast lsat7_2002_10
 d.rast lsat7_2002_20
 d.rast lsat7_2002_30 
 d.rast lsat7_2002_40

Consultar el valor de puntos individuales

 d.what.rast lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40

Histograma de un canal:

 d.histogram lsat7_2002_10
 d.erase

Crear vistas RGB (rojo,verde,azul) al vuelo, con colores verdaderos y falsos:

 d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30
 d.rgb b=lsat7_2002_70 g=lsat7_2002_20 r=lsat7_2002_30
 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_30
 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10

Revisar los canáles térmicos (codificados para ajustar a rango de datos 0-255):

  1. http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html
  2. Vea el LMIN/LMAX: "Table 11.2 ETM+ Spectral Radiance Range watts/(meter squared * ster * µm)"
  3. no se detalla el procedimiento, pero se usa r.mapcalc para convertir grados Kelvin/Celsius.
 # ver el canál térmico codificado
 d.rast lsat7_2002_61

Cálculo de NDVI como ejemplo de álgebra de mapas:

 r.mapcalc "ndvi = 1.0 * (lsat7_2002_40 - lsat7_2002_30)/(lsat7_2002_40 + lsat7_2002_30)"
 d.rast.leg ndvi
 r.colors ndvi color=ndvi
 d.rast.leg ndvi

Mostrar algunas "clases" seleccionadas de NDVI:

 d.erase
 d.rast ndvi val=0.3-1.0
 d.rast ndvi val=-1.0--0.1
 d.rast ndvi val=0.0-0.2
 d.rast ndvi val=0.0-0.3

Ver el canal pancromático, comparar la resolución:

 r.info -g lsat7_2002_80 
 r.info -g lsat7_2002_30
 g.region rast=lsat7_2002_80 -p
 d.erase -f
 d.rast lsat7_2002_80
 d.zoom # no usar en GRASS7
 d.rast lsat7_2002_30
 d.rast lsat7_2002_80
 

Clasificación de imágenes

Definir región al canal rojo:

 g.region rast=lsat7_2002_30 -p

Crear un grupo:

 i.group group=lsat7_2002 subgroup=lsat7_2002 \
   input=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70

Clasificación no supervisada

Generar estadísticas no supervisadas:

 i.cluster  group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt
 i.cluster  group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt # GRASS7
 # ver el archivo de reporte 
 cat lsat7_2002.txt # se puede usar también el comando gedit

Asignar pixeles a clases, revisar la calidad de la asignación:

 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class reject=lsat7_2002_reject
 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class reject=lsat7_2002_reject  # GRASS7
 # color compuesto falso
 d.mon x0 ; d.font Vera
 d.mon wx0; d.font Vera # GRASS7
 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10
 # classification result
 d.mon x1 ; d.font Vera
 d.mon wx1 ; d.font Vera # GRASS7
 d.rast.leg lsat7_2002_class
 # mapa de rechazo
 d.mon x2 ; d.font Vera
 d.mon wx2; d.font Vera  # GRASS7
 d.rast.leg lsat7_2002_reject
 # histograma de rechazo
 d.mon x3 ; d.font Vera
 d.mon wx3; d.font Vera  # GRASS7
 d.histogram lsat7_2002_reject


Mapa NC Landsat 2002 - falso color compuesto
Clasificación no supervisada
Histograma de rechazo de la clasificación no supervisada
Mapa de rechazo de la clasificación no supervisada


Juegue con diferentes separaciones de los clusters:

 i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=10 reportfile=lsat7_2002.txt separation=1.5
 i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=10 reportfile=lsat7_2002_2.txt separation=1.5 # GRASS7
 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class2 reject=lsat7_2002_reject2
 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class2 reject=lsat7_2002_reject2  # GRASS7
 d.mon x4
 d.mon wx4  # GRASS7
 d.rast.leg lsat7_2002_class2
 d.rast.leg lsat7_2002_reject2
 d.rast.leg lsat7_2002_reject
 d.rast.leg lsat7_2002_reject2
 d.rast.leg lsat7_2002_reject
 d.rast.leg lsat7_2002_reject2
 d.rast.leg lsat7_2002_class2

Comparar con RGB:

 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10
 d.rast lsat7_2002_class2 cat=1 -o
 d.rast lsat7_2002_class2 values=1 -n  # GRASS7
 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10
 d.rast lsat7_2002_class cat=1 -o
 d.rast lsat7_2002_class values=1 -n   # GRASS7
 d.rgb b=lsat7_2002_70 g=lsat7_2002_50 r=lsat7_2002_10
 d.rast lsat7_2002_class cat=1 -o
 d.rast lsat7_2002_class values=1 -n   # GRASS7

Un tercer intento con más clases:

 i.cluster group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt 
 i.cluster group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig classes=15 reportfile=lsat7_2002.txt  # GRASS7
 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 sigfile=lsat7_2002_sig class=lsat7_2002_class3 reject=lsat7_2002_reject3
 i.maxlik group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_sig output=lsat7_2002_class3 reject=lsat7_2002_reject3 # GRASS7
 d.rast.leg lsat7_2002_class3
Clasificación no supervisada con 15 clases

Clasificación supervisada

Lazar la GUI para digitalizar:

 g.gui wxpython

Ahora digitalice las áreas de entrenamiento de agua, asfalto, bosque, suelo descubierto en el compuesto RGB en la GUI. Digitalizar polígonos/centroides con atributos. La ventaja: sabemos que clases son.

Mapa NC Landsat 2002 - áreas de entrenamiento

Asignar también una ID numérica para cada clase en una nueva columna:

 v.db.select lsat7_training
 v.db.addcol lsat7_training col="id integer"
 v.db.addcolum lsat7_training col="id integer""id integer"   # GRASS7
 v.db.select lsat7_training
 v.db.update lsat7_training col=id where="name = 'water'" val=1
 v.db.update lsat7_training col=id where="name = 'forest'" val=2
 v.db.update lsat7_training col=id where="name = 'asphalt'" val=3
 v.db.update lsat7_training col=id where="name = 'soil'" val=4
 v.db.select lsat7_training

Transformar mapa vectorial de entrenamineto a modelo ráster:

 g.region vect=lsat7_training align=lsat7_2002_10 -p
 v.to.rast in=lsat7_training out=lsat7_training use=attr col=id labelcol=name --o
 v.to.rast input=lsat7_training out=lsat7_training use=attr attribute_column=id label_column=name --o   # GRASS7
 
 d.mon x0
 d.mon wx0   # GRASS7
 d.rast.leg lsat7_training 

Generar estadísticas a partir de áreas de entrenamiento:

 i.gensigset group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap training=lsat7_training
 i.gensigset group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap training=lsat7_training   # GRASS7

Realizar clasificación supervisada:

 i.smap group=lsat7_2002 subgroup=lsat7_2002 sig=lsat7_2002_smap  out=smap
 i.smap group=lsat7_2002 subgroup=lsat7_2002 signaturefile=lsat7_2002_smap  out=smap   # GRASS7

Colorear:

 r.colors smap rules=- << EOF
1 aqua
2 green
3 180 180 180
4 brown
EOF
 d.rast.leg smap
 d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30
Mapa NC Landsat 2002 - compuesto de color falso
Clasificación supervisada SMAP

Vectorizar el resultado:

 r.to.vect smap out=smap feat=area
 r.to.vect smap out=smap type=area   # GRASS7
 d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30
 d.vect smap  type=boundary col=red

Y ahí lo tienes :)


Clasificación basada en objetos

Created based on Summary of object-based classification possibilities in GRASS GIS (June 2014). Feel free to merge this with other content or with different page.


Más lecturas sobre clasificación con GRASS