Calculando efecto Doppler con fotos. Toma 1

Preludio

Después de que estuve jugando un poco con Python y descubrí que es posible manipular imágenes con la Python Imaging Library (PIL), se me ocurrió que debería ser posible simular el efecto Doppler de la luz con una foto cualquiera. ¿A qué me refiero? Vamos primero con el efecto Doppler.

Si hablamos del efecto Doppler del sonido, éste es un fenómeno que consiste en la modificación de la frecuencia con la que percibimos el sonido, debida al movimiento de la fuente emisora o el agente receptor. El ejemplo típico es el cambio en el tono de una ambulancia que se mueve hacia nosotros, pasa a la par y luego se aleja. En el momento en que se empieza a alejar, el sonido de la sirena se escucha un poco más grave. En esencia, ése es el efecto Doppler. La wikipedia en inglés tiene unas animaciones muy ilustrativas.

La luz también es susceptible al mismo fenómeno. Una fuente de luz que se aleja de nosotros experimenta un cambio que hace que su frecuencia (o longitud de onda) se corra al lado rojo del espectro electromagnético. Tal efecto se conoce—muy descriptivamente—como corrimiento al rojo. El corrimiento al rojo es precisamente el fenómeno físico que hace posible medir la velocidad de las galaxias, permitiéndonos concluir que se están alejando de nosotros y que el universo se está expandiendo.

Cuando hablamos de luz nos podemos referir indistintamente a su frecuencia o a su longitud de onda. La relación entre ambas es

\displaystyle \mbox{frecuencia}= \frac{\mbox{velocidad de la luz}}{\mbox{longitud de onda}}.

Regresemos ahora a lo de la foto. La pregunta es la siguiente: ¿cómo se modificarían los colores de una escena cualquiera que contemplemos, si nos moviéramos a una velocidad cercana a la de la luz? Aquí vale hacer una aclaración: el efecto Doppler en la luz es apreciable unicamente cuando la fuente emisora o el observador se mueven a velocidades comparables a la de la luz. Es por eso que no notamos ningún cambio de color en los objetos cuando vamos en movimiento. Y éso es lo que hace emocionante la pregunta: es un efecto que no podemos apreciar cotidianamente. Si pudiéramos verlo, decir que existe un corrimiento de frecuencia debido al efecto Doppler, ¡significa que los objetos cambian de color cuando se mueven respecto de nosotros!

El hecho que no podamos ver el efecto Doppler directamente no quiere decir que no podamos simularlo. Para éso recurrimos a la física y a la computadora.

Efecto Doppler, toma 1

Normalmente hubiera reportado el resultado final de mi pequeño proyecto. Sin embargo, las cosas rara vez salen al primer intento. Así que voy a aprovechar que esto es un blog y no una revista científica para documentar la primera aproximación al problema.

El curso de acción sería:

  1. Tomar una foto.
  2. Recorrer la foto pixel por pixel y convertir el color codificado en sus componentes Red, Green, Blue (RGB) a la longitud de onda original.
  3. Tomar esa longitud de onda y aplicarle la fórmula del efecto Doppler.
  4. Convertir esa nueva longitud de onda a la representación de color RGB y guardarla en una imagen nueva.

Buscando un poco en internet encontré dos programitas que hacían la conversión de RGB a longitud de onda y viceversa. Para verificar que estas transformaciones realmente funcionan bien, lo que hacemos es tomar una foto; convertimos sus pixeles de RGB a longitud de onda con uno de los programas y luego de longitud de onda a RGB con el otro programa. El resultado ideal es obvio: deberíamos obtener exactamente la misma imagen. Sin embargo el resultado real es un desastre.

La foto de abajo muestra lo que sucede. Tomamos la foto de la izquierda y en lugar de obtener exactamente la misma imagen, obtenemos la de la derecha (click para agrandar).

Las rutinas de conversión de RGB a longitud de onda y viceversa no hacen bien su trabajo. Se me ocurren un par de ideas. Una es buscar una mejor fórmula para hacer la transformación de la representación del color. La segunda es leer con más profundidad la literatura sobre el tema. De hecho, después de escribir este post me parece que un color caracterizado por su código RGB no es producto de una única longitud de onda, sino de una combinación de varias de ellas. En otras palabras, depende del espectro de emisión del objeto.

Así termina el primer intento. Veamos cuántos más son necesarios para contestar la pregunta que originó todo este proceso. No pierdan la sintonía.

Anuncios
Esta entrada fue publicada en Computación, Física, Uncategorized y etiquetada , , , . Guarda el enlace permanente.

8 respuestas a Calculando efecto Doppler con fotos. Toma 1

  1. ovidio dijo:

    Lo que entiendo es que hay que reconstruir el espectro de cada pixel. ¿Para esto no funciona mejor el espacio HSB? (http://en.wikipedia.org/wiki/HSL_color_space) Podés aproximar cada color a una distribución cuadrada: usas el valor de H como la posición del centro (la longitud de onda), B como la altura y S como el ancho. O sino pulsos en H con altura B me parece que es más fácil así.

    • Enrique dijo:

      Coincidentemente encontré una descripción muy parecida para aproximar el espectro. No sabía que tenía relación con el HSB. Voy a probar a ver que sale. Gracias!

      • Eduardo dijo:

        ¿Entiendo correctamente que la idea sería usar H como la aproximación de la longitud de onda?

        Si es así, creo que no funcionaría porque al fin HSV o HSL sólo son diferentes representaciones de RGB, donde H (“hue” o matiz) juega el papel de la longitud de onda dominante. Esta componente “dominante” es probablemente la que busca el programita, y que encuentra correctamente, pero que es exacta sólo para ondas monocromáticas.

        Por eso creo que es difícil encontrar una buena aproximación sin el análisis de Fourier por píxel de la foto en RGB (o HSV o HSL), considerando que también R, G y B para la visualización en un monitor son ondas policromáticas 🙂 http://en.wikipedia.org/wiki/Primary_color

  2. Eduardo dijo:

    Evidentemente el programita tiene dificultades con luz policromática (la que consiste de varias ondas superpuestas). Una solución muy interesante sería buscar un método para extraer la intensidad de cada onda subyacente por píxel, como un análisis de Fourier de la codificación RGB.

    Pero como alternativa, por qué no probar con una imagen artificial de luz monocromática, como un arco iris sobre fondo negro? Sería interesante ver la imagen como una animación en la que la velocidad de la fuente crece 🙂

    • Enrique dijo:

      Hola Eduardo!

      >como un análisis de Fourier de la codificación RGB.

      Eso sería sencillo, daría rojo, azul y verde 🙂 Me dio curiosidad qué es lo que se vería al usar un espectroscopio con un color generado en la pantalla de una computadora.

      >por qué no probar con una imagen artificial de luz >monocromática, como un arco iris sobre fondo negro?

      Lo probé. El programita tiene problemas en la región roja del espectro. Seguro es una aproximación un tanto gruesa. Pero acabo de encontrar una mejor. Sin duda hacer la animación sería espectacular!

  3. Juanlu001 dijo:

    ¿Dónde encontraste esas rutinas? ¿Podrías enlazar o subir el código? Parece un experimento interesante, todavía no he experimentado con PIL pero tendré que hacerlo algún día 😛

  4. mblancopons dijo:

    Se podría intentar ver el RGB de una foto en movimiento y así ver si existe algún cambio con una foto estática, y quizás de ese resultado pueda salir una ecuación para convertir una foto estática con efecto Doppler; solo es una idea.

    Suerte!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s