Afin de se familiariser un peu avec ces deux fonctions, ne pas hésiter à les dessiner
Afin de se familiariser un peu avec ces deux fonctions, dessiner les
pour différentes valeur de $\omega_1$, $\omega_2$, et $\psi$.
Puis, calculer analytiquement (à la main avec du papier et un crayon[^2]) la convolution $(f\ast s)(x)$.
A partir du résultat de la convolution, déterminer la relation entre $\psi$ et $\omega_1$ (respectivement $\omega_2$)
pour enlever complètement la composante $\omega_1$ (respectivement $\omega_2$) du signal $s(x)$.
Puis, calculer analytiquement (à la main avec du papier et un crayon[^2]) la convolution $(f\ast s)(x)$ (rappelez vous qu'on
a fait des choses similaires en cours).
Ensuite, on souhaite filtrer $s$ à l'aide de $f$. Pour cela, on veut "enlever" totalement
la partie $\omega_1$ (ou $\omega_2$) de $f\ast s$. En choisissant astucieusement $\psi$
on se rend compte que cela est plus simple qu'il n'y paraît!
Utiliser ces relations pour illustrer le filtrage de $s(x)$ pour différentes valeurs de $\omega_1$ et $\omega_2$.
### La convolution discrète
...
...
@@ -130,7 +143,7 @@ Voyez-vous des différences?
### Théorie
Dans le cadre de ce tp, nous allons nous concentrer sur la convolution discrète d'un signal discret en deux dimensions. Pour représenter notre signal discret en deux dimmensions, nous pouvons utiliser des matrices. Par exemple :
Dans le cadre de ce tp, nous allons nous concentrer sur la convolution discrète d'un signal discret en deux dimensions. Pour représenter notre signal discret en deux dimensions, nous pouvons utiliser des matrices. Par exemple :
Une image matricielle peut être interpétée comme un signal discret en deux dimmensions.
Une image matricielle peut être interprétée comme un signal discret en deux dimensions.
Pour rappel, la formule du produit de convolution en 1 dimension d'un signal discret est :
...
...
@@ -155,7 +168,7 @@ Pour rappel, la formule du produit de convolution en 1 dimension d'un signal dis
(s\ast u)[t] =\sum_{n=-N}^{+N} s[n]\cdot u[t-n]
\end{equation}
Lorsque l'on rajoute une nouvelle dimmension la formule devient, avec $-M$ l'indice de ligne le plus petit de la matrice $\mat{A}$, et $+M$ le plus grand, ainsi que $-N$, $+N$ pour les indices de colonne :
Lorsque l'on rajoute une nouvelle dimension la formule devient, avec $-M$ l'indice de ligne le plus petit de la matrice $\mat{A}$, et $+M$ le plus grand, ainsi que $-N$, $+N$ pour les indices de colonne :
@@ -178,9 +191,15 @@ Si l'on essaye de calculer $(\mat{A}\ast \mat{B})[2,2]$, on découvre qu'il nous
### Exercice
Vous allez devoir implémenter une solution de traitement d'images en nuances de gris basé sur la convolution de signal en deux dimmensions. Le language imposé est le C. Vous devrez rendre le code ainsi qu'un rapport succint (moins de 8 pages par groupe).
Au risque de se répéter, rappelons quelques contraintes administratives.
Pour commencer, vous devrez implémenter un outil permettant de lire des images au format PGM. Vous utiliserez le format binaire pour stocker la valeur de vos pixels. Votre programme devra respecter les spécifications du format PGM ([http://netpbm.sourceforge.net/doc/pgm.html](http://netpbm.sourceforge.net/doc/pgm.html)).
Vous allez devoir implémenter une solution de traitement d'images en nuances de gris basé sur la convolution de signal en deux dimensions
par groupe de deux. Le language imposé est le C. Vous devrez rendre le code sur `gitedu` ainsi qu'un rapport succinct sur `Cyberlearn` (moins de 10 pages par groupe).
Pour commencer, vous devrez implémenter un outil permettant de lire des images au format PGM
(n'hésitez pas à réutiliser celui que vous avez déjà implémenté en programmation séquentielle).
Vous utiliserez le format binaire pour stocker la valeur de vos pixels.
Votre programme devra respecter les spécifications du format PGM ([http://netpbm.sourceforge.net/doc/pgm.html](http://netpbm.sourceforge.net/doc/pgm.html)).
Pour visualiser votre image, vous pouvez à choix l'afficher avec la librairie SDL (bonus sur la note finale) ou alors la sauvegarder au format PGM, et utiliser un outil compatible (par ex: ImageMagick).
...
...
@@ -204,7 +223,7 @@ Calculez à la main le produit de convolution de ces deux matrices, en utilisant
#### Partie 2
Appliquez les 5 filtres ci-dessous en faisant le produit $\mat{F_n}\ast \mat{\mathcal{I}}$, où $\mat{\mathcal{I}}$ est l'image "part2.pgm" jointe à l'énnoncé. Expliquez avec vos mots l'effet de ces filtres, est essayant d'être le plus descriptif possible (évitez les phrases de 3 mots).
Appliquez les 5 filtres ci-dessous en faisant le produit $\mat{F_n}\ast \mat{\mathcal{I}}$, où $\mat{\mathcal{I}}$ est l'image "part2.pgm" jointe à l'énoncé. Expliquez avec vos mots l'effet de ces filtres, est essayant d'être le plus descriptif possible (évitez les phrases de 3 mots).
\begin{equation*}
\mat{F_0} = \begin{pmatrix}
...
...
@@ -241,9 +260,10 @@ Appliquez les 5 filtres ci-dessous en faisant le produit $\mat{F_n}\ast \mat{\ma
\end{equation*}
\newpage
#### Partie 3
Récupérez sur cyberlearn l'image nommée "part3_\<n\>.pgm", où n est votre numéro de groupe. Cette image a été fortement bruitée, heureusement (quelle chance vraiment :)), le bruit est périodique, et peut être supprimé à l'aide d'un filtre moyenneur.
Récupérez sur cyberlearn l'image nommée `part3_<n>.pgm`, où `n` est votre numéro de groupe. Cette image a été fortement bruitée, heureusement (quelle chance vraiment :)), le bruit est périodique, et peut être supprimé à l'aide d'un filtre moyenneur.