2011-05-25 19 views
9

estoy buscando una manera de ordenar las imágenes como en la siguiente captura de pantalla:imágenes de clasificación por color

http://www.pixolution.de/sites/LargeImages_en.html

He mirado en todos los hilos sobre este tema en stackoverflow pero ninguno de la propuesta las soluciones incluso se acercan a darme la imagen de arriba.

enfoques que he intentado:

  1. para cada imagen, construir histograma de colores RGB con el fin de que se produzca
  2. descendente para cada histograma, calcular la distancia desde el negro (r: 0, g: 0, b: 0) de la siguiente manera:

    for color in image_histogram: 
        total_distance += color.percentage_of_image * distance(BLACK_RGB, color.rgb) 
    

continuación, ordenar las imágenes por sus distancias

Tenía la esperanza de que las imágenes con una distribución de color similar terminaran con una distancia similar y resultaran en un orden visual por color. Este no fue el caso, parece funcionar un poco, pero no como en la imagen de arriba.

Para la función de distancia, he intentado la distancia euclidiana, la clasificación hsv (h-> s-> v) e incluso la clasificación de distancia de laboratorio. Nada de lo que ha ayudado

Si alguien tiene un mejor enfoque, ¡me encantaría saber!

+0

Esto no está etiquetado como python, pero para loop en el medio seguro parece python. –

+0

Tanto en PHP como en lienzo con HTML5 y JavaScript, puede obtener el color promedio de rgb de una imagen.A partir de ahí, agregará todos los valores y los dividirá por 3 para obtener la claridad de su imagen. Organizará todos los valores a lo largo del eje y de claro a oscuro, y realizará un cambio de matiz de r a ga b a lo largo del eje x. Solo una idea, después de terminar mi proyecto actual, podría trabajar en esto, ¡gracias por la idea! – Vap0r

+0

gracias Vap0r, aquí hay un ejemplo más claro de lo que estoy buscando: http://www.pixolution.de/sites/LargeImages_en.html – user257543

Respuesta

0

Agrupe colores similares utilizando la distancia entre ellos y no entre ellos y el negro, y utilice el color medio de la imagen.

+0

Creo que el color medio en lugar de la media funcionaría mejor, de lo contrario algunos casos extremos mira fuera de lugar. A menos que eso sea lo que él quiere, por supuesto, difícil de ver en su ejemplo. – Lepidosteus

+0

Buscando el color dominante. Este enlace sugiere utilizar el punto máximo en un histograma "suavizado": http://stackoverflow.com/questions/5205244/get-average-color-from-bmp pero no entienden lo que el enfoque que se describen a alisándolo – user257543

+0

El método sugerido en el enlace es un desenfoque simple logrado al promediar los píxeles. Creo que la pregunta vinculada responde su consulta por cierto. – FinnNk

2

que nunca he hecho algo como esto a mí mismo, así que perdónenme si el siguiente enfoque es ingenuo:

  • Para cada imagen, reducirlo a 1 valor medio RGB sumando los R, G, B valores de todos los píxeles, y divida entre el total de # píxeles. Normalice los componentes a [0..1]
  • Trace la imagen en su espacio de color 2D en función de los valores RGB. Esto puede ser una proyección 2D de una transformación de vector 3D (r, g, b).
+0

Sí, estaba pensando en estas líneas también. Lo que él describe es una proyección hasta 1D. La foto de ejemplo ciertamente parece que se está proyectando a 2D. Estaba jugando con algo como esto: 'x = h * s',' y = v * s' como la proyección. Pero podría haber algo mejor. – andrewdski

+0

interesante, daré una oportunidad a ambos enfoques – user257543

1

podría convertir al VHS y ordenar por H

Hue es lo que más la gente piensa cuando piensa en "color"

véase: RGB to HSV in PHP

Cuestiones relacionadas