Le travail sur machine sera divisé en 2 parties:
Le travail sera réalisé dans la machine virtuelle préconfigurée téléchargeable ici qui contient un environnement préconfigurée avec OpenCV et une base de code à compléter. La majorité des fonctions demandées existent déjà dans OpenCV : le but n'est pas d'utiliser les fonctions d'OpenCV mais de les coder vous même ! Ici nous utiliserons donc uniquement les conteneurs de base d'OpenCV (essentiellement la classe Mat qui représente une image) et les fontions d'entrée/sortie.
La documentation OpenCV est disponible ici. L'introduction sur le conteneur Mat qui représente en image est particulièrement recommandée.
Organisation : Dans ce premier TP, vous compléterez les fonctions du fichier tpHistogram.cpp situé dans le dossier ~/Desktop/IN5I12 2017/src/. Les fonctions de ce fichier sont accompagnées de programme en ligne de commandes dont les sources se trouvent dans le dossier ~/Desktop/IN5I12 2017/src/com/.
Compilation : L'exécution de la commande make dans le dossier ~/Desktop/IN5I12 2017 génère la compilation des exécutables qui sont placés dans le dossier ~/Desktop/IN5I12 2017/bin/.
Test : Chaque exécutable peut être appelé avec l'option --help pour obtenir une description de son utilisation.
L'exécutable nommé test permet de comparer le résultat produit par votre code à un résultat précalculé (stocké dans le dossier ~/Desktop/IN5I12 2017/bin/expectedResult/.
Rendu : Le rendu du TP est constitué de l'unique fichier tpHistogram.cpp. Ce fichier doit pouvoir être compilé dans l'environnement de développement fourni avec le reste de la base de code fournie. Une erreur de compilation entrainera la note de 0 quelque soit le contenu du fichier.
Fonctions vues en cours à coder : On travaillera toujours avec des images en niveau de gris codées avec des valeurs float (32 bits), sauf pour la question portant sur la fonction "Equalize".
Thême | Fonctions à compléter | Commande associée | Images de test recommandées | Remarque |
---|---|---|---|---|
Traitement d'histogramme | inverse | inverse | * | |
threshold | threshold | blood.png | Essayez de reproduire l'exemple du cours. | |
normalize | normalize | camera_mauvaise_balance.png blobs-bad.png | ||
quantize | quantize | * | ||
equalize | equalize | camera_mauvaise_balance.png blobs-bad.png | Seul exception à la règle: pour simplifier l'écriture de cette fonction l'image reçu en entrée est codée en unsigned char ([0;255]). |
Fonction exploratoire à coder : La fonction de seuillage theshold prend en paramètre un niveau de seuillage t. Il existe différentes stratégie afin de déterminer un niveau de seuil automatiquement et ainsi avoir une fonction de seuillage sans paramètre. La méthode d'Otsu fait partie des méthodes les plus connues pour cela. Elle est basée sur une approche classification : on considère que seuiller l'image à un niveau t revient à classifier les pixels de l'image en 2 classes blanc et noir. On peut alors mesurer la qualité d'un niveau de seuillage par la qualité de la classification qu'il génère. Pour seuiller l'image de manière automatique revient alors à trouver le niveau de seuil qui génère la meilleure classification des pixels. Vous trouverez de nombreuses descriptions de la méthode d'Otsu sur internet: documentation OpenCV, page wikipedia... Implémentez la méthode d'Otsu dans le fichier tp1Histogram.cpp.
Organisation : Dans ce TP, vous compléterez les fonctions du fichier tpConnectedComponents.cpp situé dans l'archive à décompresser sur le bureau. Les fonctions de ce fichier sont accompagnées de programme en ligne de commandes dont les sources se trouvent dans le dossier ~/Desktop/IN5I21 2017/src/com/.
Rendu : Le rendu du TP est constitué de l'unique fichier tpConnectedComponents.cpp. Ce fichier doit pouvoir être compilé dans l'environnement de développement fourni avec le reste de la base de code fournie. Une erreur de compilation entrainera la note de 0 quelque soit le contenu du fichier.
Fonctions vues en cours à coder :
Thême | Fonctions à compléter | Commande associée | Images de test recommandées | Remarque |
---|---|---|---|---|
Composantes connexes | ccLabel | ccLabel | binary.png | |
ccAreaFilter | ccAreaFilter | binary.png |
Fonction exploratoire à coder : La fonction de labelisation vue en cours réalise une exploration en profondeur (ou en largeur) des composantes connexes de l'image. Cette approche a une complexité linéaire, ce qui est optimal d'un point de vue théorique. En pratique cet algorithme a néanmoins le désavantage de réaliser des accès aléatoire en mémoire qui pénalise ses performances (la mémoire cache est sous utilisée et les défauts de page sont fréquents). Il existe un autre algorithme de labélisation en composantes connexes qui traite l'image en 2 passes (les pixels sont parcourus deux fois ligne par ligne) qui a donc l'avantage de parcourir la mémoire dans l'ordre. Il maximise l'utilisation des caches mémoires et minise les défauts de page, ce qui lui permet d'être plus performant pratique. Implémentez l'algorithme de labelisation en 2 passes dans le fichier tp1ConnectedComponents.cpp
Organisation : Dans ce TP, vous compléterez les fonctions du fichier tpGeometry.cpp situé dans l'archive à décompresser sur le bureau. Les fonctions de ce fichier sont accompagnées de programme en ligne de commandes dont les sources se trouvent dans le dossier ~/Desktop/IN5I21 2017/src/com/.
Rendu : Le rendu du TP est constitué de l'unique fichier tpGeometry.cpp. Ce fichier doit pouvoir être compilé dans l'environnement de développement fourni avec le reste de la base de code fournie. Une erreur de compilation entrainera la note de 0 quelque soit le contenu du fichier.
Fonctions à coder :
Thême | Fonctions à compléter | Commande associée | Images de test recommandées | Remarque |
---|---|---|---|---|
Transformations géométriques | transpose | transpose | cat.jpg | Testez sur une image rectangulaire. |
interpolate_nearest, interpolate_bilinear, expand | expand | * | Vous pouvez appliquer la commande plusieurs fois pour accentuer l'effet. | |
rotate | rotate | * |
Organisation : Dans ce TP, vous compléterez les fonctions du fichier tpConvolution.cpp situé dans l'archive à décompresser sur le bureau. Les fonctions de ce fichier sont accompagnées de programme en ligne de commandes dont les sources se trouvent dans le dossier ~/Desktop/IN5I21 2017/src/com/.
Rendu : Le rendu du TP est constitué de l'unique fichier tpConvolution.cpp. Ce fichier doit pouvoir être compilé dans l'environnement de développement fourni avec le reste de la base de code fournie. Une erreur de compilation entrainera la note de 0 quelque soit le contenu du fichier.
Fonctions à coder :
Thême | Fonctions à compléter | Commande associée | Images de test recommandées | Remarque |
---|---|---|---|---|
Convolution | meanFilter | meanFilter | * | |
convolution | convolution | * | Vous pouvez appliquer la commande plusieurs fois pour accentuer l'effet. | |
edgeSobel | edgeSobel | * |
Fonction exploratoire à coder : L'opération de convolution est efficace pour débruiter une image et lisser les zones texturées. Malheureusement, elle a également une forte tendance à flouter les contours. Il existe une variation de l'opération de convolution appelée filtre bilatéral qui résoud ce problème en introduisant une seconde pondération afin de ne pas donner trop de poids à un pixel dont la valeur est très éloignées de la valeur du pixel courant. Implémentez l'algorithme bilateral filter dans le fichier tpConvolution.cpp
Organisation : Dans ce TP, vous compléterez les fonctions du fichier tpMorphology.cpp situé dans l'archive à décompresser sur le bureau. Les fonctions de ce fichier sont accompagnées de programme en ligne de commandes dont les sources se trouvent dans le dossier ~/Desktop/IN5I21 2017/src/com/.
Rendu : Le rendu du TP est constitué de l'unique fichier tpMorphology.cpp. Ce fichier doit pouvoir être compilé dans l'environnement de développement fourni avec le reste de la base de code fournie. Une erreur de compilation entrainera la note de 0 quelque soit le contenu du fichier.
Fonctions à coder :
Thême | Fonctions à compléter | Commande associée | Images de test recommandées | Remarque |
---|---|---|---|---|
Morphology | median | median | * | |
erode | erode | binary.png | ||
dilate | dilate | binary.png | ||
open | open | binary.png | ||
close | close | binary.png |
Exercices d'application : Il existe de multiples façons de combiner les opérateurs morphologiques pour construire de nouvelles opérations. L'opérateur de transformée en tout-ou-rien (hit-or-miss transform) permet notamment de chercher des formes particulières dans une image en définissant deux éléments structurants:
Par exemple, pour chercher un carré de 3 pixels de côté dans l'image g ci-dessous, on pourra utiliser les élements structurants objet F et fond B.
Formellement, la transformée en tout-ou-rien d'une image $I$ par les éléments structurants $O$ et $B$ est défini par:
$$HMT(I,O,B)=(I\ominus O)\cap (I^{c}\ominus B)$$où $\ominus$ désigne l'opération d'érosion et $I^{c}$ est le complémentaire de $I$
Le but de l'exercice est d'implémenter la transformée en tout-ou-rien et de l'utiliser afin de détecter les rectangles dans les 6 images cas1.png, cas2.png...cas6.png. Pour cela, vous compléterez les fonctions:
Organisation : Dans cette dernière partie du cours vous allez devoir lire et expérimenter sur un article de recherche associé à un code source. Le but est de découvrir une nouvelle méthode de traitement d'iamge présentée sous al forme d'un article de recherche, de s'approprier le code source publié par les auteurs et de reproduire une aprtie des expériences présentées dans l'article.
Vous travaillerez en monome ou par groupe de 2. Au plus tard le dimanche 29/10, vous devrez rendre, sur votre dépôt SVN:
Plagiat : La récupération de tout ou portion du travail d'une tierce personne, qu'il s'agisse d'un étudiant, d'un site internet, d'une vidéo ou tout autre support, n'est permise qu'avec la permission de l'auteur, ce dernier devant être cité dans le code et dans le rapport. Un travail utilisé sans référence à son auteur constitue un plagiat. Le plagiat est interdit par le règlement intérieur de l'école (Article 3). En cas de plagiat, le conseil de discipline peut prononcer des sanctions allant jusqu'à l'exclusion définitive de l'étudiant.
Articles proposés (vous pouvez proposer d'autres articles, sous réserve de validation):