Trouver le seuil d’une image (Thresholding)

Afin de transformer une image colorée, telle que celle capturée par votre caméra, en une image binaire, avec la cible en « premier plan », nous devons seuiller l’image en utilisant la teinte, la saturation et la valeur de chaque pixel.

L’espace de couleur HSV (teinte, saturation et luminosité)

Il existe plusieurs façon de définir une même couleur: l’espace RGB (rouge, vert, bleu) et l’espace HSV. Ils ont chacun leur utilité selon le traitement désiré. Contrairement à l’espace RGB, l’espace HSV vous permet d’isoler le vert par exemple, peu importe son intensité sa luminosité.

  • Teinte: mesure la tonalité d’une couleur dans le spectre lumineux.

  • Saturation: mesure l’intensité de la couleur du pixel.

  • Value: Measures the brightness of the pixel.

Les effets que les paramètres hue, saturation, et value ont chacun sur une couleur.

Vous pouvez utiliser OpenCV pour convertir une matrice d’images BGR (bleu, vert, rouge) en HSV. En OpenCV, l’ordre des couleurs primaires, communément appelée l’espace RGB, est différente (BGR).

hsv_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2HSV)

Note

La gamme de teintes d’OpenCV est de 1° à 180° au lieu des 1° à 360° habituels. Afin de convertir une valeur de teinte commune en OpenCV, divisez par 2.

Seuillage

Nous utiliserons cette image du terrain de jeu comme exemple pour l’ensemble du processus de traitement d’image.

Une image de faible luminosité avec le ruban rétroréfléchissant montrant le vert.

En limitant l’image à l’aide de HSV, vous pouvez séparer l’image en la cible de vision (premier plan) et les autres éléments que la caméra voit (arrière-plan). L’exemple de code suivant convertit une image HSV en image binaire par seuillage avec des valeurs HSV.

binary_img = cv2.inRange(hsv_img, (min_hue, min_sat, min_val), (max_hue, max_sat, max_val))

Note

Ces valeurs peuvent devoir être ajustées sur le terrain, car l’éclairage ambiant peut différer d’un site à l’autre. Il est recommandé d’autoriser la modification de ces valeurs via NetworkTables afin de faciliter les changements rapides de valeurs.

Après le seuillage, votre image devrait ressembler à ceci.

Après le seuillage la plupart du reste ou l’image est masquée et le ruban vert est retourné comme blanc.

Comme vous pouvez le voir, le processus de seuillage peut ne pas être 100% efficace. Vous pouvez utiliser des opérations morphologiques pour amenuiser le bruit.