Dans ce travail pratique, il s’agit, à partir d’une image donnée, d’effectuer:
Être capable de lire et d’écrire une image en niveaux de gris au format .pgm
.
Lorsque ces trois étapes sont terminées, effectuer une rotation de l’image d’un angle demandé à l’utilisateur à la ligne de commande.
Un fichier dans lequel se trouve stockée une image en niveaux de gris en format .pgm
est fournie par l’utilisateur et son nom est entré à la ligne de commande. Cette image edvra être stockée dans une matrice (un tableau de taille dynamique bi-dimensionnel).
Il faudra ensuite créer les fonctions permettant d’effectuer:
Finalement, le résultat devra être sauvegardé sous le format .pgm
en niveaux de gris sous un nom entré par l’utilisateur.
Une étape du photomaton consiste à reproduire l’image donnée 4 fois en 4 fois plus petite. Cette opération sera effectuée plusieurs fois. A chaque étape il n’y a pas de perte d’information: chaque pixel se retrouve simplement déplacé (voir fig. 1).
Pour une image de dimension \(8\times 8\), la transformation peut s’observer sur la fig. 2
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.
Soit un angle \(\alpha\) et un point \(P=(x, y)\). Le point \(P'=(x',y')\), après rotation de \(\alpha\) autour de l’origine, est obtenu à l’aide la formule \[ \begin{pmatrix}x' \\ y' \end{pmatrix}=\begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix}\cdot\begin{pmatrix}x \\ y \end{pmatrix}=\begin{pmatrix}x\cos\alpha-y\sin\alpha \\ x\sin\alpha+y\cos\alpha \end{pmatrix}. \].
Après application de la rotation, vous observerez probablement que l’image est criblée de petits trous (les pixels après rotation ne tombent pas exactement sur des positions entières). Trouvez un moyen d’y remédier.
Sur le site du cours, vous trouverez le fichier lena.pgm
qui contient une image à traiter. Cette image est carrée et de dimension \(256\times 256\). Elle contient des pixels stockés sous forme d’entiers, sur 256 niveaux de gris (de 0 à 255).
Vous pouvez visualiser l’image à l’aide de la commande display lena.pgm
.
Le format pgm
est un format texte qui est formatté de la façon suivante:
P2
sur la première ligne du fichier inquant que l’image est en niveaux de gris.#
.Pour vous aider, vous trouverez également un code sur cyberlearn
, dans le fichier negatif.rs
qui:
.pgm
entré par l’utilisateur à la ligne de commande;foo.pgm
.