Skip to content
Snippets Groups Projects
Commit c5783697 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

ajout enonce

parent a26e8214
No related branches found
No related tags found
No related merge requests found
Pipeline #5154 passed
......@@ -70,12 +70,80 @@ On peut donc faire une analyse de Fourier d'une image presque aussi facilement q
# Travail à réaliser
Dans ce travail, vous avez un cahier des charges relativement peu précis.
C'est à dessein. On peut discuter oralement de chaque partie si vous voulez vous assurer de ce que vous devez faire, mais je ne veux
pas trop vous cadrer et vous laisser vous débrouiller.
## Implémenter les fonctions `tfd()` et `tdfi()`
Il s'agit d'écrire une fonction vous même pour calculer la transformée de Fourier discrète à une, puis à deux dimensions (`tfd()` et `tdf2()` respectivement). Pensez
à écrire un programme pour **valider** vos transformées de Fourier.
Pour ce faire utilisez des fonctions dont vous pouvez facilement calculer
analytiquement les transformées de Fourier (les sinus/cosinus s'y prêtent particulièrement).
Vous pouvez également comparer vos résultats avec les fonction `fft()`{.language-python} et `fft2()`{.language-python} de python.
Dans un deuxième temps implémentez les transformées de Fourier inverses
en une et deux dimensions (`itfd()` et `itdf2()` respectivement). Assurez-vous que ces fonctions marchent bien. Un
bon test est que `tfdi(tfd(signal)) == signal`{.language-python}.
En d'autres termes, la transformée de Fourier inverse de la transformée
de Fourier d'un signal, doit donner le signal lui-même.
Vous pouvez également comparer vos résultats avec les fonctions `ifft()`{.language-python}
## Filtrer les images
Sur `cyberlearn`, vous trouverez un certain nombre d'images
très bruitées. Dans chacun d'entre elles, se trouve caché
une personnalité. Il s'agit ici de trouver laquelle.
Vous devrez donc utiliser vos fonction `tfd2()`{.language-python} et `tfdi2()`{.language-python} pour filtrer les images.
Histoire de vous familiariser avec le filtrage, créez un signal
simple contenant deux fréquences. Un exemple pourrait être
d'échantillonner
$$
f(t)=2.3\cdot \sin(2\pi t) + 0.1\cdot \sin(10\pi t),
$$
pour $t=[0,1]$. Calculez la transformée de Fourier de ce signal,
puis mettez à zéro le pic correspondant à la plus haute fréquence dans le résultat obtenu.
Faites ensuite la transformée de Fourier inverse, du signal
avec un seul des pics. Voilà, si tout s'est bien passé vous venez de
filtrer les hautes fréquences de votre signal.
Maintenant que vous êtes un professionnel du filtrage, passons à
l'étape supérieure. Chargez une image que vous trouvez sur `cyberlearn`.
Normalement, il s'agit d'images en niveaux de gris encodées sur 16 bits
avec que du bruit dessus (on voit pas grand chose...).
Calculez la transformée de Fourier discrète à deux dimensions de ce signal. Inspectez le signal (à l'aide de la fonction `plot_surface()` par exemple). Comme pour le signal uni-dimensionnel, filtrez les hautes fréquences (mettez les amplitudes à zéro) au delà d'une certaine fréquence. En deux dimensions, cela revient à
metter à zéro les $\hat{f}[k_1,k_2]$ $k_1>k_{1,\mathrm{min}}$ ou $k_2>k_{2,\mathrm{min}}$, où $k_{1,\mathrm{min}}$ et $k_{2,\mathrm{min}}$
sont les fréquences à partir desquelles vous voulez filtrer.
Puis, calculez la transformée de Fourier inverse. Si vous avez filtré
correctement votre image, un visage devrait apparaître. Savez-vous de qui il s'agit?
Répétez la procédure jusqu'à ce que vous ayez décrypté toutes les images.
# Rendu
Il faut rendre un rapport de quelques pages (quelques: plus petit que 5).
Ce rapport doit être bref et expliquer votre travail. Vous **devez** faire ce travail par groupe de 2 et aucune exception ne sera faite.
Vous devez rendre le rapport et le code que je devrais pouvoir exécuter
pour voir quels sont les visages que vous découvrez.
Déposez le rapport et le code sur le site du cours s'il vous plaît, cela simplifie mon administration (et évite les problèmes avec les étudiants qui ne mettent pas de nom sur le rapport...).
La note sera uniquement basée sur votre capacité à trouver les noms des gens sur les photos.
# Conseils
Les librairies `python` que j'ai essayée pour ce TP sont:
Les librairies `python` que j'ai essayées pour faire moi-même ce TP sont:
1. `numpy` pour les manipulations de matrices et le calcul de TFR (les fonctions `fft.ifft2()`{.language-python} et `fft.fft2()`{.language-python}).
2. `imageio` pour la manipulation d'images (en particulier `imread()`{.language-python} et `imwrite()`{.language-python}).
3. `matplotlib` pour la visualisation des images et ds spectres (en particulier `pyplot.imshow()`{.language-python} et `plot_surface()`{.language-python} respectivement).
1. `numpy` pour les manipulations de matrices et le calcul de TFR (les fonctions `fft.ifft2()`{.language-python} et `fft.fft2()`).
2. `imageio` pour la manipulation d'images (en particulier `imread()` et `imwrite()`).
3. `matplotlib` pour la visualisation des images et ds spectres (en particulier `pyplot.imshow()` et `plot_surface()` respectivement).
Vous n'êtes pas obligés de les utiliser. Vous pouvez également utiliser n'importe quel autre language pour effectuer ce TP.
[^1]: On représente $f[n]$ et $\hat{f}[k]$ comme des listes (ou vecteurs) de longueur $N$.
\ 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