2012-06-29 17 views
5

Tengo una matriz de colores hexadecimales RGB. Me gustaría encontrar una manera rápida y sucia de agruparlos por similitud de color y valor de umbral.Encontrar colores HEX similares usando un umbral

spec: enter image description here

+0

http://en.wikipedia.org/wiki/Color_quantization. O podría tratar de jugar con http://www.php.net/manual/en/function.imagetruecolortopalette.php – biziclop

+0

Le sugiero que use un modelo HSV para que pueda comparar Hue, Saturation y Value entre varios colores. – TheZ

Respuesta

3

rápida y sucia:

$dr = $red1 - $red2; 
$dg = $green1 - $green2; 
$db = $blue1 - $blue2; 
$fr = 2; // may be adjusted 
$fg = 4; // " 
$fb = 1; // " 
$distance_squared = $fr * $dr * $dr + $fg * $dg * $dg + $fb * $db * $db; 

A continuación, le compare $distance_squared a la plaza del umbral. Los factores pueden ajustarse (especialmente el azul podría obtener un factor mayor), así como su suma (para que coincida con el umbral)

Para una solución "lenta y limpia", comenzaría desde here (y here para un enfoque más práctico).

1

Elija una color space, y definen la "similitud", como por ejemplo, Distancia euclidiana entre las coordenadas de los dos colores. HSL/HSV podría ser una mejor opción que RGB, por ejemplo.

+0

sí, pensé que eso también. buscando una fórmula si alguien tiene una a mano ;-) – Arturino

+0

@Artur: ¿Una fórmula para qué? Fórmulas de conversión a, p. HSV se dan en el artículo de Wikipedia. La distancia euclídea es simplemente sqrt ((a1-a2)^2 + (b1-b2)^2 + (c1-c2)^2). –

+1

gracias - También encontré esto útil: http://stackoverflow.com/questions/1633828/distance-between-colours-in-php/1634206#1634206 – Arturino

Cuestiones relacionadas