Rapport du TP de traitement d'images
Par Orhan • 19 Mai 2018 • 2 661 Mots (11 Pages) • 914 Vues
...
La version basique de l’algorithme FAST comprend des limites. En effet, dans le voisinage d’un coin, il aura tendances à détecter plusieurs points d’intérêts au lieu d’observer le point qui représente le coin. Ce problème peut être résolu par la méthode de la suppression non-maximale.
Avant de détailler la réalisation de cette méthode dans le cadre de ce TP, je souhaiterais, d’abord, expliciter les différentes fonctions utilisé pour mettre en place l’algorithme FAST avec la suppression non-maximale.
Fonction sumOfDifference(): cette fonction prend en paramètres l’intensité d’un pixel p ainsi qu’un tableau de 16 valeurs représentant les intensités des pixels formant un cercle centré en p. Comme son nom l’indique, elle calcule la somme des différences d’intensité entre le pixel p ainsi que tous les pixels ci du cercle. Le résultat que retourne la fonction est un score qu’utilise la suppression non-maximale afin d’éliminer les faux points d’intérêts.
Fonction areNeighbors(): étant donné deux points, elle retourne vrai, s’ils sont voisins et faux sinon.
Fonction contains(): prend en paramètres un point p et un ensemble de points E et vérifie si p appartient à E.
La méthode de la suppréssion non-maximale, dans le cadre d’un détecteur FAST, consiste à réaliser les étapes suivantes:
- Calcul, pour chaque point d’intérêt, un score V. Ce score est la somme des différences entre l’intensité du pixel en question ainsi que les 16 autres l’entourant. Il est calculé par la fonction sumOfDifference().
- Pour chaque deux voisins, les deux score respectifs sont comparés et le point correspondant au plus bas score est supprimer de l’ensemble.
Ainsi, les faux points d’intérêts seront éliminer ce qui permettra de rendre le detecteur de coin plus efficace.
Implémentation:
La version avancée de FAST est la fonction fastAdvanced(). En partant de la version basique de FAST, la mise en place de la suppression non-maximal a consisté à ajouter les opérations suivantes:
- La détermination des points d’intérêts reste la même que celle de la première version. Le seul changement est d’associer à chaque point le score correspondant avec la donction sumOfDifference().
- Pour chaque point d’intérêt p, on parcours l’ensemble des points dans le but de trouver des voisins de p avec la fonction areNeighbors().
- Comparer le score de p avec ceux des voisins, et ne garder que le point ayant le score le plus bas et éliminer les autres.
Remarque: Pour exécuter le détecteur FAST, il suffit d’appeller la fonction fast(), qui prend en paramètre une image, un seuil ainsi qu’un booléen nonMaxSupp. Si ce booléen est à true, la version avec la suppression non-maximale est utilisé. Sinon, la version basique.
2.3. Synthèse des résultats
2.3.1. Comparaison avec fast OpenCV (nombre, temps d’exécution)
Dans le but de comparer mon implémentation de l’algorithme FAST avec celle proposée par OpenCV, je prend en considération deux aspects importants, le nombre de points détectés ainsi que le temps d’exécution.
Remarque: J'utilise pour déterminer le temps d’exécution time_t. Or, avant l’appel aux fonctions FAST, j’enregistre le temps actuel. Ensuite, j’appelle une fonction FAST. Enfin, j’enregistre dans une time_t le temps actuel. Le temps d’exécutione est donc la soustraction des deux temps exprimée en millisecondes.
Une fonction a été créé afin de comparer les différentes implémentations de l’algorithme FAST. Il s’agit de la fonction compareFast() qui prend en paramètre une image et un seuil. En retour, la fonction calcule le temps d’exécution ainsi que le nombre de points detéctés pour:
- La version basique de FAST
- La version OpenCV sans suppréssion maximale de FAST
- La version avancé de FAST (avec suppression non-maximale)
- La version OpenCV avec suppression maximale de FAST
L’expérimentation a été faite sur l’image set1-1.png, avec un seuil égale de 80. On observe les résultats suivants:
[Photo]
Concernant les version sans la suppression non-maximale, mon implémentation de FAST détecte exactement le même nombre de points que celle d’OpenCV. Par ailleurs, même si le temps d’exécution de mon implémentation est correcte (29.307 ms), celui d’OpenCV demeure le plus optimal avec une différence de 29.018 ms.
Quant aux version avec la méthode de la suppression non-maximale, celle d’OpenCV détecte 567 points d’intérêts. A savoir qu’elle élimine 589 points faussement comptabilisé par rapport à la version basique pour le même temps d’exécution. Or, mon implémentation a permit de détecter 594 points d’intérêts, divisant ainsi ce nombre par 2 par rapport à la première version. En effet, ça a permit d’optimiser la détection de coins en éliminant, pour ce cas, 562 points faussement comptabilisés.
L’implémentation de la méthode de suppression non-maximale n’est pas encore parfaite, mais reste tout de même assez proche de celle d’OpenCV avec une différence de 27 points. Par contre, en temps d’exécution, elle reste très loins de celle d’OpenCV avec une différence de 58 ms.
2.3.1. Visualisation des coins détectés
En ce qui concerne la verification de l’exactitude des coin détectés, cela se fait en affichant les points détectés sur l’image analysée. Pour ce faire, une fonction showCorners() a été créé. Elle prend en paramètre une image et l’ensemble des points d’intérêts, et affiche ensuite les points sur l’image en rouge.
Dans la fonction de comparaison compareFast() de la partie précédente, j’ai sollicité showCorners() pour afficher le résultats de l’algorithme FAST avec et sans suppression non-maximale. L’image suivante illustre l’expérimentation sur l’image de synthèse avec les formes géométriques bien définies.
[Photo]
Celle de gauche
...