Introduction à la vision artificielle
Première partie
Traitement des images"
Patrick Hébert
Génie électrique et génie informatique Université Laval
*collaboration Éric Samson
Le robot utilise la vision pour percevoir l'environnement
Mise en contexte"
Qu'est-ce que la caméra permet au robot de faire?
• Localiser les objets sur le terrain, i.e. évaluer la position relative au robot
• Évaluer sa position et son orientation sur le terrain (par rapport aux bandes, coins, à la ligne rouge)
Que fournit la caméra?
• Des images (d’un certain type)
Que faut-il faire avec ces images?
• Extraire et reconnaître des informations utiles dans les images (traitement des images)
• les coins et les bandes de couleurs connues (régions et droites)
• les autres objets (images d’objets rectangulaires de couleurs connues)
• Établir la relation entre la position de ces zones d'intérêt de l'image et l'environnement (le terrain) incluant le robot Magny
• la relation pixel mm
Mise en contexte"
Structure du cours"
• Le cours d'introduction à la vision couvre en particulier 2 étapes du processus de vision qui sont nécessaires à l'atteinte de ces objectifs :
1. Reconnaître les objets dans les images
Traitement des images (première partie)
2. Calculer la position des objets par rapport au robot
Étalonnage géométrique de la caméra et du système (deuxième partie)
• À ces deux blocs s’ajouteront quelques considérations
sur la robotique et l’intelligence artificielle
Mise en contexte"
Ces deux étapes s'inscrivent dans le cycle global
"perception/action" du processus de vision
1. Perception initiale de l'environnement Formation des images/acquisition
2. Traitement des images et reconnaissance
Repérer les objets de l'aire de travail dans l'image 3. Analyse des données
Calculer la position des objets et du robot 4. Planification et prise de décision
Déterminer la prochaine commande à transmettre au robot 5. Exécution
Transmission de la commande au robot
Principe de la caméra"
Caméra numérique Plan image = Matrice de photodétecteurs
*À la leçon 2, nous verrons le détail de la formation des images
Image numérique"
Image numérique : Matrice d'illuminance
• Chaque pixel donne la quantité de lumière reçue par le photodétecteur correspondant
• niveau de gris
*tirée de Trucco et Verri
Image numérique couleur"
• Les 3 couleurs primaires: RVB (ou RGB en anglais)
• Représentation: un vecteur de 3 canaux ou une matrice de
vecteurs de dimension 3 OpenCV:entrées/sorties
Terminologie"
• champ de vue
Comment mesurer le champ de vue?
(placer la caméra devant un mur à au moins 1 m!)
• plage dynamique: écart entre le plus petit et le plus grand niveau
d'illuminance exemple:
256 niveaux pour une image 8 bits
**tirée de Forsyth
Plan de la présentation"
Traitement des images : Introduction
• Espaces des couleurs
• Filtrage
• Segmentation
Extraction de régions
Extraction de contours
Détection de coins
• Conclusion
Traitement des images : introduction"
• Le traitement simple des images peut se faire en 2 étapes:
1. Traitement de bas niveau
Opérations sur les pixels
- Filtrage
- Regroupement en régions - Détection de contours
- Détection de points d'intérêt (coins)
2. Interprétation
Reconnaissance basée sur les modèles
Est-ce que ce groupe de pixels "jaunes" peut correspondre à une balle sphérique ou à une cible rectangulaire?
Traitement des images : introduction"
Plusieurs facteurs influencent le traitement et l'interprétation des images
• Éclairage variable
Heure du jour, éclairage naturel ou artificiel
• Arrière-plan (circulation autour de la table!)
• Point de vue différent
Un objet peut présenter des formes très différentes selon le point de vue
- La simple projection d'un espace 3D à 2D pour un objet opaque - La déformation de perspective
- La réflectance des matériaux
• Bruit du capteur
• …
Traitement des images : introduction"
Pour éviter des résultats indésirables ( e.g. fausse détection, manque ), il faut que le traitement et l'interprétation soient robustes aux variations des facteurs hors de votre contrôle
• Robustesse au niveau du traitement
(ex. seuillage adaptatif)
• Robustesse au niveau de l'interprétation (validation)
"et/ou"
Traitement des images : introduction"
Pour éviter des résultats indésirables (
e.g. fausse détection, manque), il faut que le traitement et l'interprétation soient robustes aux variations des facteurs hors de votre contrôle
• Robustesse au niveau du traitement
(ex. seuillage adaptatif)
• Robustesse au niveau de l'interprétation
Attention : La robustesse implique souvent un traitement plus complexe donc plus long. Ex. Confirmer la détection en utilisant un 2
etraitement (différent).
"et/ou"
Plan de la présentation"
Traitement des images : Introduction
Espaces des couleurs
• Filtrage
• Segmentation
Extraction de régions
Extraction de contours
Détection de coins
• Conclusion
Espaces des couleurs"
• En général, on représente la couleur à l'aide de 3 valeurs
Espace en 3 dimensions
• L'espace le plus connu est RGB (Rouge, Vert, Bleu)
– Lié au système visuel humain
• L'œil perçoit la couleur à l'aide de trois types de capteurs (cônes)
sensibles à trois plages de longueurs d'onde.
*Tiré de Pratt
Espaces des couleurs"
• L'espace RGB (suite)
– Largement utilisé en informatique (moniteurs)
– Teintes de gris R=G=B
le long de la diagonale – Couleurs additives
Espaces des couleurs"
Autres espaces
– Couleurs soustractives – Utilisé pour l'imprimerie
• CMY[K]
• YIQ, YUV, YCrCb, YCC, etc (Luminance-Chrominance)
Y Luminance
Deux autres variables Définissent la couleur (tendances rouge et bleue) – Utilisé pour la transmission d'image vidéo (NTSC, PAL)
– Si vous examinez le code d’acquisition des Quickcam, vous en saisirez tout l’intérêt
Cyan, Magenta, Yellow
[K] Noir
Espaces des couleurs"
• HSI (ou HSV) Teinte (H), Saturation (S), Intensité(I)
– Séparation de la teinte et de l'intensité
• Plus intuitif pour identifier et spécifier les couleurs
• Traitement des ombrages plus facile lors de la segmentation
Ombrage même couleur mais intensité différente.
– I: intensité (illuminance) I=(R + V + B) / 3
– La couleur est contenue dans H (Hue) : un angle (0 360°)
– S (Saturation): un rayon entre 0 et 1 (pureté)
• S = 0 -> gris
• S = 1 -> couleur pure!
• (ou bien entre 0 et 255)
Espaces des couleurs"
• Passage RGB HSI
– Rotation du cube de l'espace RGB tel
que la diagonale est alignée avec l'axe Z
et la composante R est dans le plan XZ
Espaces des couleurs"
• Passage RGB HSI : Formules
• RGB to HSI (Gonzalez and Woods)
I = 1/3(R+G+B)
S = 1 - ( 3/(R+G+B))*a
where a is the minimum of R, G and B
H = cos^(-1) ( (0.5*((R-G)+(R-B))) / ((R-G)^2 + (R-B)*(G-B))^(0.5) )
If S = 0, H is meaningless.
If (B/I) > (G/I) then H = 360 – H
Since H is an angle in degrees we then normalise to [0,1] with H=H/360
Espaces des couleurs"
• Passage RGB HSV : Formules
documentation opencv : cvCvtColor
• V=max(R,G,B)
• S=(V-min(R,G,B))*255/V if V!=0, 0 otherwise
• H = (G - B)*60/S, if V=R
• H = 180+(B - R)*60/S, if V=G
• H = 240+(R - G)*60/S, if V=B
• if H<0 then H=H+360
• The hue values calculated using the above formulae vary from 0° to 360° so they are
divided by 2 to fit into 8-bit destination format.
Autre référence sur les conversions: http://en.wikipedia.org/wiki/HSL_and_HSV
Espaces des couleurs : Exemple"
(gauche) Image originale;
(centre) diminution de 20% de la saturation (droite) augmentation de 40% de la saturation
Tirée de Stockman et Shapiro
Plan de la présentation"
Traitement des images : Introduction
Espaces des couleurs
Filtrage
• Segmentation
Extraction de régions
Extraction de contours
Détection de coins
• Conclusion
Filtrage linéaire"
• Convolution de l'image avec un masque (noyau) fixe
– La convolution est une opération linéaire
• symétrique A * E = E * A
• associative A * (B * E) = (A * B) * E
Équation de convolution Exemple de masque
lien sur traitement d'images dans opencv (voir cvSmooth)
Filtrage linéaire"
• Exemple de filtre : Le filtre de moyennage
– Chaque pixel de l'image résultat prend comme
valeur la somme pondérée des pixels voisins.
Filtrage linéaire"
• Filtrage linéaire : Attention aux effets de bord !
• les ignorer image résultat plus petite
• on peut ajouter des valeurs constantes sur les bords mais …
• on peut considérer l'image comme étant périodique mais …
• on peut considérer le bord de l'image comme un miroir mais …
Filtrage linéaire"
– On choisit la taille du filtre (pixel) – On prend
Exemple :
Filtres 1D :
(voir cvSmooth)
Note sur le filtrage non-linéaire"
• Le résultat n'est pas une combinaison linéaire des pixels de l'image à traiter mais plutôt une fonction non-linéaire telle qu'un min, un max ou la
médiane.
Note sur le filtrage non-linéaire:
Les opérateurs morphologiques "
• min-max
• élément structurant (s: forme du filtre)
• érosion (min) et dilatation (max)
• ouverture (une érosion suivie d'une dilatation):
f o s
• fermeture (une dilatation suivie d'une érosion):
f s
• images binaires et en niveaux de gris
*utile pour du nettoyage dans l'image: Morphologie dans opencv
a) choix de l'élément structurant:
signal:
b) dilatation c) érosion
Exemple dʼune fermeture 1D"
*tirée de Efford
Ouverture et fermeture sur une image binaire"
Retour au filtrage linéaire: rehaussement dʼarêtes"
• Calcul du gradient (dérivée première pour le rehaussement d'arêtes)
Gradient horizontal : Gradient vertical : - Attention : la dérivée est sensible au bruit.
Faire un filtrage gaussien avant de l'utiliser ou bien appliquer un masque de Sobel
- À noter :
OpenCV: gradient, edges and corners
Filtrage linéaire: rehaussement dʼarêtes"
• Laplacien (dérivée seconde pour le rehaussement d'arêtes)
Laplacien :
Arêtes aux passages par zéro
Plan de la présentation"
Traitement des images : Introduction
Espaces des couleurs
Filtrage
Segmentation
Extraction de régions
Extraction de contours
Détection de coins
• Conclusion
Segmentation en régions"
• Découper l'image en régions de mêmes caractéristiques
Exemples de caractéristiques sur lesquelles on peut segmenter
• Illuminance, couleur (caractéristique d'un pixel)
• Texture (caractéristique de voisinage)
• Mouvement inter-images (caractéristique de voisinage)
• Segmentation simple (basée sur les caractéristiques des pixels) 2 étapes
1. Classifier chaque pixel
Ex. : 0 Noir 1 Blanc
2 Jaune 3 Rouge 4 Autre
2. Regrouper par régions
Regrouper les pixels connexes portant la même étiquette.
Segmentation en régions"
• Segmentation : Étape 1 – Classifier chaque pixel
• Chaque pixel est caractérisé par la valeur de ses paramètres
Paramètres : H, S et I (ou V) si on désire segmenter sur la couleur
• Modèle: Intervalle sur les paramètres 1 étiquette
Ex. : Jaune si H est en radians Attention : HSI H invalide lorsque
Comment choisir les intervalles pour que les régions soient représentatives?
Ex. : On désire mettre en évidence des objets d'une couleur distincte
• Mesure directe (un modèle basé sur un ensemble d'images)
• Analyse d'histogramme (pour adaptation automatique d'intervalles)
Segmentation en régions"
• Analyse d'histogramme
– On tente de séparer les différents modes de l'histogramme – Cette procédure peut être automatisée
Histogramme d'une
image en ton de gris
Segmentation en régions"
• Analyse d'histogramme
– On tente de séparer les différents modes de l'histogramme – Cette procédure peut être automatisée
Histogramme des
couleurs
(variable H de HSI)Segmentation en régions"
• Segmentation : Étape 2 – Regrouper par régions
• Regrouper les pixels connexes portant la même étiquette pour former des régions de mêmes caractéristiques
*tirée de Efford
Définition de la connexité
Connexité à 4 voisins
Connexité à 8 voisins
Segmentation en régions"
• Segmentation : Étape 2 – Regrouper par régions : Algo. (1/2)
Entrée
• Image d'étiquettes
• # des étiquettes à regrouper
Sortie
• Image de régions :
Pour chaque pixel ayant l'étiquette spécifiée en entrée : le numéro de la région à laquelle il appartient.
Par exemple :
• Entrée : Étiquette à regrouper Noir
• Sortie : Pixels avec comme attributs (2) - Noir région 1
- Noir région 2 - …
- Noir région N
Segmentation en régions"
• Segmentation : Étape 2 – Regrouper par région : Algo. (2/2)
Procédure
• Bien qu'on puisse développer un algorithme simple sans trop de
difficultés, il est possible d'étiqueter efficacement (en une seule passe) toutes les régions connexes.
• On suggère: cvConnectedComp
Segmentation en régions"
• Validation du résultat de la segmentation
• Pour une étiquette donnée, récolter diverses informations sur les différentes régions :
Nombre de pixels, largeur, hauteur, centre, point de contact avec le sol, etc.
• Définir des critères pour éliminer les régions sans intérêt
Exemple de critères :
• Ratio Hauteur/Largeur
• Un cercle couvre (pi/4)*100% de la surface de son "bounding box"; Un rectangle, près de 100%
• Position du centre de masse
• Etc. (Ce sont souvent des critères empiriques, soyez inventifs !) Par exemple : On cherche la ligne rouge. On
n'est pas intéressé par le rouge sur le chandail en arrière-plan.
Plan de la présentation"
Exploitation des contours"
• Intérêt:
– Moins sensibles que les régions aux variations d'éclairage
– Des primitives intéressantes: une droite se projette (en théorie) comme une droite!
• Difficultés:
– Contours incomplets (par partie)
– Il faut aussi regrouper les contours d'un même
objet
Extraction de contours (Canny)"
1. Calculer les dérivées horizontale et verticale (E
Xet E
Y)
E
XE
YExtraction de contours (Canny)"
1. Calculer les dérivées horizontale et verticale (E
Xet E
Y) 2. Calculer les module et orientation
en chaque pixel :
E
XE
YE
SExtraction de contours (Canny)"
1. Calculer les gradients horizontal et vertical (E
Xet E
Y) 2. Calculer les images :
*tirée de Trucco
Orientation de la normale au contour
Significatif seulement lorsque ES est non-nul (i.e. aux endroits près d'un contour)
Extraction de contours (Canny)"
1. Calculer les gradients horizontal et vertical (E
Xet E
Y) 2. Calculer les images :
3. Éliminer les réponses non-maximales
Un pixel a une réponse maximale si ses deux voisins, situés dans l'axe de sa normale, ont une réponse
inférieure. Un pixel non-max est mis à zéro.
Extraction de contours (Canny)"
1. Calculer les gradients horizontal et vertical (E
Xet E
Y) 2. Calculer les images :
3. Éliminer les réponses non-maximales
Un pixel a une réponse maximale si ses deux voisins, situés dans l'axe de sa normale, on une réponse
inférieur. Un pixel non-max est mis à zéro.
4. Seuillage par hystérésis (2 seuils)
1. Si réponse du pixel > Seuil 1 Contour
2. Suivre le contour tant que la réponse des pixels rencontrés soit > Seuil 2
• Ce type de seuillage évite les contours segmentés
• Souvent : Seuil 1 = 2*Seuil 2
Extraction de contours (Canny)"
1. Sortie du détecteur de contours de Canny :
Image de contours (binaire) (voir aussi: OpenCV: edges)
Plan de la présentation"
• Constat: les détecteurs d'arêtes se comportent moins bien près des coins
• Proposition: détecter les endroits où le gradient est fort dans plus d'une direction
• Réalisation: (détecteur de Harris)
• Voir aussi OpenCV Good features to track
Détecteur de coins et points isolés"
• Détecteur de Harris
Entrée : Image d'intensité, taille N de la fenêtre de traitement (entre 2 et 10 pixels) et un seuil Sortie : Une liste de coins
Détecteur de coins et points isolés"
Procédure :
1. Calculer les images de gradients EX et EY 2. Pour tous les points de l'image
Estimer la matrice de covariance du gradient (dans une fenêtre 2N+1 * 2N+1) et en extraire les valeurs propres (λ1 et λ2 avec λ2 ≤ λ1).
3. Si la valeur propre minimale (λ2 ) > seuil coins 4. Trier les coins dans un ordre décroissant selon λ2
5. En parcourant les coins triés, on élimine les autres coins se trouvant dans le voisinage du coin courant
• Détecteur de Harris
– Exemples de résultats
Détecteur de coins et points isolés"
*tirées de Trucco
• Autre méthode de détection
Utilise le résultat de l'extraction de contours
• Ajuster des droites sur les contours de normale constante
• Les coins sont à l'intersection des droites