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.
Existen en Internet varios rompecabezas lógicos donde la información debe ser colocada en una rejilla de datos, pero indudablemente, uno de los más populares es el conocido acertijo de Einstein. Aunque se le atribuye a Einstein, no hay evidencia que respalde esta afirmación. Se dice que solo el 2% de la población mundial puede resolverlo, pero en realidad no es tan difícil, todo lo que se necesita es lógica y deducción. En este artículo presentaremos un método basado completamente en operaciones matriciales para resolver este acertijo y cualquier otro similar.
Tenemos 5 casas de 5 colores diferentes alineadas y en cada una de ellas vive una persona de una nacionalidad diferente. Cada uno de los dueños bebe una bebida diferente, fuma una marca de cigarrillos diferente y tiene una mascota diferente. La pregunta es: ¿Quién es el dueño del pececito?