Thursday, November 05, 2009

Fusionando imágenes

Los efectos visuales que hoy día se pueden hacer usando una computadora son simplemente el resultado del procesamiento digital de imágenes. Para la computadora una fotografía no es más que una colección de puntos de diversos colores, que finalmente en las entrañas de la máquina no son más que valores que van de 0 a 16 millones, aproximadamente. La razón de esto es que la computadora, a través de su hardware, ve el color como una combinación de tres números que van de 0 a 255. Esos tres números representan el azul, el rojo y el verde. Esto es lo que se llama el modelo RGB (por aquello de Red, Green, Blue, por sus siglas en inglés) y es uno de los más usados a nivel mundial. Por ello mismo, cuando se hace una transformación de una imagen, ésta siempre se basa en la manipulación de los puntos de color (los pixeles), que son un reflejo de los valores internos de sus respectivas coordenadas rojo, verde y azul.

Uno de los efectos más interesantes es el del blending (término inglés que significa licuar), pero que en realidad podría considerarse como el de fusionar, en algún porcentaje, una imagen con otra. Imaginemos, por ejemplo, que tenemos una fotografía A, pero queremos sobreponerla, en un 40% (como si fuese una transparencia a un 40% del total del color), sobre otra imagen. ¿Cómo se verá el resultado de esto? ¿qué tan difícil resulta programar dicho efecto?

La teoría atrás del blending es muy simple. Se trata de tomar cada punto de ambas imágenes y decirle al sistema que ponga un porcentaje que le correspondería al punto en la primera imagen y el resto (del 100%) sería para el punto de la segunda imagen. Para que esto funcione, lo mejor es separar cada punto de las imágenes en sus respectivas coordenadas RGB de manera que tengamos algo como esto:

blendpixelR := (R1 * alpha) + (R2 * (1.0 – alpha));
blendpixelG := (G1 * alpha) + (G2 * (1.0 – alpha));
blendpixelB := (B1 * alpha) + (B2 * (1.0 – alpha));

Donde blendpixelR, blendpixelG y blendpixelB son el resultado de fusionar las coordenadas roja, verde y azul del punto en la primera imagen (R1), con las coordenadas roja, verde y azul del punto en la segunda imagen (R2), respectivamente y alpha es el porcentaje que se desea fusionar la imagen A con la B. ¿Demasiado sencillo para ser cierto? El hacer esto, pensaba ¿no me hará una especie de batidero de ambos pixeles? Me di entonces a la tarea de escribir un programita que hiciese esto para ver si esto funcionaba correctamente.


Imagen 1
Blending de Aruna (la esposa del campeón mundial de ajedrez 2009, Viswanathan Anand)
con la imagen de la conferencia de prensa entre Anand y Aronian

Puede verse que el efecto funciona perfectamente. Por qué funciona el programa? La respuesta es simple: estamos hablando de pixeles de color, que en la pantalla de la computadora son haces de luz de una frecuencia determinada. Por ello mismo, al combinarlos de acuerdo a la fórmula del blending, notaremos que ambas imágenes se fusionan. Cabe señalar que este comportamiento no se da en la pintura al óleo, por ejemplo, o con pinturas físicas, porque aquí la combinación de rojo, verde y azul en iguales proporciones nos daría negro, no blanco.

3 comments:

Ernesto said...

Fusionar imágenes no es un efecto muy común. Me refiero que la gente las use como "ahh!, voy a fusionar estas dos imágenes completas".

Lo que si es muy común es el uso del canal alpha. En el canal alpha normalmente hay una máscara que nos permite recortar la imagen original (usando el algoritmo que describes). Y tiene la ventaja que los bordes se pueden desvanecer para que a la hora se insertar la imagen en una tercera, no se noten.

Normalmente uno no se pone a pensar en el algoritmo que hay detrás de los efectos digitales. Muchos tan son sencillos que sorprenden por su ingenio.

Saludos,
Ernesto

Morsa said...

Ernesto,

La técnica del canal alpha es más usada, como dices. Nomás pregúntale al góber precioso de Campeche, que se puso en la foto con el presidente Calderón y el de Guatemala.

saludos
Manuel

Viviendo said...

Ese tipo de imagenes me recuerda el ver un vidrio, dependiento de la cantidad de luz que entre del exterior uno ve en el interior la imagen de afuera, pero mientras más importante sea en proporción la imagen que se refleja de la luz de adentro se verá más esta. Así que en muchos casos se ven las imagenes así.