Post on 30-Dec-2015
description
PIXELACIÓN DE IMÁGENES AVANZADA USANDO EL ALGORITMO SLIC
Pablo Barrientos Lobato
Antonio Borrego Aristu
Daniel Cáceres Maña
Procesamiento de Imágenes Digitales
ÍNDICE
1. Introducción
2. Planteamiento teórico
3. Resolución práctica
4. Experimentación
5. Conclusiones
6. Bibliografía
INTRODUCCIÓN
¿ Qué es el pixel art?
Es una forma de arte contemporánea surgida de la necesidad de
optimizar los recursos de dispositivos electrónicos sin perder
demasiada calidad de imagen.
INTRODUCCIÓN
¿Qué fácil no?
El mayor problema del pixel art son sus propias limitaciones, ya que con una paleta de colores limitada y una baja resolución es complicado crear una imagen reconocible ¿Pero esto que eeeeeeeeeees?
PLANTEAMIENTO TEÓRICO
Pixelar una imagen es muy fácil.
Y asignarle a toda la cuadrícula el mismo color que tenga el píxel central
Basta con dividir la imagen en una cuadrícula de tamaño regular.
En muchos casos al pixelar una imagen con este método no se puede reconocer nada de la imagen original.
Hay muchos casos en los que queremos que se pueda reconocer la imagen, con las ventajas de una imagen en baja resolución, haciendo este método inservible y obligándonos a buscar otras alternativas
PLANTEAMIENTO TEÓRICO
Es aquí donde entra el algoritmo SLIC.
Este algoritmo usa un término llamado superpíxel.
Estos superpíxeles son conjuntos de píxeles que tienen
características parecidas.
El algoritmo lo que hace, de manera simplificada, es reconocer dichos superpíxeles.
Vamos a ver como lo hace
PLANTEAMIENTO TEÓRICO
Al igual que el algoritmo básico, el algoritmo SLIC segmenta inicialmentela imagen en un mallado en forma de cuadrícula con un tamaño fijo. Para simplificar la explicación cogeremos una cuadrícula de tamaño 3x3
De cada cuadrícula que haya en la imagen, el algoritmo escoge el centro de cada una
Después, se calculan los gradientes de todos los vecinos del centro en dicha cuadrícula
-2 3 6
9 0 6
1 5 -9
Se mueve el centro hacia el vecino con el gradiente más bajo
-2 3 6
9 0 6
1 5
PLANTEAMIENTO TEÓRICO
Una vez realizado el paso anterior, el algoritmo coge, para cada centro, una malla 2N x 2N. En nuestro ejemplo, 6x6.
Para cada píxel dentro de esa malla, el algoritmo calcula su distancia a cada uno de los 4 centros de malla.
Compara esas distancias y el píxel queda asignado al centro al que más próximo esté
Una vez finalizado el proceso, ya disponemos de los superpíxeles para ejecutar el tratamiento que queramos darle a la imagen
En nuestro caso, lo que hemos hecho ha sido asignar a todos los píxeles que forman parte de un superpíxel elcolor del centro del superpíxel
PLANTEAMIENTO TEÓRICO
Una de las mayores ventajas de este algoritmo, es que se ajusta con bastante precisión a la forma de los objetos que queremos reconocer, siendo de mucha utilidad para pixelar objetos o personas sin que deje de reconocerse la imagen original
Para la imagen que usamos anteriormente pero usando el algoritmo SLIC para hacer la pixelación
RESOLUCIÓN PRÁCTICA
Para la implementación de la aplicación se ha usado:- Visual Studio 2013- C# con Microsoft .Net Framework 4.0- Windows Prsentation Foundation (WPF)
Se ha implementado una arquitectura basada en Model View View Model (MVVM), que permite mantener organizado el código, y poder ampliar fácilmente con más implementaciones de algoritmos.
RESOLUCIÓN PRÁCTICA
Se ha creado una interfaz sencilla, que permite aplicar los diferentes algoritmos implementados, y comparar los resultados de forma simple.
Permite que cada algoritmo tenga como entrada los parámetros que necesite.
Permite guardar el resultado obtenido en un fichero.
RESOLUCIÓN PRÁCTICA
Los pasos más importantes del algoritmo son:
1. Se inicializa un array con los centros de cada superpíxel que a priori serán parte de una rejilla compacta y uniforme del tamaño deseado. La complejidad de este paso es O(k), siendo k el número de cuadrículas generadas en la imagen.
2. Calculamos los gradientes de todos los píxeles de la imagen, los cuales guardamos en un array.
3. Modificamos los centros que calculamos antes, escogiendo como nuevo centro, de entre los vecinos del centro anterior, el de menor gradiente.
4. Recorremos la imagen en una ventana de dos cuadrículas por dos cuadrículas respecto a cada centro. En esa ventana evaluamos la distancia entre cada píxel y cada uno de los cuatro centros. Comparamos las distancias obtenidas y añadimos el píxel a la región cuyo a centro esté más cercano. Almacenamos las distintas regiones obtenidas en un array. 5. Se unen los píxeles no conectados a ningún superpíxel al más cercano.
6. Por último, se realiza una limpieza de regiones pequeñas usando el parámetro de entrada como umbral, uniendo dichas regiones a las regiones vecinas más coincidentes.
EXPERIMENTACIÓN
A continuación vamos a mostrar algunos ejemplos, comparando los dos métodos implementados.
EXPERIMENTACIÓN
EXPERIMENTACIÓN
EXPERIMENTACIÓN
EXPERIMENTACIÓN
EXPERIMENTACIÓN
COSAS A MEJORAR
• Dar la opción de elegir el número de colores disponibles
• Que el usuario pueda elegir el tamaño de la imagen de salida
• Refinar el algoritmo para que sea más eficiente y preciso
CONCLUSIONES
• Aplicar el algoritmo SLIC a la pixelación de
imágenes mejora notablemente el resultado.
• El algoritmo SLIC se podría aplicar a otros
ámbitos como podría ser el reconocimiento de
objetos en una imagen, o el reconocimiento
facial
BIBLIOGRAFÍA
• Pixelated image abstraction with integrated user constraints• http://www.sciencedirect.com/science/article/pii/S0097849313000046
• Algoritmo SLIC• http://ivrg.epfl.ch/research/superpixels
• Algoritmo de pixelación básico• http://notes.ericwillis.com/2009/11/pixelate-an-image-with-csharp/