Aller au contenu

Géométrie Discrète - TP séance 03

Rendu du TP :
À la fin de la séance, même si vous ne l'avez pas fini, téléversez votre fichier C++ sur la page Ametice du cours dans la section "Rendu des TPs" en suivant bien les instructions.
Dans le cas où le TP n'est achevé, il vous est demandé de le terminer chez vous, puis de re-téléverser le fichier lorsqu'il sera dans sa version finale.

1. Approximation polygonale d'un contour

Recopiez votre programme du TP2 en le renommant tp3-<vos-noms>.cpp ; pensez à inscrire aussi vos noms et la date de la version à la fin de l'entête.

a) Déclarez un type ContourF8 mémorisant les coordonnées d'un point de départ ainsi que la chaîne de Freeman d'un contour 8-connexe (et sa taille si besoin).

Modifiez la fonction effectuer_suivi_contours_c8 de manière à ce qu'elle mémorise chaque contour détecté dans un ContourF8 puis en fournit la liste.

b) Déclarez un type ContourPol mémorisant les coordonnées des points d'un contour avec pour chaque point un flag "sommet" indiquant si le point est un sommet de l'approximation polygonale ; rajouter le point final, qui est égal au point initial.

Écrivez une fonction approximer_contour_c8 qui prend en entrée un ContourF8 et un seuil réel, puis effectue l'algorithme d'approximation polygonale récursive vu en cours, et fournit le résultat dans un ContourPol.

c) Écrivez une fonction colorier_morceaux qui prend en entrée le résultat ContourPol de la fonction précédente, ainsi qu'une image de int, puis colorie (c'est-à-dire labellise ou étiquette) dans l'image les pixels du contour avec des 1 jusqu'au 1er sommet inclus, puis avec des 2 jusqu'au deuxième sommet inclus, etc (en sautant la valeur 255).

d) Écrivez une fonction approximer_et_colorier_contours_c8 qui prend en entrée la liste des ContoursF8 produite par effectuer_suivi_contours_c8, un seuil réel, ainsi qu'une image de int, puis pour chaque ContourF8, approxime le contour avec approximer_contour_c8 puis colorie les morceaux de contour dans l'image avec colorier_morceau.

e) Associer la touche 5 au déclenchement de effectuer_suivi_contours_c8 suivi de approximer_et_colorier_contours_c8, par exemple avec un seuil de 2.0, et enfin translate_to_vga_colors.

f) En vous inspirant de l'exemple demo2.cpp de Astico2D, rajouter un troisième slider "Polyg" pour le seuil d'approximation, avec une valeur maximale de 1000. La valeur courante (entière) du slider sera mémorisée dans une variable membre de la classe MyApp ; elle sera passée à approximer_et_colorier_contours_c8 en la divisant par 100.0, de manière à ce que le seuil d'approximation soit entre 0.0 et 10.00. Les touches p et P permettront de diminuer ou augmenter le slider.

Taille des lignes de code

Pensez à limiter la taille de vos lignes de code à (environ) 80 caractères, en alignant lorsque nécessaire (par exemple des tests à rallonge) de manière à en faciliter la relecture.