Points d'intérêts
Cours
Comment décrire les points d'intérêts ?
- 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 remettre le patch dans une taille nomralisée
- Illumination : normaliser le patch
- Point de vue : considérer que le patch a suffit 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 dans l'histogramme donne l'orientation princiaple. Ramener le patch vers l'orientation principale, compensation de l'orientation.
Appariement de points
On a les points d'intérêts, les descripteurs associés : comment les matcher ? 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électtionner celui qui minimisent ou , un seuil.
Cependant une bonne distance peut donner un mauvais appariement. Une autre approche est de
- calculer où est le second plus proche
- des valeurs faibles de signifie des matchs ambiguës donc à rejeter
Estimation d'homographie avec RANSAC
Soit avec Ĥ^la matrice de transformation (projective)
Utiliser RANSAC : choisir un nombre d'itérations tant que :
- sélectionner 4 points appariés aléatoirement
- calculer la matrice de transformation entre ces points
- construire l'ensemble de inliers tel que
- si l'erreur commise est inférieur aux autres trouvés
- stocker les inliers
Le max des inliers est la solution du problème.
La transformée de Hough
- Soit différentes droites peuvent passer par . Ceci est équivalent à avoir différents couples
- La transformée de Hough permet de trouver les lignes qui intersectent le plus de points possibles.
L'algorithme de Hough est le suivant : initialiser à zéro
- 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
avec
est symétrique donc décomposable en vecteur / valeur propres
- Les valeurs propres et donnent des informations sur les courbures principales
- Les vecteurs propres donne des informations sur des directions de courbure principales
- Coefficient de Harris
- Interprétation de :
- : au voisinage d'un coin
- : au voisinage d'un contour
- : dans une zone homogène
- Harris est robuste à la rotation mais pas à l'é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êts avec les descripteurs SURF, afficher les descripteurs
- appariement des points d'intérêts, via une méthode "brute force" et déterminer les good matches via par exemple un seullage. 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 les
features2D
- certaines classes et fonctions peuvent être utiles
- il peut être nécessaire d'inclure des éléments du module nonfree d'opencv
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 oeuvre 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 afficher 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