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.