diff --git a/tpFourier/fourier2019/fourier.md b/tpFourier/fourier2019/fourier.md index ccb68f9b868bdf600cc7b579084030af3a95aa6b..1f965a6e32b75ff898825150a2a55efbef3f250b 100644 --- a/tpFourier/fourier2019/fourier.md +++ b/tpFourier/fourier2019/fourier.md @@ -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