2009-12-04 2 views
1

Этого кода я нашел попытку отслеживать красный цвет в RGB цветового пространства,Определение цвета с использованием цветового пространства YCrCb?

// red color detection, turn the detected one into white 
    if (((red > (0.85 * (green + blue))) && (red > 105)) 
    && ((red - green > 73)) && (((green < 150) 
    || ((green >= 150) && (blue > 140))))) { 
     // set the pixel to white 
     red = 255; green = 255; blue = 255; 
    } 

Кто-нибудь знает, как отслеживать цвет, используя YCrCb цветового пространства RGB вместо? Я просто не знаю, какой именно диапазон для каждого цвета, чтобы отслеживать его, например. красный цвет в YCrCb.

Edit: Я пробовал HSV, это не дает лучший результат, чем RGB выше, как ожидается, , следовательно, я считаю использования YCrCb.

Спасибо.

ответ

0

Я предлагаю вам вместо этого использовать HSV colour space, который, скорее всего, сделает это намного проще.

0

В YCbCr типичный диапазон составляет от 16 до 240 для каждого компонента. См. Следующее Wikipedia entry, в котором представлены различные формулы для преобразования между RGB и YCbCr.

1

Прежде всего, вы можете посмотреть here для лучшего определения. Эта цветовая модель (YCrCb) более широко используется в видеоформатах, таких как mpeg. Большинство видеоформатов, если видео использует формат 4: 2: 2, означает, что компонент Y (представляющий яркость) имеет одинаковый размер исходного изображения RGB, в то время как Yb (синий компонент) и Yr (красный компонент) представлены на половину исходного разрешения изображения. Это позволяет уменьшить пропускную способность файла.

Но, как сказал кигурай, если вы хотите отслеживать цвета, вам лучше сделать это с использованием формата HSV (или HSI). В этом формате компонент H (Hue) представляет собой цвет, который вспыхивает от 0..359 (360 градусов). Поэтому, чтобы избежать округления чисел от 0..255, вы можете использовать 16-битную матрицу для представления этого канала в памяти. Также в этом цветовом пространстве S представляет собой насыщенность (какая часть компонента цвета в H присутствует в этом пикселе), а S (или I) представляет яркость изображения.

алгоритму реализовать не трудно:

I = 1/3 * (R + G + B)

S = 1 - (3/(R + G + B)) * (мин. (R, G, B))

H = cos^-1 ((((RG) + (RB))/2)/(sqrt ((RG)^2 + (RB) * (GB))))

Смежные вопросы