Обнаружение цвета с использованием цветового пространства YCrCb?

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

  // 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.

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

Спасибо.


person van_tomiko    schedule 04.12.2009    source источник


Ответы (3)


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

Но, как сказал кигурай, если вы хотите отслеживать цвета, вам лучше делать это в формате HSV (или HSI). В этом формате компонент H (оттенок) представляет сам цвет в диапазоне от 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 ( (((R-G) + (RB))/2)/ (sqrt ((R-G) ^ 2 + (RB) * (GB) )))

person Andres    schedule 04.12.2009

Вместо этого я предлагаю вам использовать цветовое пространство HSV, что, скорее всего, сделает это намного проще.

person Hannes Ovrén    schedule 04.12.2009

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

person Laurent Etiemble    schedule 04.12.2009