Image classification/es: Difference between revisions
(image classification /es) |
mNo edit summary |
||
Line 311: | Line 311: | ||
== Más lecturas sobre clasificación con GRASS == | == Más lecturas sobre clasificación con GRASS == | ||
* Micha Silver: [ | * Micha Silver: [https://www.surfaces.co.il/analyzing-acacia-tree-health-in-the-arava-with-grass-gis/ Analyzing acacia tree health in the Arava with GRASS GIS] | ||
* Perrygeo: [http://www.perrygeo.net/wordpress/?p=104 Impervious surface deliniation with GRASS] | * Perrygeo: [http://www.perrygeo.net/wordpress/?p=104 Impervious surface deliniation with GRASS] | ||
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/159 Working with Landsat Data] | * Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/159 Working with Landsat Data] | ||
* Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/548 Canopy Quantification via Image Classification] | * Dylan Beaudette: [http://casoilresource.lawr.ucdavis.edu/drupal/node/548 Canopy Quantification via Image Classification] | ||
* [http://istgeo.ist.supsi.ch/site/node/24 Segmentazione o classificazione d'immagini con GRASS] ( | * [http://istgeo.ist.supsi.ch/site/node/24 Segmentazione o classificazione d'immagini con GRASS] (en italiano) | ||
* [http://www.mdpi.com/2220-9964/5/7/109 Di Palma, F.; Amato, F.; Nolè, G.; Martellozzo, F.; Murgante, B. 2016: A SMAP Supervised Classification of Landsat Images for Urban Sprawl Evaluation. ISPRS Int. J. Geo-Inf. 2016, 5, 109.] | |||
[[Category: Documentation]] | [[Category: Documentation]] | ||
[[Category: Tutorial]] | [[Category: Tutorial]] | ||
[[Category: Image processing]] | [[Category: Image processing]] | ||
[[Category: Languages/es]] | [[Category: Languages/es]] |
Latest revision as of 13:47, 5 August 2016
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).
- GRASS GIS 7: i.segment
- La clasificación de estos segmentos puede realizarse con los siguientes complementos: v.class.mlR, v.class.mlpy, v.class.ml.
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):
- http://landsathandbook.gsfc.nasa.gov/handbook/handbook_htmls/chapter11/chapter11.html
- Vea el LMIN/LMAX: "Table 11.2 ETM+ Spectral Radiance Range watts/(meter squared * ster * µm)"
- 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
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 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.
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
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.
- Moritz's steps and the main discussion: Object-based image classification in GRASS (nabble link)
- Moritz's steps in a nice guide by Martin, in Czech with images (English Google-translation)
- Alternative notes by Moritz: Classification of segments (nabble link)
- Pietro's steps and tools (nabble link)
- Another discussion about what variables to use: Object-based classification (nabble link)
- The source code of the classification tools (for inspiration in writing your own scripts):
- v.class.ml: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.ml/ (Pietro's tool)
- v.class.mlpy: http://svn.osgeo.org/grass/grass-addons/grass7/vector/v.class.mlpy/ (Vaclav's tool)
- i.mlpy.py: http://svn.osgeo.org/grass/sandbox/turek/i.mlpy.py (Stepan's tool)
- List of Python machine learning libraries:
- scikit-learn, http://scikit-learn.org/ (used by v.class.ml)
- mlpy, http://mlpy.sourceforge.net/ (used by v.class.ml, v.class.mlpy and i.mlpy)
- Pandas, http://pandas.pydata.org/
- Milk, http://luispedro.org/software/milk
Más lecturas sobre clasificación con GRASS
- Micha Silver: Analyzing acacia tree health in the Arava with GRASS GIS
- Perrygeo: Impervious surface deliniation with GRASS
- Dylan Beaudette: Working with Landsat Data
- Dylan Beaudette: Canopy Quantification via Image Classification
- Segmentazione o classificazione d'immagini con GRASS (en italiano)
- Di Palma, F.; Amato, F.; Nolè, G.; Martellozzo, F.; Murgante, B. 2016: A SMAP Supervised Classification of Landsat Images for Urban Sprawl Evaluation. ISPRS Int. J. Geo-Inf. 2016, 5, 109.