Как я могу классифицировать некоторые цветовые диапазоны? - PullRequest
6 голосов
/ 10 декабря 2011

Если я получу светло-серый цвет (например, R = G = B = 200) и темный (например, R = 46, G = 41, B = 35), я бы хотел классифицировать их обапростая группа серого цвета (представьте таблицу).

Итак, как я могу организовать цвета по цветным группам?

Ответы [ 3 ]

15 голосов
/ 10 декабря 2011

Для визуальной классификации цветов часто проще сначала преобразовать цвет в HSL или HSV . Чтобы обнаружить серые, вы проверяете, находится ли насыщенность ниже некоторого порога. Чтобы обнаружить любой другой цвет, вы проверяете оттенок.

public string Classify(Color c)
{
    float hue = c.GetHue();
    float sat = c.GetSaturation();
    float lgt = c.GetLightness();

    if (lgt < 0.2)  return "Blacks";
    if (lgt > 0.8)  return "Whites";

    if (sat < 0.25) return "Grays";

    if (hue < 30)   return "Reds";
    if (hue < 90)   return "Yellows";
    if (hue < 150)  return "Greens";
    if (hue < 210)  return "Cyans";
    if (hue < 270)  return "Blues";
    if (hue < 330)  return "Magentas";
    return "Reds";
}

Конечно, вы можете использовать и другие подразделения.

Я сделал простое приложение JavaScript, чтобы проверить это: Цветовая классификация

1 голос
/ 10 декабря 2011

Есть несколько способов классификации цветов. Одним из способов было бы рассмотреть rgb как трехмерную координату, и тогда все возможные цвета могли бы быть представлены внутри коробки или куба с черным в оригинале и белым в противоположном углу, расположенном в (255,255,255). Все сероватые цвета будут расположены близко к диагонали. И красный, зеленый и голубоватый цвета близки к оси. Таким образом, задача классификации была преобразована в поиск ближайшего расстояния между точкой (цвет) и линией (серая диагональ) в трехмерном пространстве. Если расстояние ниже заданного трехцветного, цвет будет классифицирован как серый.

0 голосов
/ 10 декабря 2011

Как насчет реализации таблицы цветов ниже:

public class ColorTable
{
    public Color ColorName { get; set; } //can set color code too
    public string GroupName { get; set; }

}

И напишите ниже код для генерации / получения группы цветов:

//Generating Color Group Table
List<ColorTable> MyColorTable = new List<ColorTable>();
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.Gray });
MyColorTable.Add(new ColorTable { GroupName = "Gray", ColorName = Color.LightGray });
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.Green });
MyColorTable.Add(new ColorTable { GroupName = "Green", ColorName = Color.LightGreen });

//Getting required Color Group, say "Gray"
List<ColorTable> GreenColor = MyColorTable.Where(c => c.GroupName == "Gray").ToList();
...