2009-12-04 3 views
1

Ce code J'ai trouvé tenter de suivre la couleur rouge dans l'espace couleur RVB,Détection de couleur utilisant l'espace colorimétrique 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; 
    } 

Est-ce que quelqu'un sait comment suivre la couleur en utilisant l'espace colorimétrique RVB YCrCb à la place? Je ne sais tout simplement pas quelle était exactement la gamme pour chaque couleur afin de la suivre, par ex. plage de couleur rouge dans YCrCb.

Modifier: Je l'ai essayé HSV, il ne donne pas meilleur résultat que RGB ci-dessus comme prévu , par conséquent, je considère utilisation YCrCb.

Merci.

Répondre

0

Je vous suggère plutôt d'utiliser HSV colour space ce qui rendra probablement cela beaucoup plus facile.

0

En YCbCr, la plage typique est comprise entre 16 et 240 pour chaque composant. Voir le Wikipedia entry qui détaille les différentes formules à convertir entre RGB et YCbCr.

1

Tout d'abord, vous pouvez regarder here pour une meilleure définition. Ce modèle de couleur (YCrCb) est plus largement utilisé dans les formats vidéo comme MPEG. La plupart des formats vidéo, si la vidéo utilise le format 4: 2: 2, ce qui signifie que la composante Y (représentant la luminance) a la même taille de l'image source RVB alors que Yb (composante bleue) et Yr (composante rouge) sont représentés par la moitié de la résolution d'image originale. En faisant cela, il est possible de diminuer la bande passante du fichier. Mais, comme l'a dit kigurai, si vous voulez suivre les couleurs, vous feriez mieux de le faire en utilisant le format HSV (ou HSI). Dans ce format, le composant H (Hue) représente la couleur elle-même qui fait rage depuis 0..359 (360 degrés). Donc, pour éviter d'arrondir les chiffres de 0..255, vous pouvez utiliser une matrice 16 bits pour représenter ce canal en mémoire. De plus, dans cet espace de couleur, S représente la saturation (quelle proportion de la composante de couleur dans H est présente à ce pixel) et S (ou I) représente la luminosité de l'image.

à l'algorithme à mettre en oeuvre il est difficile:

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

S = 1 - (3/(R + G + B)) * (min (R, G, B))

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

Questions connexes