Réaliser un programme qui effectue la lecture d’une image (définie en 256 niveaux de gris) stockée dans un fichier de type PGM (Portable Gray Map). Créer un arbre quaternaire permettant de la mémoriser. Prévoir ensuite les fonctionnalités suivantes:
Les images seront sauvegardées sur le disque en format PGM et
visualisées par exemple avec la commande display
(eog
fait également l’affaire).
512×512
pixels et définie en 256 niveaux
de gris. Stocker les pixels de celle-ci dans une matrice.Sur chaque noeud stocker la moyenne des pixels des 4 enfants, et de la moyenne des carrés.
Puis récursivement depuis le bas de l’arbre, si l’écart-type des 4 enfants est inférieure à une tolérance demandé à l’utilisateur, détruire les enfants.
La variance \(\mathrm{var}(X)\) ou l’écart-type \(\mathrm{std}(X)\) pour un ensemble de \(n\) pixels \(X=(X_1, ..., X_n)\) sont donnés par \[ \mathrm{var}(X)=\frac{1}{n}\sum_{i=1}^nX_i^2-\left(\frac{1}{n}\sum_{i=0}^nX_i\right)^2,\quad \mathrm{std}(X)=\sqrt{\mathrm{var}(X)}. \qquad{(3.1)}\]
Un fichier PGM ASCII (ou plain)1 est constitué d’une entête qui contient les lignes suivantes.
P2
.#
.nx
, ny
) représentant
le nombre de colonnes et de lignes de l’image stockée.max_val
.0
et
max_val
. Il y en a nx * ny
. Les séparateurs
peuvent être des espaces ou des retours à la ligne.Un exemple de fichier .pgm
serait
P2
# feep.pgm
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ce travail n’est pas évalué en tant que tel, il pourra néanmoins faire partie du test de fin d’année que cela soit en programmation séquentielle ou en algorithmique.
Les spécifications sur les fichier PGM ASCII se trouvent sur la page http://netpbm.sourceforge.net/doc/pgm.html↩︎
Les spécifications sur les fichier PGM ASCII se trouvent sur la page http://netpbm.sourceforge.net/doc/pgm.html↩︎