Cours de programmation séquentielle

Transformations géométriques et filtres (suite)

Les matrices

Buts

Énoncé

Il s’agit ici de compléter la librairie de traitement d’images que vous avez commencé depuis quelques semaines. Dans un premier temps implémenter des transformations géométriques (translations, zoom), puis implémenter les filtres pour le traitement d’images.

Cahier des charges

Transformations géométriques

Les fonctions pour les transformations géométriques sont à mettre dans des fichiers geom.h et geom.c respectivement pour les entêtes et leur implémentation. Il faudra donc:

Transformations de matrices

Les fonctions pour les transformations de matrices sont à mettre dans les fichiers matrix.h et matrix.c. Il faudra donc:

Filtres

Les fonctions de filtrage de matrices sont à implémenter dans les fichiers filter.h et filter.c. Il faudra donc implémenter les fonctions de filtrage suivantes (comme d’habitude les fonctions “en place” retourne 1 si tout s’est bien passé, 0 sinon).

matrix filter_sharpen(matrix mat);
int filter_sharpen_in_place(matrix *mat);
matrix filter_blur(matrix mat);
int filter_blur_in_place(matrix *mat);
matrix filter_edge_enhance(matrix mat);
int filter_edge_enhance_in_place(matrix *mat);
matrix filter_edge_detect(matrix mat);
int filter_edge_detect_in_place(matrix *mat);
matrix filter_emboss(matrix mat);
int filter_emboss_in_place(matrix *mat);

Les matrices de convolution de tous ces filtres se trouvent à l’adresse https://docs.gimp.org/2.8/en/plug-in-convmatrix.html. Nous les reproduisons ici:

\[\begin{align} \underline{\underline{K}}_\mathrm{sharpen} &= \begin{pmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \\ \end{pmatrix},\\ \underline{\underline{K}}_\mathrm{blur} &= \frac{1}{9}\begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \\ \end{pmatrix},\\ \underline{\underline{K}}_\mathrm{edge\ enhance} &= \begin{pmatrix} 0 & 0 & 0 \\ -1 & 1 & 0 \\ 0 & 0 & 0 \\ \end{pmatrix},\\ \underline{\underline{K}}_\mathrm{emboss} &= \begin{pmatrix} -2 & -1 & 0 \\ -1 & 1 & 1 \\ 0 & 1 & 2 \\ \end{pmatrix}. \end{align}\]

Le filtrage s’effectue en trois étapes:

  1. Normalisation de la matrice.
  2. Convolution avec le noyau de convolution approprié.
  3. Application du clipper.

Indications

Bonus

Implémenter une fonction crop qui permet de ne garder qu’une partie rectangulaire d’une image d’origine.