Géométrie Discrète - TP séance 06
- 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. Transformation de distance Euclidienne
Recopiez votre programme du TP5 en le renommant tp6-<vos-noms>.cpp
;
pensez à inscrire aussi vos noms et la date de la version à la fin de l'entête.
1.1 SEDT de Saito et Toriwaki
Écrivez la fonction
calculer_sedt_saito_toriwaki (cv::Mat &img_int)
qui effectue la transformation de distance euclidienne au carré de Saito et
Toriwaki sur l'image img_int
. On considère que l'extérieur de l'image est à 0
.
Associer la touche 5
au déclenchement de calculer_sedt_saito_toriwaki
suivi
de translate_to_vga_colors
.
2.2 Courbes de niveaux
Écrivez la fonction
void calculer_sedt_courbes_niveau (cv::Mat &img_int)
qui reçoit une image SEDT dans img_int
, puis calcule les courbes de niveau de
l'image SEDT, c'est-à-dire qui pour chaque
pixel remplace la valeur non nulle par sa racine carrée tronquée.
Associer la touche 6
au déclenchement successif de
calculer_sedt_saito_toriwaki
puis calculer_sedt_courbes_niveau
et enfin translate_to_vga_colors
.
Comparez les courbes de niveaux obtenues avec celles de \(d_4\) et \(d_8\). Vérifiez
aussi en inversant l'image (touche i
) que les courbes de niveaux aux bords
de l'image lui sont parallèles.
2.3 Maximums locaux
Le calcul exact des maximums locaux est difficile à implémenter sur une SEDT, mais on peut obtenir une bonne approximation en détectant les maximums locaux dans le 8-voisinage sur les courbes de niveaux.
Associer la touche 7
au déclenchement successif de
calculer_sedt_saito_toriwaki
,
calculer_sedt_courbes_niveau
,
detecter_maximums_locaux
pour le demi-masque M_D8
,
et enfin translate_to_vga_colors
.
3. Finition
Mettez à jour print_keyboard_keys
par exemple ainsi :
// Indiquez ici les touches du clavier et vos transformations
std::cout <<
" d change la distance\n"
" 1 affiche DT\n"
" 2 affiche les maximums locaux\n"
" 3 affiche RDT\n"
" 4 filtre sur les maximums locaux\n"
" fF change le filtre des maximums locaux\n"
" 5 SEDT Saito et Toriwaki\n"
" 6 SEDT courbes de niveau\n"
" 7 maximums locaux sur courbes de niveaux de SEDT\n"
<< std::endl;
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.