У меня есть массив цветов RGB. Я хотел бы найти быстрый и грязный способ группировать их по подобию цвета и пороговому значению.Поиск похожих цветов HEX с использованием порога
спецификации:
У меня есть массив цветов RGB. Я хотел бы найти быстрый и грязный способ группировать их по подобию цвета и пороговому значению.Поиск похожих цветов HEX с использованием порога
спецификации:
быстро и грязно:
$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;
Вы бы затем сравнить $distance_squared
квадрату порогового значения. Факторы могут быть скорректированы (особенно синий может получить более высокий коэффициент), а также их сумму (чтобы соответствовать порогу)
Для «медленного и чистого» решения я бы начал с here (и here для более практичный подход).
Выберите color space, и определить "подобие", как, например, Евклидово расстояние между координатами двух цветов. Например, HSL/HSV может быть лучшим выбором, чем RGB.
Да, я тоже так много думал. просто ищет формулу, если у кого-то есть удобный ;-) – Arturino
@Artur: Формула для чего? Формулы конверсии, например. ВПГ приведены в статье Википедии. Евклидово расстояние - это просто sqrt ((a1-a2)^2 + (b1-b2)^2 + (c1-c2)^2). –
thanks - Я также нашел это полезным: http://stackoverflow.com/questions/1633828/distance-between-colours-in-php/1634206#1634206 – Arturino
http://en.wikipedia.org/wiki/Color_quantization. Или вы можете попробовать поиграть с http://www.php.net/manual/en/function.imagetruecolortopalette.php – biziclop
Я бы предложил yoo использовать модель HSV, чтобы вы могли сравнить оттенки, насыщенность и значение между несколькими цветами. – TheZ