Metapixel es un fantástico programa para Linux con el que generar esas foto-mosaicos que seguro todos habéis visto, compuestas a partir de varios cientos ó miles de miniaturas de otras fotografías.

Carga retrasada de youtube


El programa funciona vía consola, y para instalarlo y ejecutarlo solo necesitáis tener instalado el compilador de C y el interprete de Perl (presente en todas las distribuciones Linux), asi como las librerías libjpeg/libpng.
Aquí os dejo un ejemplo de lo que se puede conseguir y una breve explicación del funcionamiento. (No perdáis ojo a la sandalia que aparece en el centro del vídeo.)

Instalación

Descarga y descomprime el archivo TAR. Abre una consola en la carpeta recién creada y compila e instala como root:make && make install
Ya lo tienes instalado.


Conceptos básicos

Metapixel se compone básicamente de dos aplicaciones:
metapixel, el encargado de generar los mosaicos propiamente dichos.
metapixel-prepare, el encargado de generar la librería que surte de imágenes a metapixel, y que por lo tanto debe ser ejecutado en primer lugar.

Como es habitual en consola el formato de ejecución de ambos programas es:

[EJECUTABLE] [OPCIONES] [FICHERO-ENTRADA] [FICHERO-SALIDA]

[OPCIONES] pueden ser pasadas directamente desde la consola cada vez que se ejecuta el programa ó bien establecidas y guardadas en un fichero llamado .metapixelrc situado en tu $HOME. Lo normal es que aquellas opciones comunes y que se repiten en cada llamada las guardemos en el fichero .metapixelrc, de esta manera cada vez que queramos generar un mosaico basta con escribir metapixel –tipo-mosaico /imagen-plantilla.jpg /mosaico-resultado.png

Opciones

Estos son algunos de los parámetros que habitualmente deberías en tu fichero de configuración para evitar tener que escribirlos cada vez que ejecutas el programa desde la consola. Hay algunos más, estos son solo los más elementales.
Puesto que la existencia de este fichero es opcional, durante la instalación de Metapixel no se instala. Para crearlo abre tu editor de texto favorito, escribe las opciones que te interese y guardalo en tu carpeta raiz llamandolo .metapixelrc (ojo al punto delante del nombre que indica que el fichero está oculto)
Los parentesis de la opcion deben ser incluidos.

( prepare-directory “directorio” ) , ejem: (prepare-directory “/home/galeria/Mis imagenes”)
Indica el directorio que usará metapixel-prepare para leer y generar la librería que posteriormente será usada por metapixel.
Si queremos que la búsqueda de imágenes sea recursiva (en el directorio indicado y directorios interiores) en el momento de lanzar metapixel-prepare añadiremos la opción -r
Esta opcion es usada por metapixel-prepare e ignorada por metapixel

(library-directory “directorio” ), ejem: ( library-directory “/home/galeria/Mis imágenes preparadas”)
Una vez lanzado metapixel-prepare el programa escanea una a una todas la imágenes que encuentre
(JPG / PNG) en “prepare-directory” y hace una copia escalada en este directorio. Al mismo tiempo genera en este directorio un archivo llamado “tables.mxt” que contiene información acerca de cada una de las imágenes.
Este es el directorio al que se dirige metapixels para generar los mosaicos. No es creado de forma automática y sino se encuentra el programa devuelve un error.

(prepare-dimensions ancho alto) ,ejem: (prepare-dimensions 256 256)
Indica a que tamaño se van ha hacer las copias en library-directory de las imágenes encontradas en prepare-directory.
Estas imágenes deben ser lo más pequeñas posibles (para ahorrar espacio) pero siempre más grandes que las que finalmente usemos en nuestro mosaico.

(small-image-dimensions ancho alto), ejem: (small-image-dimensions 64 64)
Indica cual es el tamaño de cada una de las imágenes que compondrá el mosaico, y debería ser más pequeño que el tamaño dado en la opcion prepare-dimensions

(search-method option), ejem: (search-method global)
Existen dos métodos para encontrar la imagen que mejor se adapta a cada posición.
global: Mas preciso. Mas lento. Mas memoria, y sobre todo: requiere que tu librería de imagenes preparadas contenga tantas imágenes como las necesarias para componer el mosaico, independientemente de que se vayan ó no ha utilizar, de lo contrario emite un error.
Si deseas hacer un mosaico de una imagen de 3000×2000 pixel a base de imágenes de 64×64 tu librería debería tener= (3000/64) x (2000/64) = 1457 imágenes como mínimo.
Para evitar el error simplemente aumenta el valor de small-image-dimensions ó incluye más imágenes en la preparación de la librería.

local, mas rápido, más impreciso, mas repetición. Es el método ideal si se cuentan con pocas imágenes y/o nos da igual que estas se repitan con demasiada frecuencia.

(minimum-classic-distance distancia), ejem: (minimum-classic-distance 20)
Indica la distancia mínima que debe existir antes de volver a utilizar la misma imagen.
Este parámetro puede dar lugar a engaño, ya que se cuentan las fotos utilizadas entre una miniatura y la siguiente, pero contadas en horizontal, por lo que es fácil que coincidan la misma foto en dos filas contiguas.

Funcionamiento básico

Si ya tenemos creado nuestro fichero de configuración con estos parámetros básicos, podemos empezar a usar Metapixel.
El primer paso es generar la libreŕia de imágenes preparadas, abre una consola y ejecuta en modo recursivo:metapixel-prepare -r
El programa empieza de inmediato a generar copias de tus fotografías en la carpeta library-directory indicada en el fichero de configuración. El proceso puede llevar un tiempo, pero no demasiado. Mi álbum de fotos contiene 15000 imágenes y tardó en procesarlas menos de 3 horas (cuando viene del trabajo ya estaban terminadas).
Nota: Incomprensiblemente el programa trata TODOS los ficheros que encuentre, por lo cual emitirá errores cuando trate leer cualquier archivo que no sea un JPG ó PNG (ficheros html, avi, mpeg, texto, etc.. ) en cualquier caso el escaneo de carpetas no se detiene por este error, y simplemente son ignorados dichos ficheros.

Una vez terminado el proceso, tendrás una carpeta llena de pequeños thumbnails de tamaño prepare-dimensions listos para utilizar.
Una vez selecciona la imagen que desees convertir en mosaico, escribes en linea de comandos metapixel --metapixel /direccion/imagen-a-convertir.jpg /direccion/donde-guardar-resultado.png
En ese momento el programa trocea la imagen dada (emite ….) y a continuación comienza a reconstruirla utilizando tu librería (emite xxxx)

Como ejemplo: La imagen que podeis ver en el video fue creada partiendo de un JPG de 6528×4352 pixel, y contiene unas 6900 miniaturas de 64×64 pixel utilizando una librería que consta de 15000 imágenes de 256×256 pixels. La recreación de la imagen le llevó alrededor de 40 minutos. El archivo “tables.mtx” pesa unos 15 Mg.

Observaciones

Metapixel trae bastantes más opciones con las que jugar un rato, estas son las más elementales. La opcion antimosaic (crea un mosaico a partir de trozos de propia imagen), collage (eso mismo, un compilación de imágenes más o menos solapadas según –distance), incluso un método “cheat” (tramposo).

Evidentemente los mejores resultados se consiguen utilizando muchas (miles) imágenes y puesto que lo ideal es que las imágenes que componen el mosaico sean “visibles” estamos obligados a escalar las imágenes originales…. a no ser que vuestra cámara produzca imágenes de 6000 ó 7000 pixel de ancho…

Seleccionad imágenes con áreas contrastadas y una ampliar gama de colores, al menos tantos colores como los que abunden en vuestro álbum de fotos. Si mayormente tenéis fotografías realizadas de noche, no hagáis un mosaico con la foto de la novia en la nieve!! :D