martes, 24 de mayo de 2011

Procesamiento de imágenes en Python

El procesamiento digital de imágenes es un tema muy extenso del cual existe una gran cantidad de libros y tratados que explican a profundidad todas las técnicas disponibles para extraer características o información útil a partir de una imagen. En esta entrada del Blog, enunciaré brevemente algunas herramientas que se pueden usar con Python para una aplicación sencilla, haciendo uso de una cámara web conectada al PC.

El procesamiento de imágenes hoy en día tiene un gran rango de aplicaciones, entre las cuales podemos encontrar:
  • Identificación de vehículos infractores
  • Reconocimiento de rostros para seguridad
  • Seguridad en viviendas y locales comerciales
  • Vigilancia de movimiento de vehículos
  • Aplicaciones de automatización industrial y verificación de calidad de productos
  • Robótica y sistemas de visión de robots y autómatas
  • Entre otras...



Adquisición

Si se cuenta con sistema operativo Linux, y una webcam, es bastante sencillo adquirir imágenes a partir de la misma usando un script en Python, únicamente se deben tener instaladas las librerías de opencv (Open Source Computer Vision), y comprobar que la cámara se encuentre listada en los drivers para linux UVC. A continuación se muestran las líneas de código necesarias para tomar una fotografía usando la webcam y convertirla al formato de imagen de Python:

import opencv.adaptors
from opencv import highgui 
import Image

camera= highgui.cvCreateCameraCapture(0)

im = highgui.cvQueryFrame(camera)
mat = opencv.cvGetMat(im)
im = opencv.adaptors.Ipl2PIL(mat) 

Preprocesamiento

Por su parte, la librería de imágenes de python (PIL) contiene una gran cantidad de herramientas que permiten procesar la imagen de forma adecuada para analizarla. Así, es posible realizar diferentes tipos de transformaciones como rotación, traslación, aumento, reducción, efecto de lentes, operaciones matemáticas, diferentes tipos de filtrado para realzar características específicas, umbralización, binarización, etc.

Para realizar todas las operaciones mencionadas anteriormente, se tienen a disposición los siguientes módulos:
  • Image: Permite abrir, guardar, convertir, evaluar funciones y obtener información de imágenes.
  • ImageDraw: Permite agregar formas geométricas y texto a imágenes.
  • ImageEnhance: Permite mejorar la calidad de las imágenes, ajustando parámetros como brillo, contraste y nitidez.
  • ImageFilter: Es un módulo que incluye varios filtros que pueden ser aplicados fácilmente a cualquier tipo de imágenes.
  • ImageMath: Permite realizar operaciones matemáticas con imágenes.
Para más información sobre estos u otros módulos, puede consultar la página de documentación oficial de la librería PIL.

Procesamiento y extracción de características

Los procedimientos a realizar en este paso del análisis de imágenes dependen mucho de la aplicación específica para la cual se esté desarrollando. Sin embargo, la mayoría de veces es necesario umbralizar la imagen para tener una matriz binaria y extraer la características necesarias para identificar patrones en la misma.

Cuando se trabaja con imágenes binarias, generalmente se hace necesario aplicar operaciones morfológicas, mediante las cuales es posible filtrar ruido, mejorar regiones de interés o identificar formas específicas. De esta forma, la librería pymorph implementa las funciones morfológicas más comunes para el procesamiento de imágenes. Se debe tener en cuenta que esta librería no opera con objetos de tipo imagen PIL, sino que es necesario realizar la conversión a matriz bidimensional de python.

Para una referencia más completa sobre la librería pymorph, consultar la documentación oficial AQUI.

1 comentario: