Skip to content
Snippets Groups Projects
Commit 65e6cba1 authored by Michaël El Kharroubi's avatar Michaël El Kharroubi :satellite: Committed by orestis.malaspin
Browse files

Ajout partie convolution tp intégrales

parent c31bcc52
No related branches found
No related tags found
No related merge requests found
---
# author:
# - Orestis Malaspinas
# - Michaël El Kharroubi (update)
title: Travail pratique sur les intégrales
autoSectionLabels: true
autoEqnLabels: false
......@@ -91,7 +92,9 @@ Que constatez-vous? Pouvez-vous mesurer le taux de décroissance de l'erreur?
Nous voulons à présent essayer de voir comment utiliser la convolution pour filtrer un signal simple.
## La convolution continue
## Convolution en 1 dimension
### La convolution continue
Le signal que nous souhaitons filtrer est définit par la fonction $s(x)$
\begin{equation}
......@@ -112,7 +115,7 @@ A partir du résultat de la convolution, déterminer la relation entre $\psi$ et
pour enlever complètement la composante $\omega_1$ (respectivement $\omega_2$) du signal $s(x)$.
Utiliser ces relations pour illustrer le filtrage de $s(x)$ pour différentes valeurs de $\omega_1$ et $\omega_2$.
## La convolution discrète
### La convolution discrète
Utiliser une des méthodes implémentées dans le chapitre précédent pour calculer numériquement
le filtrage de $s(x)$ par la fonction $f(x)$ pour différentes valeurs de $\omega_1$, $\omega_2$ et $\psi$ (essayer par exemple de reproduire
......@@ -123,8 +126,134 @@ h(x)=\frac{1}{\sqrt{2\pi\psi}}\exp(-x^2/(2\psi)).
\end{equation}
Voyez-vous des différences?
## Convolution en 2 dimensions
### 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 :
\begin{equation}
\label{eqn:mat_exemple}
\mat{A}=\begin{pmatrix}
a_{-1,-1} & a_{-1,0} & a_{-1,1}\\
a_{0,-1} & a_{0,0} & a_{0,1}\\
a_{1,-1} & a_{1,0} & a_{1,1}
\end{pmatrix} ,\quad \mat{B}=\begin{pmatrix}
b_{-2,-2} & b_{-2,-1} & b_{-2,0} & b_{-2,1} & b_{-2,2}\\
b_{-1,-2} & b_{-1,-1} & b_{-1,0} & b_{-1,1} & b_{-1,2}\\
b_{0,-2} & b_{0,-1} & b_{0,0} & b_{0,1} & b_{0,2}\\
b_{1,-2} & b_{1,-1} & b_{1,0} & b_{1,1} & b_{1,2}\\
b_{2,-2} & b_{2,-1} & b_{2,0} & b_{2,1} & b_{2,2}
\end{pmatrix}
\end{equation}
Une image matricielle peut être interpétée comme un signal discret en deux dimmensions.
Pour rappel, la formule du produit de convolution en 1 dimension d'un signal discret est :
\begin{equation}
(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 :
\begin{equation}
(\mat{A}\ast \mat{B})[i,j] =\sum_{m=-M}^{+M}\sum_{n=-N}^{+N} \mat{A}[m, n]\cdot \mat{B}[i-m,j-n]
\end{equation}
Si on reprend par exemple les matrices $\mat{A}$ et $\mat{B}$ de l'équation \ref{eqn:mat_exemple}, et qu'on choisit le centre (1,1), on obtient :
\begin{equation}
\begin{aligned}
(\mat{A}\ast \mat{B})[1,1] =\sum_{m=-1}^{+1}\sum_{n=-1}^{+1} \mat{A}[m, n]\cdot \mat{B}[1-m,1-n]\\
(\mat{A}\ast \mat{B})[1,1] = a_{-1,-1}\cdot b_{2,2}+\dots +a_{1,1}\cdot b_{0,0}\\
\end{aligned}
\end{equation}
Si l'on essaye de calculer $(\mat{A}\ast \mat{B})[2,2]$, on découvre qu'il nous faut des valeurs qui ne sont pas dans notre matrice, comme par exemple, $b_{3,3}$. Voici 3 solutions différentes pour définir nos valeurs manquantes :
- Les valeurs en dehors de la matrice sont nulles, $b_{3,3} = 0$.
- Recopier la valeur du voisin le plus proche, $b_{3,3} = b_{2,2}$.
- Définir que notre signal est périodique, on a donc $b_{3,3} = b_{-2,-2}$.
### 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).
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)).
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).
Lorsque vous appliquerez les différents filtres, si vous tombez sur des valeurs inférieures à 0 ou supérieur à votre valeur maximale (par ex: $2^{16}-1$); vous mettrez la valeur cohérente la plus proche, 0 si $<$ 0 et $max$ si $>$ $max$.
#### Partie 1
Calculez à la main le produit de convolution de ces deux matrices, en utilisant la méthode de votre choix pour la gestion des bords :
\begin{equation*}
\mat{A}=\begin{pmatrix}
0 & 1 & 0\\
-1 & 0 & -1\\
0 & 1 & 0
\end{pmatrix} ,\quad \mat{B}=\begin{pmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
7 & 8 & 9
\end{pmatrix}
\end{equation*}
#### 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).
\begin{equation*}
\mat{F_0} = \begin{pmatrix}
0 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 0
\end{pmatrix}
\mat{F_1} = \frac{1}{25}\begin{pmatrix}
1 & 1 & 1 & 1 & 1\\
1 & 1 & 1 & 1 & 1\\
1 & 1 & 1 & 1 & 1\\
1 & 1 & 1 & 1 & 1\\
1 & 1 & 1 & 1 & 1
\end{pmatrix}
\mat{F_2} = \frac{1}{256}\begin{pmatrix}
1 & 4 & 6 & 4 & 1\\
4 & 16 & 24 & 16 & 4\\
6 & 24 & 36 & 24 & 6\\
4 & 16 & 24 & 16 & 4\\
1 & 4 & 6 & 4 & 1
\end{pmatrix}
\end{equation*}
\begin{equation*}
\mat{F_3} = \begin{pmatrix}
0 & -1 & 0\\
-1 & 5 & -1\\
0 & -1 & 0
\end{pmatrix}
\mat{F_4} = \begin{pmatrix}
0 & -1 & 0\\
-1 & 4 & -1\\
0 & -1 & 0
\end{pmatrix}
\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.
\begin{equation*}
\mat{F} = \frac{1}{9}\begin{pmatrix}
1 & 1 & 1\\
1 & 1 & 1\\
1 & 1 & 1
\end{pmatrix}
\end{equation*}
Pour débruiter l'image vous devez lui appliquer le filtre $\mat{F}$. Afin d'éviter les problèmes liés à la gestion des bords, vous n'afficherez que la partie interne de l'image filtrée. Autrement dit, vous supprimerez les 2 premières ainsi que les 2 dernières lignes et colonnes (si votre image fait 100x100, vous garderez le centre de taille 96x96).
[^1]: Vous retrouverez les formules dans le polycopié.
[^2]: Exceptionnellement un stylo est également toléré.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment