diff --git a/traitement_dimages.md b/traitement_dimages.md index c851a392bf83ef260f38f423ef60f98e653314aa..f46abda1b1299c8112daed998da2bc5e933ece44 100644 --- a/traitement_dimages.md +++ b/traitement_dimages.md @@ -115,7 +115,7 @@ Afin de tester vos fonctions vous pouvez utiliser l'image du babouin (voir @fig: {#fig:baboon width=50%} -### Quelques fonctions à implémenter +### Fonctions à implémenter Il faut implémenter **au minimum** les fonctions suivantes: @@ -131,6 +131,12 @@ maximale permise. Ainsi si on représente `max` niveaux de gris, le négatif d'u {#fig:baboon_negative} +### Fonctions à implémenter + +Il faut implémenter **au minimum** la fonction suivante: + +* la fonction `pgm_error pmg_negative(pgm *neg, pgm *orig)`{.C} calculant le négatif de l'image `orig`et la stockant dans `neg` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. + ## Les symétries Une symétrie verticale ou horizontale consiste à inverser l'ordre des pixels verticalement ou horizontalement @@ -139,6 +145,15 @@ Vous pouvez voir un exemple de ces trois symétries à la @fig:baboon_sym {#fig:baboon_sym} +### Fonctions à implémenter + +Il faut implémenter **au minimum** les fonctions suivantes: + +* la fonction `pgm_error pmg_symmetry_hori(pgm *sym, pgm *orig)`{.C} calculant la symétrie horizontale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. +* la fonction `pgm_error pmg_symmetry_vert(pgm *sym, pgm *orig)`{.C} calculant la symétrie verticale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. +* la fonction `pgm_error pmg_symmetry_cent(pgm *sym, pgm *orig)`{.C} calculant la symétrie centrale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. + + ## Le photomaton Une étape du photomaton consiste à reproduire l'image donnée 4 fois en 4 fois plus petite. @@ -154,6 +169,12 @@ Pour une image de dimension $8\times 8$, la transformation peut s'observer sur l A partir de cet exemple généraliser cette transformation pour chaque groupe de 4 pixels. Pour bien comprendre la transformation, il faut examiner ce qui se passe sur la première ligne. +### Fonctions à implémenter + +Il faut implémenter **au minimum** la fonction suivante: + +* la fonction `pgm_error pmg_photomaton(pgm *photomaton, pgm *orig)`{.C} calculant l'effet photomaton de l'image `orig` et la stockant dans `photomaton` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. + ## Rogner Le rognage d'une image est une opération assez simple. Elle consiste à extraire une sous partie rectangulaire @@ -161,6 +182,12 @@ des pixels de l'image d'origine. Un exemple peut se trouver sur la @fig:baboon_c {#fig:baboon_crop width=100%} +### Fonctions à implémenter + +Il faut implémenter **au minimum** la fonction suivante: + +* la fonction `pgm_error pmg_crop(pgm *crop, pgm *orig, int32_t x0, int32_t x1, int32_t y0, int32_t y1)`{.C} calculant la sous-image de `orig` aux coordonnées `x0` à `x1` (non-inclu), et `y0` à `y1` (non-inclu). Le résultat est stocké dans `crop` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. + ## Convolution et filtres [^1] Explication dans la documentation de gimp : [https://docs.gimp.org/2.8/fr/plug-in-convmatrix.html](https://docs.gimp.org/2.8/fr/plug-in-convmatrix.html) @@ -253,9 +280,24 @@ une valeur plus petite que zéro. Dans ces cas il faudra ramener les valeurs dan Par ailleurs, il se peut que la valeur des pixels ne soit plus entière. Il faudra donc tronquer le nombre obtenu pour en fait un entier. +### Fonctions à implémenter + +Il faut implémenter **au minimum** la fonction suivante: + +* la fonction `pgm_error pmg_conv(pgm *conv, pgm *orig, matrix *kernel)`{.C} calculant la convolution entre `orig` et le noyau `kernel`. Le résultat est stocké dans `conv` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`. + ## Afficher l'image avec la librairie SDL Uniquement une fois réalisées toutes les parties qui précèdent **en entier**, afficher les images en niveau de gris à l'aide de la librairie `SDL2`. +Vous trouverez toutes les fonctions nécessaires dans l'exemple se trouvant sur [ce lien](https://malaspinas.academy/prog_seq_c_tp/tableaux_unidimensionnels/gfx_example.tar.gz). Cet exemple affiche du bruit (des valeurs de gris aléatoires +sur un grand nombre de pixels). Vous **devez** réutiliser les fonctions se trouvant dans cet exemple qui sont là pour vous faciliter la vie (et non tenter de réinventer la roue). + +Le code dont vous devez vous inspirer est dans le fichier `gfx_example.c` (qui utilise `gfx.h/c`). +Outre les fonctions de création/destruction du contexte, la fonction importante +est `render()`{.C} qui affiche un pixel à la position `x`, `y` à un niveau de gris `color`, +à l'aide de la fonction `put_pixel()`{.C}. + + [^1]: Repris du cours de math de N. Eggenberg et O. Malaspinas