miércoles, mayo 28, 2008

Inpainting

Otra Actualización:

http://www.megaupload.com/?d=84BCDYOD

Enlace con el código que compila bajo linux y windows. En windows necesitáis por lo menos la versiones express de Visual Studio 2008

Actualización:

http://www.megaupload.com/es/?d=KDA0AVA0

Desde ese enlace puedes descargar el programa. Hay dos ejecutables uno que paraleliza y otro que no.

Llevaba una temporada con más pájaros en la cabeza de lo habitual.

Una asignatura de la carrera de esas que cursas por amor al arte, sabes que vas a tener que trabajar más de la cuenta, pero te encanta lo que haces.

La asignatura en cuestión es procesamiento digital de imágenes, sólo puedo contar maravillas sobre la asignatura y sus docentes, y quien me conoce sabe que suelo ser muy crítico con las asignaturas de la carrera.

Elegimos un proyecto de restauración de imágenes para una parte de la asignatura. Dentro de este mundillo a estos métodos se le suele llamar métodos de inpainting.

http://en.wikipedia.org/wiki/Inpainting

He implementado varios algoritmos que voy a comentar:

- Método de Oliveira y Multirresolución ¿En que consiste el método de Oliveira?, su idea es muy simple, consiste en aplicar convoluciones sobre unos pixeles marcados para ser "procesados" por el algoritmo, las convoluciones suelen ser con kernels gaussianos. Cualquiera con un poco de idea podrá comprobar que este método produce las zonas muy muy borrosas, y para nada como en los papers aparecen, requiere un nivel de selección de máscara tan elaborado que antes de terminar una has tenido nietos y no sabes ni como. La multirresolución ayuda un poco y consigue que no se vea tan borroso. Aunque este algoritmo tenga ese inconveniente es rapidísimo.

-Método de Bertalmio la verdad que empecé a implementarlo, se me fue un poco la cabeza con las laplacianas y diferenciales de segundo orden que documenta el pobre hombre en su tesis y al final sólo se ve algo muy borroso XD. Según he conseguido sacar en claro también produce resultados algo borrosos para zonas de restauración grandes.

- Método de Crimisi. El método definitivo XD. Simplemente increíble, los resultado obtenidos son mejores de lo que me esperaba, el inconveniente es lo que tarda. A ver como explico este método..., bueno ya colgaré la documentación con el algoritmo detallado, etc... Para imágenes pequeñas con aproximadamente un 6-7% de la imagen dañada de forma no normal puede tardar cosa de 6 minutos más o menos pero para una imagen grande con el 30% llevo dos horas y le queda la mitad todavía. Ventajas: Los requisitos matemáticos no son tan elevados como para el de Bertalmio y encima da unos resultados muy superiores. Este método como mucho es calcular los vectores gradientes de los píxeles, y aplicar convoluciones para detección de fronteras. ¡¡¡Altamente paralelizable!!!! ya he visto el cuello de botella de la aplicación y estoy estudiando hacer una versión con OpenMP y otra usando CUDA. Voy a ir colgando imágenes que muestren los resultados del método y vosotros mismos juzgáis :)


Imagen dañada


Imagen bonita


Jugando a la xbox en casa de un amigo


O eso creía










3 comentarios:

Kyll dijo...

es acojonante!!
jeje

he visto la foto de la fuente y la tia, tampoco era tan fea.. jeje

Óscar dijo...

Increíble, guapísimo... de verdad, es impresionante

kikorb dijo...

Madre mía que chulada!

Es lo que dices que te tiene que gustar, porque por lo que cuentas tiene que ser una asignatura durilla. Menos mal que los resultados si merecen la pena...

:)