En este artículo, el último de esta serie, mostraremos una implementación en JavaScript que cubre toda la teoría vista en los tres artículos anteriores. También explicaremos cómo utilizar el objeto canvas de HTML5 para que puedas hacer tu propia implementación de los conceptos de procesamiento de imágenes.
El editor de imágenes usando JavaScript que se presenta en este artículo, permite aplicar filtros y realizar transformaciones a cualquier imagen que seleccione. Además, cuando se mueve el cursor sobre la imagen, se puede ver, debajo de la imagen, una matriz de 5x5 de los píxeles que rodean el píxel que se encuentra en la posición del cursor.
En el procesamiento digital de imágenes existe un grupo de transformaciones que reciben las coordenadas de un píxel como entrada, y retornan las nuevas coordenadas donde el píxel debe ser colocado; de forma que, al computar estas trasformaciones para todos los píxeles de una imagen, se obtiene una nueva imagen.
Nos centraremos en un tipo de estas transformaciones, las transformaciones afines, las cuales preservan la colinealidad (puntos y líneas rectas, planos, etc.). Las transformaciones afines mapean puntos en nuevos puntos aplicando una combinación lineal de operaciones de traslación, rotación, escalado y transvección.
En el artículo anterior explicamos como una imagen puede ser representada como una matriz de píxeles, donde cada píxel se expresa como un vector tridimensional, compuesto por la cantidad de rojo, verde y azul del color. En este artículo, vamos a dar algunos ejemplos sobre el uso del álgebra lineal en el procesamiento digital de imágenes.
Un tipo de procesamiento de imágenes son los llamados filtros. Entre los más utilizados se encuentran: el ajuste de brillo, contraste y colores, la conversión a escala de grises, la inversión de color (negativo), la corrección gamma, el desenfoque y la reducción de ruido.
Cuando pensamos en el álgebra lineal, la primera idea que nos viene a la mente es un sistema de ecuaciones lineales que necesita ser resuelto, o su variante gráfica más sencilla, un plano cartesiano con dos rectas, para hallar el punto de intersección; pero lo que probablemente muchos no saben es que herramientas como Photoshop o librerías de funciones como OpenGL o DirectX hacen un amplio uso del álgebra lineal para muchas de sus funcionalidades.
En esta serie de artículos abordaremos algunos conceptos básicos de la aplicación del álgebra lineal en el Procesamiento de Imágenes. En el primer artículo nos centraremos en sus aplicaciones y cómo representar una imagen como una matriz, en el segundo y tercero vamos a exponer algunas de las operaciones con matrices en una imagen, y en el último mostraremos algunos ejemplos prácticos en JavaScript.
En la primera parte de este artículo formulamos el acertijo de Einstein en términos de matrices, y se presentaron tres operaciones con matrices que serán la base para un algoritmo que permita resolver el enigma. En esta parte vamos a estar hablando de este algoritmo, y una implementación en JavaScript que permitirá resolver este enigma y cualquier otro enigma similar.
Hay algunos lenguajes de programación como Prolog, diseñados para funcionar directamente con hechos lógicos, donde se pueden resolver problemas lógicos de una manera natural. Mediante el uso de la formulación matricial podemos utilizar cualquier lenguaje de programación para resolver este tipo de acertijos. Aquí proporcionamos la implementación, en JavaScript, del objeto matriz con los tres operadores básicos utilizados para resolver los acertijos. La selección de JavaScript no es arbitraria, ya que el mismo permite mostrar la eficacia del algoritmo en este mismo artículo.