Aller au contenu

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.