Supongamos que hay 10.000 imágenes JPEG, PNG en una galería, ¿cómo encontrar todas las imágenes con paletas de colores similares a una imagen seleccionada ordenada por similitud descendente?Buscar imágenes con una paleta de colores similar con Python
Respuesta
Genere un histograma de color para cada imagen. Luego, cuando desee hacer coincidir una imagen con la colección, simplemente ordene la lista por la proximidad de su histograma al histograma de su imagen seleccionada.
La cantidad de depósitos dependerá de la precisión que desee. El tipo de datos combinados para crear un segmento definirá la forma de priorizar su búsqueda.
Por ejemplo, si usted está más interesado en el tono, entonces se puede definir en qué cubeta su cada pixel individual de la imagen entra en como:
def bucket_from_pixel(r, g, b):
hue = hue_from_rgb(r, g, b) # [0, 360)
return (hue * NUM_BUCKETS)/360
Si también desea un matcher general, entonces se puede selecciona el cubo según el valor RGB completo.
Usando PIL, puede usar la función incorporada histogram
. Los histogramas de "cercanía" pueden calcularse utilizando cualquier medida de distancia que desee. Por ejemplo, una distancia L1 podría ser:
hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored
dist = sum([abs(x) for x in (hist_sel - hist)])
una L2 sería:
dist = sqrt(sum([x*x for x in (hist_sel - hist)]))
Normalize
solo fuerza a la suma del histograma para igualar algún valor constante (1.0 funciona bien). Esto es importante para que las imágenes grandes se puedan comparar correctamente con las imágenes pequeñas. Si va a usar distancias L1, entonces debe usar una medida L1 en normalize
. Si L2, entonces L2.
@Frank, gracias por su consejo. ¿Me podría dar algún código de ejemplo en Python? La función de histograma incorporado (PIL) devuelve una lista, ¿cómo determinar qué tan cerca están los histogramas de dos imágenes? – jack
@Frank, parece que requiere 10.000 cálculos de distancia al elegir imágenes con un histograma similar de 10.000 candidatos. ¿Es posible asociar valores numéricos con cada imagen y almacenarlos en la base de datos, por lo que la comparación se puede simplificar con algunas consultas SQL? – jack
@jack, 10,000 calcs no es realmente tan caro. La mejor manera de acelerar un código como este no es reducir los histogramas en enteros (lo que no se puede hacer de la manera que crees) sino simplemente ** almacenar en caché ** los resultados. Guarde en caché el orden de clasificación (por imagen) en la base de datos o almacénelo en la memoria caché. Asegúrese de almacenar también el histograma en la base de datos o en la memoria para que reconstruir esos cachés de orden no sea costoso. –
Su pregunta hgas ya ha sido respondida. Echar un vistazo a estas otras respuestas SO:
Debería ser un comentario ... – ChristopheD
No diría que ha sido respondida. Está atrapado en PIL-land. –
- 1. Buscar imágenes de color similar
- 2. Compartir una paleta de colores en xcode
- 3. Cómo reducir la paleta de colores con PIL
- 4. PHP GD colores de la paleta
- 5. Crear una paleta de colores personalizada en I
- 6. Uso de una paleta de colores predefinida en ggplot
- 7. Generar paleta de colores a partir de una imagen
- 8. ¿Existe una biblioteca js que pueda generar una paleta de colores a partir de una imagen?
- 9. Emular la paleta de colores predeterminada de ggplot2
- 10. ¿Cómo puedo dibujar texto con diferentes trazos y rellenar colores en las imágenes con python?
- 11. cambio de tamaño de imágenes con colores PIL cambia drásticamente
- 12. cambiar la paleta de colores por defecto en ggplot
- 13. Disposición con diferentes colores
- 14. Imagen JPEG con colores incorrectos
- 15. de apilamiento imágenes astronómicas con Python
- 16. crear una paleta de colores más continua en R, ggplot2, enrejado, o latticeExtra
- 17. Buscar host con dirección MAC usando Python
- 18. Buscar la fecha del lunes con Python
- 19. imprimir cadena de colores a la consola con python
- 20. Buscar XML con una operación de búsqueda completa LIKE u otra similar
- 21. Algoritmo para la cuantización del color/paleta de colores de la imagen reducida en JavaScript?
- 22. Node.js spawn con colores?
- 23. Cambiando colores con CGContextStrokePath
- 24. Python, XPath: Buscar todos los enlaces a las imágenes
- 25. ¿Cómo visualizo una matriz con los colores y valores mostrados?
- 26. diccionario: busque cadenas de teclas con una característica similar
- 27. Buscar 'grep-similar' mediante funciones de PostgreSql
- 28. Uso de colores con printf
- 29. Componente de paleta de herramientas
- 30. creación de una plantilla de correo electrónico MIME con imágenes para enviar con Python/Django
Posible duplicado: http://stackoverflow.com/questions/593925/how-do-i-find-images-with-a -similar-color-using-python-and-pil – ChristopheD
Sí, pero no hay buenas respuestas sobre esa pregunta. :-) –
Hay mucha discusión similar aquí: http://stackoverflow.com/questions/1034900/near-duplicate-image-detection/1048723#1048723 – Paul