Обнаружение цвета с использованием цветового пространства YCrCb? - PullRequest
1 голос
/ 04 декабря 2009

В этом коде я обнаружил попытку отследить красный цвет в цветовом пространстве 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.

Спасибо.

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

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

Но, как сказал kigurai, если вы хотите отслеживать цвета, вам лучше сделать это в формате 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 ((((R-G) + (R-B)) / 2) / (sqrt ((R-G) ^ 2 + (R-B) * (G-B))))

0 голосов
/ 04 декабря 2009

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

0 голосов
/ 04 декабря 2009

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

...