Estoy buscando un algoritmo que compare dos colores RGB y genere un valor de su similitud (donde similitud significa "similar con respecto a la percepción humana promedio").
¿Algunas ideas?
EDITAR :
Como ya no puedo responder, decidí poner mi "solución" como una edición de la pregunta.
Decidí ir con un subconjunto (muy) pequeño de color verdadero en mi aplicación, para poder manejar la comparación de colores por mi cuenta. Trabajo con unos 30 colores y uso distancias codificadas entre ellos.
Como era una aplicación para iPhone trabajé con objetivo-C y la implementación es más o menos una matriz que representa la tabla a continuación, que muestra las distancias entre los colores.
algorithm
colors
comparison
rgb
Kai Huppmann
fuente
fuente
Respuestas:
La distancia RGB en el espacio euclidiano no es muy "similar a la percepción humana promedio"
Puede utilizar el espacio de color YUV , tiene en cuenta este factor:
También puede utilizar el espacio de color CIE para este propósito.
EDITAR:
Mencionaré que el espacio de color YUV es una aproximación económica que se puede calcular mediante fórmulas simples. Pero no es perceptualmente uniforme. Perceptualmente uniforme significa que un cambio de la misma cantidad en un valor de color debería producir un cambio de aproximadamente la misma importancia visual. Si necesita una métrica más precisa y rigurosa, definitivamente debe considerar el espacio de color CIELAB u otro espacio perceptualmente uniforme (incluso si no hay fórmulas simples para la conversión).
fuente
Recomendaría usar CIE94 (DeltaE-1994), se dice que es una representación decente de la percepción humana del color. Lo he usado bastante en mis aplicaciones relacionadas con la visión por computadora y estoy bastante contento con el resultado.
Sin embargo, es bastante costoso computacionalmente realizar una comparación de este tipo:
RGB to XYZ
para ambos coloresXYZ to LAB
para ambos coloresDiff = DeltaE94(LABColor1,LABColor2)
Fórmulas (pseudocódigo):
fuente
La percepción humana es más débil en croma que en intensidad.
Por ejemplo, en video comercial, los espacios de color YCbCr / YPbPr (también llamados Y'UV) reducen la resolución de la información de croma pero preservan la luminancia (Y). En la compresión de video digital, como 4: 2: 0 y 4: 2: 2, se reduce la tasa de bits de croma debido a una percepción relativamente más débil.
Creo que puede calcular una función de distancia dando mayor prioridad sobre luma (Y) y menos prioridad sobre croma.
Además, a baja intensidad, la visión humana es prácticamente en blanco y negro. Por lo tanto, la función de prioridad no es lineal, ya que para luma baja (Y) se pone cada vez menos peso en el croma.
Más fórmulas científicas: http://en.wikipedia.org/wiki/Color_difference
fuente
Hay un excelente escrito sobre el tema de las distancias de color aquí: http://www.compuphase.com/cmetric.htm
En caso de que ese recurso desaparezca, la conclusión del autor es que la mejor aproximación de bajo costo a la distancia entre dos colores RGB se puede lograr usando esta fórmula (en código C ).
fuente
La percepción del color no es euclidiana. Cualquier fórmula de distancia será lo suficientemente buena y terrible al mismo tiempo. Cualquier medida basada en la distancia euclidiana (RGB, HSV, Luv, Lab, ...) será lo suficientemente buena para colores similares, mostrando que el agua está cerca del verde azulado. Pero para valores no cercanos, llega a ser arbitrario. Por ejemplo, ¿el rojo está más cerca del verde o del azul?
De las preguntas frecuentes sobre el color de Charles Poynton :
fuente
La similitud de color en el cubo RGB se mide mediante la distancia euclidiana (use la fórmula de Pitágoras).
EDITAR: Pensándolo bien, esto también debería ser cierto para la mayoría de los otros espacios de color.
fuente