lunes, 7 de agosto de 2017

Nuevas Opciones para generar leyendas con QGIS 3.0

En una entrada anterior, se mostró una de las novedades sobre estilos que se viene con el QGIS 3.0, en específico la demostración fue sobre una capa de puntos, mostrando la opción "Point cluster". En esta oportunidad, empleando la misma fuente de datos, me permitiré hablar sobre una opción que tenemos para mostrar en nuestro panel de capas, un nuevo estilo de simbología, el mismo que luego podrá ser representado dentro de un mapa como leyenda.

Generando una leyenda colapsada (Collapsed legend)


En realidad es muy sencillo el procedimiento, pero vamos a tener que considerar unos detalles, como por ejemplo, primero debemos revisar nuestra tabla de atributos, sobre todo porque en algunos casos será necesario hacer algunos ajustes. Para esta demostración estoy empleando un capa vectorial de puntos, representando un grupo de centros poblados del Departamento de Apurímac, el mismo contiene un campo denominado "TOT_POB99", con valores de población. 
Si desean los datos para practicar lo pueden descargar desde aquí.

Paso 1: Debemos generar un campo que represente valores enteros que guarden relación o proporción sobre los valores de población, para nuestro caso, el grupo de centros poblados presenta valores desde 500 hasta 7731, por lo tanto, se ha creado el campo "CATEG_POB", con valores de 5, 10, 15 y 20, los cuales considerándose rangos específicos deberán cubrir todos de valores de población.

Figura 1: Ajustando nuestra tabla de atributos

Paso 2: Generar una simbología simple de puntos, pero que el tamaño del marcador esté activado para que esté definido por datos de un campo específico, en este caso de nuestro campo "CATEG_POB".


Figura 2: Configurando para que el tamaño del marcador sea definido por datos

Paso 3: Ahora podemos ir a las opciones avanzadas para generar simbología, seleccionando la opción denominada "Data-defined size legend". Es importante primero realizar el paso anterior, porque de lo contrario no se activará esa opción.

Figura 3: Activando la opción Data-defined size legend


Paso 4: Debemos generar nuestra leyenda colapsada, para ello debemos ir a dicha opción y luego añadir manualmente los tamaños de las clases, tal como lo hemos configurado previamente, es decir desde valores de 5 a 20, para que a su costado podamos incluir el valor real de la población que queremos representar.


Figura 4: Generando una "leyenda colapsada"


Paso 5: Finalmente, veremos que aparecerá dicha simbología en nuestro panel de capas, por lo tanto, ahora podemos representarlo en un mapa, para que lo podamos imprimir.

Figura 5: Vista del resultado de nuestra leyenda generada

Editando la simbología


Al ver el primer resultado, me pregunté si podría hacer que los símbolos tengan colores diferentes por cada tamaño generado, por lo tanto, lo que hice fue generar una simbología de tipo "Graduated", para lograr generar con ello una rampa de coloración, claro está en función a los datos de población.
Con la finalidad de que se mantenga los rangos similares, se optó que la opción del modo de separación de las 4 clases sea por "rupturas naturales".

Figura 6: Generando una simbología graduada

Con este cambio, vamos a visualizar nuestros valores en una leyenda compuesta por dos simbologías, la que ya habíamos generado anteriormente y la otra que representa una coloración establecida por nosotros.

Figura 7: Vista del resultado incorporando coloración graduada


En general me parece interesante esta nueva opción que vendría en la nueva versión del QGIS 3.0, les invito a probarlo en la versión de desarrollo del QGIS.


martes, 1 de agosto de 2017

Complementos QGIS para Clasificación Supervisada con Imágenes Sentinel-2, Parte 2









Con la finalidad de completar lo ofrecido, ahora trataremos sobre el plugin kNN classifier, el cual emplea el método K -vecinos más cercanos, en inglés K-Nearest Neighbors Algorithm (KNN), logrando crear una nueva capa con los píxeles clasificados, además de realizar la evaluación de la precisión del proceso de clasificación. Se debe mencionar que los principios de las funciones y del trabajo del plugin están basados en el paper de la referencia 1.

Preparando los datos:


Seguiremos empleando la misma fuente de datos con la que venimos trabajando en la entrada anterior,  es decir nuestra imagen compuesta del satélite Sentinel-2, del mismo modo se trabajará con nuestra capa vectorial de las áreas de entrenamiento, la cual deberá ser modificada, teniendo en cuenta los requisitos del plugin.

En resumen el plugin KNN classifer requiere lo siguiente:

  • Un archivo raster multibanda con la extensión TIF, en nuestro caso tenemos una imagen del Sentinel-2 compuesta por cuatro bandas (comb2348_test.tif).
  • Un archivo Shapefile que contenga un campo con la clasificación (roi_set16_test1.shp), pero además los descriptores requeridos, en este caso serán los valores de las bandas contenidos en cada uno de los polígonos (45), para lo cual vamos a emplear una herramienta ubicada en la menú raster, denominada "Estadísticas de zona".

Lo primero que haremos será aplicar "Estadísticas de zona", considerando nuestra imagen multibanda y la capa vectorial, para ello se considerará el valor de la media de cada una de las bandas. 

Figura 1: Aplicando Estadísticas de zona para recopilar datos de nuestra imagen por cada banda


El proceso se repite para las demás bandas, obteniendo al final cuatro campos con los valores medios de las bandas, los que ahora serán considerados como nuestros descriptores.


Figura 2: Adición de los descriptores con valores de las bandas de la imagen raster


Empleo del KNN Classifer


Ahora podemos activar el plugin desde nuestra barra de herramientas, luego del cual nos aparecerá una ventana (Ver Figura 3), en donde dentro de la pestaña "Basic", se especifica nuestra capa raster y luego nuestra capa vectorial actualizada. Posteriormente hay que indicarle lo siguiente:
  • Una carpeta de salida de nuestros resultados.
  • El número de vecinos más cercanos (k), es decir el número de vectores de muestra (polígonos) más cercanos de acuerdo con la distancia.
  • La selección de las bandas disponibles para ser considerados.
  • Lista de los descriptores provenientes de la tabla de atributos de la capa vectorial, solo deben ser considerados los campos relevantes para la clasificación.
  • El parámetro a ser clasificado, existiendo la opción de realizar una clasificación con múltiples parámetros.
  • Finalmente se indica el modo de clasificación, el cual está en relación al parámetro a ser clasificado, "c" para el parámetro categórico y "n" para el parámetro continuo.

Es importante mencionar que debemos emplear la tecla "Ctrl" para realizar múltiples selecciones, como las bandas y los descriptores.

Figura 3: Configuración requerida para ejecutar el plugin kNN


Primeros Resultados Obtenidos


Luego de ejecutar el plugin en nuestro panel de capas aparecerá la nueva capa raster con el resultado de la clasificación, el cual presenta la siguiente estructura: SC_ + nombre de la imagen + nombre del parámetro + _valor de k + modo de clasificación (SC_comb2348_test2Clase_ID_3c). Luego para visualizar mejor podemos emplear el estilo que venimos trabajando.

Figura 4: Vista del resultado de clasificación con la configuración básica


También se genera un archivo de texto (.txt), con la evaluación de la precisión del algoritmo empleado con los valores ingresados, el cual se almacena en la carpeta de salida elegida. La interpretación del mismo sería:

  • OA: Precisión general - todos los píxeles clasificados correctamente (todos los tipos) / todos los píxeles clasificables (todos los tipos)
  • PA: Precisión de los "productores" - Muestra el porcentaje de cuántos píxeles de cada tipo se clasifican correctamente. Correctamente clasificado (de un solo tipo) dividido por el número total de píxeles de prueba del mismo tipo de acuerdo con los datos de referencia. Para nuestro ejemplo se muestran seis (6) valores que corresponden a las clases consideradas.
  • UA: Precisión de los usuarios - Muestra la probabilidad de que el tipo específico realmente represente ese tipo. Correctamente clasificados (de un solo tipo) / clasificados (de un solo tipo).
  • KHAT: Este valor describe qué tan bien el algoritmo kNN clasifica los píxeles si se compara con el clasificador aleatorio. Por lo tanto, valores cercanos a 1 indicarán un buen desempeño del algoritmo.
En nuestro caso obtuvimos un KHAT igual a 0.859, lo que significa que la clasificación es un 86% mejor que un clasificador aleatorio proporcionado.


Figura 5: Vista del resultado de la evaluación del algoritmo en un archivo de texto


Es recomendable ir probando valores de k distintos para ver el valor que mejor se ajusta, en este caso luego de realizar pruebas con otros valores, se comprobó que el valor de 3 es el más adecuado. Para tener otros criterios al momento de elegir este parámetro, recomiendo revisar la referencia 2.


Editando nuestra configuración para clasificar


Ahora vamos a probar algunas otras opciones que tenemos, todo ello con la finalidad de personalizar nuestra configuración inicial. Para ello, en primer lugar nos debemos ir a la pestaña "Advance", desde aquí veremos que podemos realizar algunos ajustes:

  • Distance calculation: La modificación de esta opción que por defecto está marcado en "Euclidean", puede alterar la velocidad en el procesado para obtener los resultados; esto se debe a que ambos métodos de cálculo emplean distintas fórmulas, siendo la de Manhattan, la que consume menor tiempo de procesado. El principio de ambos se puede resumir si apreciamos la Figura 6, en donde podemos apreciar las fórmulas que consideran ambos métodos:

Figura 6: Representación gráfica de los métodos de cálculo de distancias (Fuente: Ref. 2)


  • Mask layer: Te permite incorporar una capa raster que indique solo aquellos píxeles que deben ser clasificados, dicha capa debe contener valores de 0 (píxeles que no son considerados) y 1 (píxeles a ser considerados).
  • GeoDistance: Proporciona al usuario una opción para seleccionar datos de muestra a la distancia deseada desde un píxel clasificable. Esta opción limita nuestros datos de muestra y reduce la influencia de las muestras ubicadas más lejos. La distancia se mide en kilómetros [km]. Al habilitar esta opción, el usuario debe verificar que los datos de entrenamiento tienen columnas denominadas "x" e "y" que contienen coordenadas de los puntos de datos de entrenamiento.
  • Feature weights: Te permite realizar un tipo de ponderación a nuestros descriptores, por lo tanto valores mayores a 1 incrementa la significancia del descriptor; los valores deben estar separados por comas.

Figura 7: Configuración de opciones avanzadas del plugin


En resumen, tal como se aprecia en la Figura 7, se seleccionó a "Manhattan" como método de cálculo de la distancia, no se activo ninguna capa máscara, se indicó a 1 km como GeoDistance, pero al momento de ejecutar el algoritmo, se mostró la advertencia que no se cuenta con suficientes puntos de muestreo, lo cual es comprensible, teniendo en cuenta la reducida extensión con la que estamos trabajando, también se habilitó la opción de estandarización y finalmente la generación de ponderación, se le asignó mayor peso a las bandas 3 y 4, las que corresponden a las bandas roja e infrarroja del Sentinel-2 respectivamente.

Figura 8: Resultado obtenido al modificar algunos parámetros.

Si apreciamos la Figura 8, veremos que el resultado no fue satisfactorio si lo comparamos con nuestro primer resultado, esto nos permite descartar la opción de emplear "Manhattan" como método de cálculo de la distancia. Por lo tanto, si mantenemos los cambios y volvemos a emplear "Euclidean" obtendremos un resultado similar al primero, pero visualmente se comprueba que existe algunas mejoras.

Figura 9: Resultado de la clasificación empleando ponderaciones


Bueno, con esta parte cumplo con lo ofrecido, teniendo la intensión de poder mostrar otras opciones que tenemos para realizar una clasificación supervisada. Para que puedan profundizar sobre esta metodología, recomiendo revisar la referencia 3, en donde el autor del plugin explica detalladamente las características del mismo y que por mi parte traté de resumirlas en esta entrada.

Referencias:

  1. http://www.sciencedirect.com/science/article/pii/S0034425701002097
  2. http://www.oldemarrodriguez.com/yahoo_site_admin/assets/docs/Presentación_-_KNN.20085205.pdf
  3. https://github.com/m6ev/kNN/blob/master/kNN_Documentation.pdf