Un ejemplo de la potencia de programación en QGIS usando PyQGIS: mejorando el histograma de capas raster.

En anteriores oportunidades he tratado el tema de programación en Sistemas de Información Geográfica SIG, especialmente en QGIS, también he detallado las capacidades de Python para el procesamiento y visualización de datos no espaciales (ciencia de datos) dentro de QGIS. Ambas tecnologías, Python con sus módulos científicos y el API de QGIS, son muy poderosas y versátiles, como resultado tenemos la bella interfaz de QGIS y asombrosos complementos (Plugins). Estas son razones por la cual este tema puede ser muy atractivo, aunque muchos profesionales de las ciencias geográficas pueden desestimarlo por su supuesta “complejidad”.

Aprender a programar en QGIS no es tan difícil como esperarías, sin embargo, si es muy amplio, ¿dónde comienzo?. La mejor forma de iniciar es plantearte un proyecto, algo que quieras hacer o mejorar, ese es el caso del presente artículo.

¿Qué desarrollar?

A mi parecer hay muy poco que mejorar en QGIS, no obstante, en ocasiones encuentras un detalle, por ejemplo el histograma que genera para las capas raster, que podría tener mayor funcionalidad. Al visualizar una imagen con su respectivo histograma, observamos un conjunto de datos desde dos perspectivas complementarias, su representación espacial y su distribución numérica. Si logramos integrarlas es posible extraer información útil.

Aclaratoria, entendemos por datos en formato raster las imágenes, superficies, modelos digitales de terreno, etc. Es decir, todos aquellos archivo que representan los elementos, variables en forma de una retícula (grilla) cuya unidad más pequeña es una celda (pixel).

Características del histograma que genera QGIS para las capas raster

Acceso: ciertamente su ubicación es ideal, el histograma es uno de los elementos que muestra la caja de diálogo de propiedades de la capa. Para desplegar el histograma cargue una capa raster, luego botón derecho > propiedades > seleccione la pestaña histograma. También, puede ver el histograma en el Panel de estilos de capas.

Características: El histograma es representado por línea o por finas barras (solo en el caso de valores enteros), permite hacer acercamientos, ver y marcar valores en el gráfico lo que a su vez permite modificar el contraste en la imagen, visualizar el histograma de las diferentes bandas.

Con fines de aprendizaje decidí crear una versión del histograma para capas Raster, al cual le fui agregando funcionalidad, aún está en desarrollo pero el producto hasta ahora obtenido me parece apto como demostración de lo posible de realizar con PyQGis.

Características histograma raster en QGIS
Características histograma raster en QGIS

Objetivo

Desarrollar una herramienta que facilite el análisis combinado de una imagen con su histograma integrando las diferentes tecnologías disponibles en QGIS.

Requerimientos

Que aspectos implico el desarrollo de la herramienta:

  • Lectura del contenido de archivos raster mediante PyQGis y Gdal
  • Diseño de la caja de diálogo mediante PyQt. Con respecto a los iconos de los botones de manera de garantizar la portabilidad del script utilice los iconos disponibles en la interfaz de QGis
  • Generación de histograma con matplotlib y su integración en un QWidget
  • Manejo de eventos de los elementos de matplotlib y de Qt
  • Estructuración del código en una clase (programación orientada a objetos) que permita su reutilización y ampliación
  • Manejo de la simbología de archivos raster mediante PyQGis, este es uno de los aspectos más diversos, aún no cubro todas las variantes disponibles

Demostración de la interfaz del histograma de raster

En el video el resultado de el desarrollo de un histograma para el análisis de imágenes raster con PyQGis.

¿He finalizado la herramienta?

No, faltan detalles por afinar, por ejemplo, el resaltado de partes de la imagen al seleccionar el histograma funciona solo cuando la clasificación está configurada con intervalos iguales. También, es de vital importancia evaluar posibles errores ante diversos formatos de capas debido al tipo de datos, extensión y peso de la imagen, proveedor etc.

Adicionalmente, puedo considerar extender la funcionalidad:

  • Añadir más parámetros al cálculo de estadísticas: coeficiente de variación, cuartiles, rango intercuartil, asimetría, curtosis entre otros
  • Representar en el gráfico estadísticas como la media y la desviación estándar
  • En el caso de la simbología multi banda resaltar en el gráfico las bandas que participan en la composición. Así como modificar los contrastes interactuando con el gráfico
  • Incorporar esta interfaz con otras enfocadas en el análisis y comparación de imágenes
  • Desarrollar un plugin y subirlo al repositorio de QGIS

Otros ejemplos de pequeños programas

He publicado otros ejemplos de pequeños scripts, cada vez más complejos

¿Qué hacer a continuación?

Como podrás ver las posibilidades de desarrollo son infinitas, puedes crear tus propias herramientas de uso diario, personalizar la interfaz.

Para una empresa, puede automatizarse el procesamiento de datos, tanto espaciales como no espaciales, modificar la interfaz para que sea más pertinente (enfocada) a sus actividades e intereses, automatizar la generación de análisis con sus gráficos y reportes. Por ejemplo:

Para agricultura de precisión seria posible generar herramientas que realicen procesos ETL, posteriormente la extracción de información útil de los datos de entrada, ya sean, de análisis edafológicos, mediciones de campo, imágenes e índices espectrales. El primer paso sería la generación de estadística descriptiva de los diferentes conjuntos de datos, para posteriormente pasar al análisis integrado (multivariado) de la información.

Luis Eduardo Perez Graterol es ingeniero de recursos naturales y autor de diversos cursos sobre QGIS y Python, desde los que puedes comenzar a programar en QGIS o manejar librerías de ciencia de datos de Python