Как я могу сказать, что цвет RGB в основном СИНИЙ? в с # - PullRequest
7 голосов
/ 19 июня 2011

У меня есть набор изображений неба, некоторые с облаками, а некоторые без.

Некоторые - ясное голубое небо, некоторые - облачно, некоторые - мутные с белыми и серыми облаками.

Как определить, является ли конкретное значение RGB более или менее синим?

Любой оттенок синего - это «синий» - светло-синий, темно-синий, темно-синий, небесно-голубой - все они голубые.

Я хочу уменьшить цвета на изображении до 16. Затем я хочу сделать гистограмму белого, серебряного, серого, синего и «всего остального».

Как узнать из значения RGB, что такое синий или серебристый, белый или серый или что-то еще?

Ответы [ 3 ]

13 голосов
/ 19 июня 2011

RGB - не лучшее цветовое пространство для такого рода вещей. Цветовое пространство, такое как HSV (также известное как HSB) , обеспечивает более интуитивно понятную и описательную модель для данного цвета.

Итак, чтобы получить то, что вы есть, вы можете использовать оттенок данного цвета. Если вы имеете дело со структурой System.Drawing.Color, вы можете использовать метод GetHue () , который возвращает значение оттенка в градусах. Используя колесо оттенка, подобное приведенному ниже, вы можете определить верхний и нижний порог (в градусах) для значений синего цвета, которые вы примете.

Hue Wheel

Обработка изображений и теория цвета в целом далеки от тривиальных предметов. Я бы посоветовал вам найти самый простой метод, который отвечает вашим требованиям. Это может быть достаточно для вас, а может и нет. Если нет, то, возможно, вы можете немного сузить вопрос для меня.

Также осознайте, что вам все еще понадобится пороговое значение для компонентов Яркость и Насыщенность, чтобы гарантировать, что вы на самом деле не имеете дело с черным, белым или серым.

2 голосов
/ 19 июня 2011

Если значения красного и зеленого близки к одинаковым, и если значение синего больше значений красного и зеленого, цвет будет находиться в синем диапазоне. Если все три значения примерно одинаковы, у вас есть некоторая версия серого, и если все они близки к максимальным, цвет будет выглядеть белым. Невозможно быть гораздо более точным, чем это - вам нужно просто взглянуть на палитру цветов и выяснить, какой регион вам кажется «синим».

0 голосов
/ 19 июня 2011

Может быть, построить таблицу со значениями RGB для каждого из 16 цветов, которые вы хотите, а затем сравнить значение каждого пикселя RGB с каждым из значений в вашей таблице. Для сравнения сделайте вычитание, например, R1-R2 G1-G2 B1-B2, затем суммируйте различия и преобразуйте их в цвет, который менее различен.

Похожие вопросы: Сравнить цвета RGB в c #

...