Points d'intérêt
Cours
Comment décrire les points d'intérêt ?
- Descripteur de type patch (liste des intensités) autour du point d'intérêt. Mais un patch n'est pas robuste à la rotation, au changement d'échelle, d'illumination ou de point de vue, sauf si on l'impose :
- Rotation : tourner le patch dans l'axe d'orientation principale
- Échelle : trouver la bonne échelle grâce à la pyramide LoG et ramener le patch à une taille normalisée
- Illumination : normaliser le patch
- Point de vue : considérer que le patch a subi une transformation affine, trouver les orientations et transformer le patch
Descripteur à base d'histogrammes
Calculer l'histogramme des orientations des gradients d'intensités. Le pic de l'histogramme donne l'orientation principale. Ramener le patch vers l'orientation principale, compensation de l'orientation.
Appariement de points
On a les points d'intérêt et les descripteurs associés : comment les apparier ? Nous pouvons utiliser la méthode d'appariement des points. Soit un descripteur dans , trouver le meilleur correspondant .
- Définir la distance
- Tester tous les (ou dans un voisinage) et sélectionner celui qui minimise , en imposant éventuellement , un seuil.
Cependant, une bonne distance peut donner un mauvais appariement. Une autre approche (test du ratio de Lowe) consiste à :
- calculer où est le second plus proche
- des valeurs de proches de 1 signifient des appariements ambigus, donc à rejeter ; on ne conserve que les appariements dont le ratio est faible (par exemple )
Estimation d'homographie avec RANSAC
Soit (égalité à un facteur près, en coordonnées homogènes), avec la matrice de transformation projective (homographie) :
Utiliser RANSAC : choisir un nombre d'itérations ; tant que :
- sélectionner aléatoirement 4 paires de points appariés (le minimum pour déterminer les 8 degrés de liberté de )
- calculer la matrice de transformation entre ces points
- construire l'ensemble des inliers, tels que
- si cet ensemble est plus grand que ceux obtenus précédemment, poser et stocker les inliers
- décrémenter
L'homographie ayant le plus d'inliers est la solution du problème ; elle est généralement réestimée à partir de tous ses inliers.
La transformée de Hough
- Soit : différentes droites peuvent passer par , ce qui équivaut à différents couples . En pratique, on utilise la paramétrisation , qui évite les pentes infinies.
- La transformée de Hough permet de trouver les droites qui passent par le plus grand nombre de points possible.
L'algorithme de Hough est le suivant : initialiser l'accumulateur à zéro, puis :
- pour tout point de contour dans
- pour tout , calculer et
- Trouver les où est un maximum local
- La ligne détectée est donnée par
Détecteur de Harris
On mesure la variation d'intensité provoquée par un petit déplacement d'une fenêtre : avec
est symétrique, donc diagonalisable dans une base orthonormée de vecteurs propres :
- Les valeurs propres et donnent l'amplitude des variations d'intensité principales
- Les vecteurs propres donnent les directions de ces variations principales
- Coefficient de Harris , avec
- Interprétation de :
- grand et positif (deux valeurs propres grandes) : au voisinage d'un coin
- (une valeur propre grande, l'autre petite) : au voisinage d'un contour
- petit (deux valeurs propres petites) : dans une zone homogène
- Harris est robuste à la rotation, mais pas au changement d'échelle
Mise en pratique
panorama <ims-name-1> <ims-name-2>
Écrire le programme panorama.cpp
- ce programme permet de charger deux images données en paramètre
<ims-name-1>et<ims-name-2> - les images sources sont en couleur mais la plupart des traitements se font en niveaux de gris
- le programme permet de réaliser un panorama à partir des 2 images sources
- le programme affiche les étapes intermédiaires
- les étapes sont les suivantes :
- détecter les points d'intérêt avec les descripteurs SURF, afficher les descripteurs
- appariement des points d'intérêts, via une méthode "brute force" et déterminer les bons appariements, par exemple via un seuillage. Afficher les appariements
- estimer l'homographie via RANSAC, afficher l'image déformée via l'estimation
- construire et afficher le panorama final
- regarder la documentation d'OpenCV sur le module
features2d - certaines classes et fonctions peuvent être utiles
- il peut être nécessaire d'inclure des éléments du module nonfree d'OpenCV (SURF est breveté et se trouve dans
xfeatures2d)
hough-lines <ims-name> <th-mag>
Écrire le programme hough-lines.cpp
- ce programme permet de charger une image donnée en paramètre
<ims-name> - l'image est considérée en niveaux de gris (représentant les contours d'une image)
- le programme permet de mettre en œuvre la transformée de Hough
- le paramètre
<th-mag>permet de seuiller les valeurs de l'image en entrée et de ne pas considérer tous les pixels comme étant des pixels de contour dans le calcul de la transformée - le programme affiche les étapes intermédiaires : l'accumulateur de Hough, les lignes détectées, l'image finale
- afin de ne pas considérer toutes les lignes détectées, on pourra trouver un moyen de seuiller l'accumulateur de Hough afin d'obtenir les maxima locaux de l'accumulateur