Este recurso de aprendizaje es una lección creada originalmente como material didáctico del proyecto de aprendizaje Tecnologías multimedia e interacción.

Este proyecto fue realizado por Jennifer Hernández Bécares y Viktor Jacynycz García para la asignatura Tecnologías Multimedia e Interacción el curso 2016/2017.

Chromophonia: De la música a la imagen

editar
 
Chromophonia tag de la canción de Para Elisa de Beethoven

Chromophonia es un proyecto en el que se transforman archivos de música en imágenes para luego compararlas y observar los resultados. La palabra chromophonia esta compuesta por las palabras Chromo (Color) y Phonia (Sonido o voz).

Para crear una etiqueta o Chromophonia tag, se extraen las frecuencias más relevantes de cada fragmento de tiempo de una canción y se les asocia un color determinado. Este color se asigna en una escala HSV y luego se utiliza para comparar otras Chromophonia tags para observar los resultados y ver si la traducción de música a imágenes conserva la similaridad entre ellas.

Este proyecto está compuesto por dos partes importantes de las tecnologías multimedia. La primera es el análisis de audio para la extracción de frecuencias y conversión a colores. La segunda es la comparación de imágenes para intentar obtener similitudes entre canciones del mismo género o artista.

Motivaciones

editar

La idea principal que motivó este proyecto es una enfermedad llamada Acromatopsia[1], una afección rara del ojo humano que provoca que este no distinga colores. La persona más conocida que sufre esta enfermedad es Neil Harbisson[2], ya que es el creador de un sistema que el mismo utiliza para poder diferenciar los colores a pesar de que su ojo no pueda distinguirlos. Este sistema está compuesto por una pequeña cámara que observa los que ve él y emite frecuencias de sonido en función de los colores que esté viendo en ese momento [3]. Chromophonia trata de realizar el paso inverso y poder convertir canciones a colores utilizando un sistema de análisis de frecuencias.

Estado del arte

editar
 
Espectrograma sobre una superficie 3D de una parte de una pieza de música
 
Un espectrograma del sonido de violín

Hoy en día el estudio y el análisis de audio se centra mucho en el tratamiento de la señal. Actualmente el único sistema que crea imágenes para la visualización de las frecuencias de un audio es el espectrograma[4][5], una imagen en 2D o 3D que indica qué frecuencia y que amplitud tienen en ese momento.

Hay estudios que utilizan el espectrograma para clasificación de música. Como el realizado por Juhan Nam, el cual utiliza grandes cantidades de datos como grupo de entrenamiento [6]. Pero no existe ninguno orientado a la generación de colores en función de la frecuencia que es el ámbito en el que se mueve el proyecto de Chromophonia.

Funcionamiento del sistema

editar
 
Esquema resumen del algoritmo de Chromophonia

Para generar los colores el audio se divide en 128 franjas de tiempo en todas las canciones independientemente de la duración de esta. Cada franja de tiempo tiene un color asociado, que se selecciona en función de las frecuencias más relevantes. Para extraer estas frecuencias, el algoritmo utiliza unas serie de recursos dentro del análisis de audio. Después el programa usa esas franjas de color para compararlas con otras imágenes y poder hallar similitud.

Análisis de audio

editar

El análisis de audio de Chromophonia consiste en 4 pasos importantes para generar el color asociado. Los pasos se repiten exactamente en cada canción y muchos de los valores que se utilizan son ajustables, de tal manera que se puede refinar el tipo de imágenes que se generan al introducir las canciones. Estos pasos son extracción, selección, ponderación y asociación.

Extracción

editar

En esta fase del algoritmo se crea el espectrograma obteniendo las frecuencias con una ventana de 1024 para la STFT. Después se dividen en 128 fragmentos y se van añadiendo las frecuencias de cada fragmento en un montículo para poder ordenarlas por amplitud. La elección de usar un montículo es porque mejora la eficiencia a la hora de insertar muchos números en una lista ordenada.

Selección

editar

Una vez ordenadas las frecuencias por amplitud, en 128 fragmentos en función de la duración del audio, el algoritmo selecciona las 20 frecuencias más amplias multiplicando cada una por un factor para dar más importancia a las primeras y controlar el ruido. Después se hace la media de estas 20 frecuencias y se almacena en un valor.

Ponderación

editar

Antes de seleccionar un color, el algoritmo pondera las frecuencias para aumentar la distancia entre ellas ya que queremos diferenciar cuales de ellas son distintas. Esta ponderación se realiza elevando a 4 los valores de las frecuencias más amplias y luego realizando una media aritmética para seleccionar un solo valor que es el que utilizará Chromophonia para asociar un valor.

Selección

editar

Una vez que tenemos un valor numérico para cada uno de los 128 fragmentos de audio, le asociamos un color utilizando una escala HSV, ya que se realiza sobre una rueda de 360 grados. Si dos fragmentos tienen el mismo color porque la canción es repetitiva o porque tienen las mismas frecuencias relevantes, la saturación y el brillo bajan, observándose una transición hacia un gris en canciones sin alguna variación. Esta penalización va disminuyendo a medida que cada fragmento de los 128 es diferente del anterior.

Análisis de imágenes

editar

Una vez tenemos generadas y almacenadas todas las imágenes asociadas a las canciones, realizamos el análisis de las mismas. Para ello, los pasos son los que siguen: crear índice de con los histogramas de color, elegir canción a comparar, comparar con el resto de canciones y mostrar los resultados. Se explican a continuación. Las referencias que se han seguido para desarrollar esta parte del proyecto son [7], [8], [9], [10], [11], [12] y [13].

Crear índice

editar

En primer lugar, para llevar a cabo la comparación de canciones, es necesario cargar las imágenes generadas anteriormente (tags) en el programa, calcular su histograma y almacenar cada uno de esos histogramas en un índice. Esto se hace con el objetivo de ahorrarnos cálculos que, de otro modo, serían inútiles.

Para calcular el índice lo que hacemos es extraer un histograma de color en RGB en 3D de la imagen, normalizamos el resultado y actualizamos el índice.

Elegir canción

editar

Una vez tenemos nuestro índice con todos los cálculos de los histogramas, el siguiente paso que tiene que dar el usuario es elegir una canción. El objetivo es proporcionarle al usuario información sobre las canciones más similares a esa canción que ha elegido dentro del "repertorio" que tenemos almacenado en imágenes.

Comparar

editar

En este momento, el usuario ya habrá elegido la canción sobre la cual quiere extraer canciones similares. Para llevar a cabo la comparación, escogemos alguno de los métodos de comparación de imágenes disponibles en OpenCV. OpenCV dispone de una función denominada compareHist, que toma como argumentos los dos histogramas a comparar y el método escogido.

De este modo, lo que hacemos es iterar para comparar el histograma de la canción escogida con el resto de histogramas disponibles en nuestra base de datos. Se almacenan los resultados de la comparación y se ordena para finalmente mostrar los resultados.

Mostrar similares

editar

Por último, se muestran las canciones más parecidas de acuerdo a cuatro funciones distancia: correlación, chi cuadrado, intersección y hellinger.

Así, el usuario podrá comprobar cuáles son las canciones que más se parecen a aquella canción que había elegido originalmente de acuerdo a los cuatro métodos.

  1. https://es.wikipedia.org/wiki/Acromatopsia
  2. https://es.wikipedia.org/wiki/Neil_Harbisson
  3. https://www.ted.com/talks/neil_harbisson_i_listen_to_color
  4. https://es.wikipedia.org/wiki/Espectrograma
  5. Sejdić E.; Djurović I.; Jiang J. (2009). "Time-frequency feature representation using energy concentration: An overview of recent advances". Digital Signal Processing.
  6. Juhan Nam, "Learning Feature Representations for Music Classification," Ph.D. thesis, Stanford University, 2012. https://ccrma.stanford.edu/~juhan/thesis.html
  7. S. Tunga, D. Jayadevappa, C. Gururaj. A Comparative Study ofContent Based Image Retrieval Trends and Approaches. International Journal of Image Processing (IJIP), 2015, pp. 127-155.
  8. T. Huang, Y. Rui, Image retrieval: Past, present, and future, in:Proceedings of the International Symposium on Multimedia Information Processing, 1997, pp. 1–23.
  9. https://en.wikipedia.org/wiki/Color_histogram
  10. Greg Pass, Ramin Zabih, Justin Miller. Comparing images using color coherence vectors.
  11. Allan Hanbury, Beatriz Marcotegui. Color adjacency histograms for image matching
  12. http://www.computing.dcu.ie/~gjones/Teaching/CA437/stricker95similarity.pdf
  13. https://ece.uwaterloo.ca/\~nnikvand/Coderep/ColorHist/Histogram-Based\%20Color\%20Image\%20Retrieval.pdf