Mosaicos de imagenes: Metapixel.

Una vez mas por casualidad he descubierto una de las pequeñas maravillas que se ocultan en los repositorios de Debian, se llama metapixel y sirve para crear mosaicos de imagenes.
Algo parecido a esto (pulsar encima para ver mas grande):

original gimp mosaikoa

La web del proyecto con las descargas y algunos ejemplos:

http://www.complang.tuwien.ac.at/schani/metapixel/

El manejo del programa es realmente muy sencillo, basicamente consta de dos pasos: primero crear una base de datos con las imagenes que utilizaremos y segundo, la generacion del mosaico propiamente dicho.

Para empezar necesitaremos un buen monton de imagenes, para crear los mosaicos de mas adelante utilice 6700. La razon de esto es que estadisticamente tendremos mas posibilidades de tener los tonos o colores que necesite el programa para una determinada imagen.
Bien, pues vamos a generar la base de datos de imagenes. Se hace con el script de perl metapixel-prepare. Su uso basico es muy sencillo:

$ metapixel-prepare origen/ destino/

Asi creara todas las miniaturas de las imagenes (por defecto de 128×128 pixeles) y un fichero llamado tables.mxt (con 6700 imagenes pesa 6,8M) con datos que le facilitaran mas tarde el trabajo a la hora de crear el mosaico.
El script tiene algunas opciones mas:

Usage: /usr/bin/metapixel-prepare [OPTION]… <srcdir> <destdir>Prepares all images in <srcdir> for use as small images in
photomosaics. The scaled versions and the table file are
stored in <destdir>.

–help display this help and exit
–width=WIDTH specify width of small images
–height=HEIGHT specify height of small images
-r, –recurse recurse through directories
–debug print out debugging info

- width y height sirven para marcar las dimensiones de la miniaturas (por defecto 128×128). Los valores son absolutos, es decir, si marcamos unos valores para imagenes horizontales las verticales seran deformadas al rescalar.
- r, recursivo. Con este parametro indicamos que recorra y utilice todas las imagenes dentro de un arbol de directorios.

Cuando indicamos un directorio para indexar la aplicacion intentara utilizar todos los archivos que encuentre, si entre ellos hay otra cosa que imagenes mostrara un error pero el programa continuara sin problema.

Dependiendo de la cantidad de fotos que tengamos y la potencia del equipo el proceso puede tardar bastante tiempo en completarse.

Una vez hecho esto vamos a crear el mosaico, la orden basica es muy sencilla:

$ metapixel –metapixel origen.png destino.png –library img_dir

Origen es la imagen que queremos convertir en mosaico, en las pruebas que he hecho el mejor resultado lo conseguia con imagenes muy grandes, de un metro por el lado mas largo. Otra cosa a tener en cuenta son los colores que hay en la base de datos de imagenes, por ejemplo si queremos hacer un mosaico de una escena nocturna pero en nuestra base de datos solo hay imagenes de dias nevados el programa tendra dificultades para hacerlo correctamente.

Destino es el fichero donde queremos guardar el mosaico y library es el directorio que contiene la base de datso de imagenes que hemos creado anteriormente.

En este enlace podeis ver el resultado con diferentes tipos de imagenes:

http://www.kurtsik.org/blog/?page_id=211

Tambien en este caso el programa tienes algunas opciones mas:

Usage:

metapixel –version
print out version number
metapixel –help
print this help text
metapixel [option ...] –prepare <inimage> <outimage> <tablefile>
calculate and output tables for <file>
metapixel [option ...] –metapixel <in> <out>
transform <in> to <out>
metapixel [option ...] –batch <batchfile>
perform all the tasks in <batchfile>

Options:

-l, –library=DIR add the library in DIR
-x, –antimosaic=PIC use PIC as an antimosaic
-w, –width=WIDTH set width for small images
-h, –height=HEIGHT set height for small images
-y, –y-weight=WEIGHT assign relative weight for the Y-channel
-i, –i-weight=WEIGHT assign relative weight for the I-channel
-q, –q-weight=WEIGHT assign relative weight for the Q-channel
-s –scale=SCALE scale input image by specified factor
-m, –metric=METRIC choose metric (subpixel or wavelet)
-e, –search=SEARCH choose search method (local or global)
-c, –collage collage mode
-d, –distance=DIST minimum distance between two instances of
the same constituent image
-a, –cheat=PERC cheat with specified percentage
-f, –forbid-reconstruction=DIST
forbid placing antimosaic images on their
original locations or locations around it
–out=FILE write protocol to file
–in=FILE read protocol from file and use it


Report bugs and suggestions to schani@complang.tuwien.ac.at

- cheat, funde la imagen mosaico con la original en funcion del porcentaje que le marquemos en el valor de este parametro. Con esto conseguimos que la imagen sea mas reconocible pero se pierde, en cierta medida, el efecto mosaico.

- collage, en un mosaico normal las miniaturas encajan las unas con las otras. Este parametro permite que las miniaturas se solapen para crear una imagen mas cercana al original. Esta opcion es con mucho la que mas recursos consume.

Unos ejemplos:

metapixel Sin parametros adicionales
metapixel cheat –cheat
metapixel collage –collage

Para terminar decir que si hacemos mosaicos con frecuencia y queremos ahorrarnos teclear los parametros podemos crear un archivo .metapixelrc en nuestra home y establecer nuestros parametros preferidos.

Atentos por que hay que poner los parentesis tal y como aparecen aqui:

( prepare-directory “imagenes” )
(library-directory “miniaturas” )
(prepare-dimensions 125 78)
kalabera
Como todo no podia ser bueno parece ser que una empresa tiene patentada la creacion de fotomosaicos a partir de imagenes y es posible que haya implicaciones legales para, por ejemplo, el uso comercial de nuestros propios fotomosaicos (estupidas patentes Yell):http://www.photomosaic.com/rt/patent-index.html

3 pensamientos en “Mosaicos de imagenes: Metapixel.

  1. J Luis Becerril

    Que interesante tu articulo…

    gracias por darnos material util y valioso.

  2. vicmanrobin

    holaa viej o muy buen aporte es la primera vez que manejo linux y sofware para edicion de fotografia…
    estoy siguendo los pasos tal y como mencionas pero me sale un error es el siguiente:
    metric must either be subpixel or wavelet

    no se que sucede…..quizas me falta una libreria o algo asi… .o no tengo definidas las dimensiones de la foto nueva que va a crear…pero si es asi no se como definir la dimension…si me pudieras ayudar te lo agradeceriaaa muchas grax!! saludoss

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">