Vous êtes sur la page 1sur 41

U NIVERSITÉ S AVOIE M ONT-B LANC

R APPORT DE P ROJET ET TP

Optique de Fourier

BIANCUCCI Julien
CHARVIN Antoine
Professeur Encadrant : Richard TAILLET
CLAUS Nicolas
COUTIN Paul
projet et TP : Optique de Fourier

2
Table des matières

1 introduction 1

2 Partie expérimentale 1
2.1 Strioscopie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.1 Mise en évidence de turbulences . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.2 Expérimentation de la strioscopie . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Obtention d’une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Détramage d’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Tramage d’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.5 Protocole expérimental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.6 Résultats expérimentaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.6.1 Image de la grille avec une fente horizontale . . . . . . . . . . . . . . . . . . . . 5
2.6.2 Image de la grille avec une fente verticale . . . . . . . . . . . . . . . . . . . . . . 7
2.6.3 Image de la grille avec une fente inclinée à 45° . . . . . . . . . . . . . . . . . . . 7
2.6.4 Image du Héron avec un passe-bas . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.6.5 Image du Héron avec un passe-haut . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Partie analytique 12
3.1 Calcul de la transformée de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1 Rappel sur les Transformées de Fourier . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2 Ligne a une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.3 Convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.4 Décomposition de notre fonction en produit de convolution . . . . . . . . . . 14
3.1.5 calculs des transformées de Fourier des fonctions C et P . . . . . . . . . . . . . 14
3.2 Transformée de Fourier à 2 Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1 Calcul de notre fonction "porte" C(x,y) . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.2 Calcul du peigne à deux dimensions P(x,y) . . . . . . . . . . . . . . . . . . . . . 17
3.2.3 Calcul de la TF de notre grille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.4 Interprétation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4 Partie numérique 19
4.1 La transformée de Fourier numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Import de l’image à traiter et transformée de Fourier . . . . . . . . . . . . . . . . . . . 19
4.3 Les différents filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3.1 Le filtre passe-bas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3.2 Le filtre passe-haut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.3 Le filtre coupe-bande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
TABLE DES MATIÈRES projet et TP : Optique de Fourier

4.3.4 Le filtre passe-bande diagonale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22


4.4 Passage de la transformée de fourier filtrée à l’image finale . . . . . . . . . . . . . . . 22
4.5 Affichage des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5 Conclusion 25

6 Annexe 26
6.1 Photos de notre montage pour la strioscopie . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2 Nos résultats expérimentaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.3 Formule d’Euler et sinus cardinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.4 Explication des calculs de la partie 2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.5 Autres exemples de résultats numériques . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.6 Script python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2
projet et TP : Optique de Fourier

1 introduction

L’optique de Fourier (notée TF) est un domaine de l’optique ondulatoire faisant intervenir
la notion de transformée de Fourier. Elle va nous servir à filtrer la transformée de Fourier de notre
objet en lui retirant certaines fréquences spatiales afin de modifier l’image de l’objet.
On pourra par exemple, flouter plus ou moins une image en retirant les hautes fréquences ou au
contraire mettre en relief les plus petits détails d’une image en retirant les plus basses fréquences.
Nous allons par la suite essayer de retrouver analytiquement nos résultats expérimentaux et pour
finir, nous allons créer un programme python permettant de vérifier encore une fois nos résultats
expérimentaux.

2 Partie expérimentale

En pratique il est impossible de se placer à une distance infinie de l’objet diffractant, on va


donc pour nos expériences utiliser une lentille convergente (ou un miroir concave) pour montrer
que la diffraction de Fraunhofer est valable au plan focal de la lentille. On va alors se retrouver sur
le plan de Fourier, où l’on pourra observer et agir sur la transformée de Fourier de notre objet.
Grâce à ces transformées de Fourier, on pourra s’intéresser à plusieurs phénomènes comme no-
tamment la strioscopie qui permet de mettre en évidence de petites variations sur une image. Plus
précisément, de mettre en images l’écoulement d’un fluide dans l’air.
Ensuite, on voudra appliquer des filtres sur une image pour modifier celle-ci en lui retirant des fré-
quences spatiales. On s’intéressera d’abord à une grille puis à une image d’oiseau, plus complexe.

2.1 Strioscopie

2.1.1 Mise en évidence de turbulences

Nous avons tout d’abord choisi de réaliser un montage de strioscopie afin de mettre en évi-
dence les turbulences de l’air au dessus d’une source de chaleur, comme par exemple une bougie.
Afin d’obtenir de tels résultats il nous faut filtrer notre image en gardant uniquement les hautes
fréquences, il faut donc réaliser un filtre passe-haut. Étant donné que les hautes fréquences se
trouvent éloignées du centre du plan de Fourier au contraire des basses fréquences qui se situent
plus au centre, nous allons enlever ses basses fréquences en positionnant par exemple une pas-
tille opaque, ou bien une lame ( couteau de Foucault ) au centre du plan de Fourier pour ne laisser
passer que les hautes fréquences. Aussi, on place un diaphragme devant la source lumineuse de
façon à obtenir une source ponctuelle.

1
2.1 Strioscopie projet et TP : Optique de Fourier

F IGURE 1 – Montage imagerie schlieren

2.1.2 Expérimentation de la strioscopie

Le phénomène repose sur la variation de la densité de l’air. Quand on chauffe un gaz, les
rayons lumineux qui passent à travers sont déviés, on peut dire que ces rayons correspondent à
des "turbulences". Ce sont des hautes fréquences spatiales en optique.

Nous avons donc pu mettre en oeuvre l’expérimentation de la figure 1. Pour cela nous avons en-
voyé un faisceau lumineux sur un miroir concave. Ce dernier permet de faire converger les rayons
lumineux en un point : c’est le foyer de l’image (plan de Fourier). C’est précisément là où l’on va
placer un couteau de Foucault (passe-haut), qui est une lame de rasoir. Pour placer la lame de ra-
soir dans le plan de Fourier, on cherche l’endroit où les faisceaux lumineux se rejoignent et l’on
place la lame de façon à ne laisser passer qu’une partie de la lumière.

Le passe-haut va éliminer les basses fréquences. Plus précisément, on élimine les rayons qui n’ont
pas subi de déviation (qui ne sont pas passés par l’air chaud). On ne conserve que les turbulences
dues à l’air chauffé, ainsi, on améliore grandement le contraste. On place ensuite notre appareil
photo pour observer l’image.

On peut voir en annexe notre montage en photo. (figure 42 à 44)

Après avoir mis une bougie sous le trajet de nos faisceaux lumineux, on observe sur l’appareil
photo le phénomène de strioscopie.
On peut voir sur les images suivantes la différence de contrastes des turbulences si l’on met le
couteau de Foucault ou non.

2
2.2 Obtention d’une image projet et TP : Optique de Fourier

F IGURE 2 – Sans couteau de Foucault F IGURE 3 – Avec couteau de Foucault

On peut voir sur ces images que l’air chaud, donc les perturbations, sont beaucoup plus visibles
quand on place une lame de rasoir dans le plan focal. La qualité de l’image n’est pas de très bonne
car nous pouvons aussi apercevoir la bobine de notre source de lumière. Le phénomène est plus
flagrant sur la vidéo que nous avons réalisée : <https://youtu.be/5lkNl2b0vBA>

2.2 Obtention d’une image

Il s’agit de faire un rapide rappel sur la façon d’obtenir une image avec un système optique.
Il faut utiliser la loi de conjugaison :

1 1 1
− = (1)
O A0 OA f0

Avec O A 0 la distance entre la lentille et le plan image, O A la distance entre la lentille et l’image et f’
la distance focale de la lentille convergente.

F IGURE 4 – Formule de conjugaison avec origines aux foyers

Prenons par exemple une lentille convergente avec une focale de 250 mm. On se décide de fixer
la distance O A = -50 cm (cette distance doit être prise négative). On utilise ici une lentille d’une
distance focale f’= 25cm. On a donc en utilisant la formule (1) et en l’adaptant à notre situation, la
formule suivante :

3
2.3 Détramage d’image projet et TP : Optique de Fourier

1 1
O A0 = 1 1
= 1 1
= 0.5m (2)
f0
+ 0.25
+ −0.5
OA

On trouve donc O A 0 = 50cm. C’est à dire que nous devons placer notre écran à 50 cm de la lentille
pour obtenir une image bien nette.

2.3 Détramage d’image

Nous pouvons aussi agir sur le plan de Fourier afin de détramer une image. L’expérience
qui met est évidence ce phénomène est l’expérience d’Abbe, l’objet est une grille et le filtre sur le
plan de Fourier est une fente soit verticale soit horizontale. Si l’on met la fente horizontale, nous
allons garder que les traits verticaux de la grille et inversement avec une fente verticale nous allons
garder que les traits horizontaux. De manière plus générale si l’on veut complètement détramer
une image et pas seulement détramer de manière verticale ou horizontale, nous allons utiliser un
filtre passe-bas tel un diaphragme sur le plan de Fourier.

2.4 Tramage d’image

Au contraire si l’on place un filtre passe-haut, par exemple une pastille sur le plan de fourier,
nous allons accentuer le tramage de l’image. On reprend exactement le même montage pour une
image quelconque, on remplace simplement le diaphragme (passe-bas) par un point (passe-haut).

2.5 Protocole expérimental

Nous avons le système optique suivant qui nous permet d’obtenir une image filtrée :
-Une lampe halogène suivie d’un diaphragme et d’une lentille convergente pour obtenir des fais-
ceaux lumineux parallèles (ondes planes).
-La première lentille est suivie de l’objet (une image d’oiseau dans notre cas).
-La deuxième lentille est suivie d’un filtre passe-haut ou passe-bas dans le plan de Fourier, c’est-
à-dire dans le plan focal de la deuxième lentille. Puis on a l’écran permettant l’affichage de l’image
réelle filtrée.

On a ci-dessous le schéma de notre dispositif expérimental :

F IGURE 5 – Schéma de notre dispositif expérimental

4
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

Premièrement, on veut avoir des faisceaux parallèles pour que les rayons lumineux convergent sur
le plan focal de la deuxième lentille (plan de Fourier).

Pour cela, on utilise une source lumineuse suivie d’un diaphragme permettant d’obtenir une source
ponctuelle puis on dispose une lentille convergente pour obtenir des ondes planes. Le diaphragme
doit se trouver dans le plan focal de la lentille.

On place ensuite l’objet après la lentille 1. Ensuite, on fixe la distance entre l’objet et la lentille
2, cette distance doit être supérieure à la distance focale de la lentille 2. Avec cette distance fixée,
on pourra calculer la position de l’écran pour obtenir l’image réelle.

On vérifie que l’on obtient bien l’image, puis l’on pourra ensuite placer les différents filtres dans le
plan de Fourier.

2.6 Résultats expérimentaux

En réutilisant le montage précèdent, on va commencer par prendre une grille comme image
en disposant une fente dans le plan de Fourier. On pourra interpréter et comparer le résultat à
celui obtenu analytiquement.

Ensuite, on prendra une image plus complexe (image d’un Héron), on lui appliquera un filtre
passe-haut puis un filtre passe-bas.

On reprend le montage précèdent et l’on va expliciter les distances ainsi que les lentilles utilisées :

F IGURE 6 – Schéma de notre dispositif expérimental avec les distances et les lentilles fixées

On prend donc une première lentille de focal 150 mm et une deuxième de focal 300mm. Les dis-
tances ont été calculées par la formule de conjugaison (équation 2).

2.6.1 Image de la grille avec une fente horizontale

Nous allons commencer par prendre une grille comme objet. Tout d’abord, il faut obtenir
notre image sur l’écran, puis nous mettrons dans le plan de Fourier différents filtres et nous pour-
rons interpréter nos résultats. C’est l’expérience d’Abbe.

Avant de présenter notre résultat, il faut s’intéresser à ce que l’on doit trouver théoriquement.
En effet, certaines fréquences ont été atténuées, on observe ici le phénomène de filtrage spatial.

5
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

Quand les lignes d’un réseau sont verticales elles donnent lieu à une figure de diffraction horizon-
tale et quand les lignes sont horizontales elles donnent lieu à une figure de diffraction verticale.
Donc les points horizontaux qui résultent de la diffraction correspondent aux lignes verticales. De
même, pour les points verticaux qui résultent de la diffraction, correspondent aux lignes horizon-
tales.

On peut voir sur le schéma ci-dessous qu’avec une fente horizontale, on obtient des lignes ver-
ticales.

F IGURE 7 – Aspect de l’image avec une fente placée à l’horizontale (expérience d’Abbe)

Nous avons mis en place le système optique (figure 6) sans filtre dans le plan de Fourier, nous ob-
tenons l’image de notre grille.
Ensuite, il s’agit de placer dans le plan de Fourier une fente réglable. Nous avons choisi expérimen-
talement 10 µm car c’est à cette taille que le phénomène souhaité est le plus visible. En effet, nous
avons remarqué que si l’on ouvre plus notre fente notre image n’est plus filtrée et si l’on ferme
plus notre fente, elle ne laisse plus passer assez de lumière pour observer quelque chose sur notre
écran.

F IGURE 9 – Image de la grille avec une fente


F IGURE 8 – Image de la grille sans filtre
horizontale de 10 µm

On peut voir notre image non modifiée à gauche. Sur l’image de droite, cependant, en dis-
posant dans le plan de Fourier la fente horizontalement, on peut constater qu’il ne reste que les
lignes verticales.

6
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

2.6.2 Image de la grille avec une fente verticale

De la même façon que précédemment, on s’attend à retrouver des lignes horizontales après avoir
placé une fente verticale.

F IGURE 10 – Aspect de l’image avec une fente retournée à la verticale

De la même manière, on place la fente verticalement. La taille de celle-ci est toujours de 10 µm.
On obtient l’image suivante :

F IGURE 12 – Image de la grille avec une fente


F IGURE 11 – Image de la grille sans filtre verticale de 10 µm

On peut observer, comme prévu, des lignes horizontales grâce à notre fente verticale.

2.6.3 Image de la grille avec une fente inclinée à 45°

Que se passe-t-il si l’on incline la fente de 45° ?

Théoriquement, on devrait se retrouver avec une ligne inclinée de 45° et perpendiculaire à la fente,
comme sur le schéma ci-dessous :

7
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

F IGURE 13 – Aspect théorique de l’image avec une fente inclinée de 45°

Nous avons eu plus de mal à obtenir ce qu’il fallait avec la fente inclinée, voici notre résultat :

F IGURE 14 – Image de la grille sans filtre F IGURE 15 – Image de la grille avec une fente
inclinée de 10 µm

On ne voit pas clairement des traits inclinés de 45° se profiler. Cependant, en zoomant suffisam-
ment on peut apercevoir des stries inclinées de 45° comme on le souhaitait.

2.6.4 Image du Héron avec un passe-bas

Cette fois-ci, on se propose d’étudier une image plus complexe. L’objectif va être d’appliquer
un passe-bas puis un passe-haut. Le passe-bas réalisé avec un diaphragme, devrait éliminer les
hautes fréquences et donc éliminer les détails de l’image. Le filtre passe-bas devrait aussi détra-
mer l’image.

L’image étudiée est cet oiseau (Héron), comme pour la grille, on va comparer l’image initiale avec

8
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

l’image filtrée.

F IGURE 16 – Image du Héron sans filtre F IGURE 17 – Image du Héron avec filtre
passe-bas

Nous ne connaissions pas la taille du diaphragme pour cette photo, mais nous avons pu utiliser un
autre passe-bas, des trous dont nous connaissions la taille. Nous avons utilisé un trou de 1,5mm
et 2mm. (annexe figure 45 à 48)
Pour pouvoir comparer les deux images, nous avons augmenté la luminosité de l’image filtrée pour
que les deux images soient à peu près sur le même pied d’égalité et ainsi pouvoir les comparer cor-
rectement.

On s’attend à ce que l’image soit floutée et détramée car les hautes fréquences spatiales corres-
pondant aux détails de l’image, c’est-à-dire au tramage ainsi que les contours de l’image. On doit
donc voir une amélioration des détails. Étant donné que nous retirons ces fréquences spatiales,
l’image filtrée devrait être floutée.

On peut voir que sur l’image filtrée, les contrastes sont plus prononcés. Le tramage est toujours
visible mais il semble s’effacer quelque peu.

Pour mieux observer le phénomène, on zoom en un même point sur les deux images.

9
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

F IGURE 18 – Zoom de 630% de l’image non filtrée et celle filtrée avec un passe-bas

On peut voir que sur l’image de droite (celle filtrée) que certains points apparaissent plus sombres.
Comme le prévoyait la théorie, les hautes fréquences donc le tramage, est moins visible, bien qu’il
semblerait que tous les points n’aient pas subi la même baisse de luminosité. On peut en conclure
que certains détails de l’image sont moins visibles, et donc que l’image est floutée.

2.6.5 Image du Héron avec un passe-haut

Ensuite, nous avons utilisé des points pour faire notre passe-haut. En effet, un point dans la
plan de Fourier dont la taille est du même ordre que le faisceau lumineux permet d’éliminer les
basses fréquences. On devrait observer un tramage plus prononcé. On retrouve ici le filtre passe-
haut réalisé avec un point de 2mm, la photo avec un point de 1,5mm se trouvant en annexe (figure
49 et 50).

F IGURE 20 – Image du Héron avec filtre


F IGURE 19 – Image du Héron sans filtre passe-haut, un point de 2mm

Toutefois, il n’est pas flagrant que le tramage soit amélioré. Cela pourrait être en partie parce que
la diapositive que nous avons utilisé n’était pas en très bon état. En effet la partie transparente du
filtre n’était pas parfaitement transparente et la partie opaque du point laissait légèrement passer
la lumière.

10
2.6 Résultats expérimentaux projet et TP : Optique de Fourier

De la même manière que pour le filtre passe-bas, on peut zoomer sur les deux images.

F IGURE 21 – Zoom de 630% de l’image non filtrée et celle filtrée avec un passe-haut

Il est difficile de conclure sur nos résultats expérimentaux du filtre passe-haut. En effet, celui-ci
devrait améliorer la netteté du tramage or sur les figures 19 à 21 ça ne semble pas être nos résultats
obtenus. Comme dit précédemment, il est possible que ce soit notre filtre de mauvaise qualité qui
a impacté notre image filtrée.

11
projet et TP : Optique de Fourier

3 Partie analytique

Nous allons dans cette partie calculer analytiquement la transformée de Fourier de la grille.
Nous allons ensuite appliquer un filtre pour observer ce qu’on obtient avec une fente horizontale
ou verticale.

3.1 Calcul de la transformée de Fourier

Comme nous l’avons vu précédemment, nous avons fait la transformée de Fourier de l’image
du Héron mais nous avons également laissé apparaître seulement les lignes verticales et horizon-
tales d’un grille. Comme il n’est pas possible de retrouver avec des calculs la fonction de l’image
du héron, nous allons donc nous intéresser seulement à la partie analytique de la grille.

F IGURE 22 – schémas représentant notre grille sur le plan image

3.1.1 Rappel sur les Transformées de Fourier

La transformée de Fourier est une opération permettant de donner le spectre fréquentiel


d’une fonction intégrale et non périodique. Elle nous est donnée par :

∼ 1
Z ∞
F ( f ) : k → f (k) = f (x) × e −i kx d x (3)
2π −∞

Avec f (x) qui représente la fonction intégrale et F ( f ) sa transformée de Fourier.


On peut aussi définir la transformée de Fourier inverse qui effectue l’opération inverse :
Z ∞ ∼
f (k) = f (x) × e i kx d x (4)
−∞

3.1.2 Ligne a une dimension

Pour commencer, nous allons tout d’abord nous intéresser à des lignes à une dimension.
(Soit, pour être plus précis, nous allons commencer avec une fonction créneau)

12
3.1 Calcul de la transformée de Fourier projet et TP : Optique de Fourier

F IGURE 23 – graphique de notre fonction à une dimension

On a représenté notre fonction f (x) sur la figure (23) ci-dessus. Nos "barreaux" de la grille ont une
épaisseur qu’on note a et ils sont espacés d’une distance L. Pour la définir, nous allons la décrire
par morceau, c’est-à-dire qu’on note cette fonction de la manière suivante :

a


 1 sur [ −a2 , 2 ],
L−a L+a

 1 sur [ 2 , 2 ],



f (x) = 1 sur [ 2L−a 2
, 2La
2
], (5)

 ...





 0 partout ailleurs

On a donc (avec la formule 3) notre transformée de Fourier qui est égale à :


∼ 1 ∞
Z
f (k) = f (x) × e −i kx d x (6)
2π −∞
Or comme on vient de le voir avec la formule (5), la fonction f (x) est égale à 1 que lorsque l’on est
sur l’intervalle [ −a , a ], [ L−a
2 2 2
, L+a
2
], ... Ainsi, on peut simplifier l’intégrale précédente de la forme :
a L+a 2L+a

·Z
1
Z Z
2 2 2
i
−i kx −i kx
f (k) = e dx + e dx + e −i kx d x + ... (7)
2π −a
2
L−a
2
2L−a
2

On a donc réussi à écrire le plus simplement possible notre fonction. Il faut maintenant calculer
sa valeur exacte. Pour se faire nous allons utiliser la convolution de deux fonctions.

3.1.3 Convolution

Nous allons donc représenter cette fonction f (x) comme la convolution de deux fonctions.
En effet, nous allons utiliser la propriété qui nous dit que la transformée de Fourier d’une convo-
lution est égale au produit des transformées de Fourier. Nous avons donc notre fonction f (x) qui
est égale à la convolution de deux fonctions :

f (x) = h ⊕ g (8)

Donc si nous voulons la transformée de Fourier de notre fonction f (x) nous devons faire la trans-
formée de notre convolution. C’est simplement égal au produit de nos deux fonctions transfor-
mées :

13
3.1 Calcul de la transformée de Fourier projet et TP : Optique de Fourier

∼ ∼ ∼ ∼
f (x) =h ⊕ g =h × g (9)
Cela simplifie beaucoup nos calculs parce que si nous pouvons écrire notre fonction complexe
f (x) comme étant la convolution de deux fonctions dont on peut calculer leurs transformées de
Fourier nous pouvons donc calculer la transformée de notre fonction.
Le but va donc être de trouver ces deux fonctions dont leurs convolutions donnent notre fonction
f (x) (5).

3.1.4 Décomposition de notre fonction en produit de convolution

On décompose donc notre figure en deux fonctions de la sorte :

F IGURE 24 – Notre fonction f (x), produit de convolution des deux fonctions : C et P

Comme on le voit sur cette figure, nous pouvons décrire notre fonction f (x) comme la convolu-
tion de la fonction C (x) qui correspond à un trait d’une épaisseur a et centré sur 0 (fonction porte
à une dimension) avec la fonction P qui est un peigne de Dirac.
En mathématique, un peigne de Dirac est une somme de pic de Dirac (ou fonction de Dirac) es-
pacé d’une distance constante (ici L). C’est-à-dire qu’à chaque fois que x = n × L avec n ∈ N , l’aire
est égale à 1 sinon, à n’importe quel autre endroit de la fonction elle est égale à 0.

3.1.5 calculs des transformées de Fourier des fonctions C et P

Nous devons maintenant calculer les transformées de Fourier des deux fonctions pour pou-
voir trouver notre transformée de Fourier de la fonction f (x).
Nous allons commencer à nous intéresser à la fonction C (x).
Nous avons donc une fonction définie sur [ −a 2 2
, a ] et qui vaut 1 sur cet intervalle. On cherche à
calculer sa transformée de Fourier qu’on va noter TF.
(
1 sur [ −a , a ],
2 2
C (x) = (10)
0 partout ailleurs

On utilise donc la formule (6) et on a donc notre transformée de Fourier :


1 ∞
Z
T F (C (x)) = C (x) × e −i kx d x (11)
2π −∞

14
3.1 Calcul de la transformée de Fourier projet et TP : Optique de Fourier

On peut donc décomposer cette formule en trois parties distinctes :


−a a
1
·Z
2
Z
2
Z +∞ ¸
−i kx −i kx −i kx
f (x) = T F (C (x)) = C (x) × e dx + C (x) × e dx + C (x) × e dx (12)
2π −∞ −a
2
a
2

Or comme on l’a vu dans la formule (10) nous pouvons simplifier cette équation :
Z a
1 2
T F (C (x)) = 0 + 1 × e −i kx d x + 0 (13)
2π 2 −a

Z a
1 2 1 h 1 −i kx i a2
= e −i kx d x = − e −a
2π −a 2
2π ik 2

1 h a −a
i
= − e −i k 2 + e −i k 2 (14)
2i πk

On utilise donc la formule d’Euler (cf annexe partie 6.3) et on transforme ensuite notre sinus en
sinus cardinal.
1 ³ ka ´
T F (C (x)) = sin (15)
πk 2
a ³ 2 ´ ³ ka ´
= × × sin (16)
2π ak 2
a ³ ka ´
= sin c (17)
2π 2
On à représenté notre fonction T F (C (x)) ci-dessous.

F IGURE 25 – Transformée de Fourier de notre fonction porte C (x)

Nous avons donc calculé notre transformée de Fourier de notre fonction C(x). Nous devons main-
tenant calculer la transformée de Fourier de notre peigne de Dirac.
Z ∞
F (ξ) = T F (P (x)) = P × e i kx d x (18)
−∞
Z +∞ X
= δ(x − nL) × e i k d x
−∞

e i knL
X
= (19)
n=−∞

15
3.2 Transformée de Fourier à 2 Dimensions projet et TP : Optique de Fourier

Dans notre cas, la grille n’est pas infinie on pose donc les bornes de la transformée de Fourier à
une variable N. Comme étant nulle pour toutes valeurs supérieur à N, la Transformée de Fourier
du peigne de Dirac devient :
N
e i knL
X
F (ξ) = T F (P (x)) = (20)
n=−N

Nous avons donc calculé notre transformée de Fourier de C (x) et notre transformée de Fourier
de P (x). Comme nous l’avons vu précédemment nous pouvons donc calculer la transformée de
Fourier de f (x) qui est la convolution de C (x) avec P (x). Notre T F ( f (x)) est donc égale à la multi-
plication de T F (C (x)) avec T F (P (x)).

T F ( f (x)) = T F (P (x)) × T F (C (x)) (21)


N a ³ ka ´
e i knL
X
= sin c (22)
n=−N 2π 2

Ce résultat est donc la transformée de Fourier de notre fonction "créneau" (à une dimension) f (x).

3.2 Transformée de Fourier à 2 Dimensions

Nous avons vu précédemment le calcul de la transformée de Fourier à une dimensions or


pour la grille nous devons calculer une transformée de Fourier en deux dimensions. Nous utilisons
exactement la même méthode que précédemment. C’est-à-dire que nous devons définir notre
grille comme la convolution de deux fonctions.
On définit donc notre grille comme la convolution d’un carré (fonction porte à deux dimensions)
avec un peigne de Dirac en deux dimensions. On obtient donc la figure suivante (pour alléger le
schéma, nous ne représentons que deux traits verticaux et deux traits horizontaux) :

F IGURE 26 – Notre fonction, la convolution de deux fonctions ; C(x,y) et P(x,y)

a
On a donc comme précédemment, pour notre fonction C (x, y), une valeur de 1 pour x, y ∈ [ −a
2 , 2]
et 0 partout ailleurs.

16
3.2 Transformée de Fourier à 2 Dimensions projet et TP : Optique de Fourier

3.2.1 Calcul de notre fonction "porte" C(x,y)

Nous obtenons donc, pour la TF de notre fonction C (x, y) :

a2 a a
F (k x , k y ) = T F (C (x, y)) = 2 × sin c(k x ) × sin c(k y ) (23)
4π 2 2

(Calcul détaillé en Annexe (partie 6.4))

On a représenté ci-dessous un sinus cardinal à 2 dimensions.

F IGURE 27 – Représentation graphique d’un sinus cardinal à deux dimensions

3.2.2 Calcul du peigne à deux dimensions P(x,y)

Il ne nous manque désormais plus que la transformée de Fourier du peigne de Dirac en deux
dimensions

Z ∞ Z ∞
F (k x , k y ) = T F (P (x, y)) = P x × e i k x x P y × e i k y y d xd y (24)
Z−∞ −∞
+∞ Z +∞ X
δ(x − nL) × e i k x δ(y − mL) × e i k y d xd y
X
=
−∞ −∞
∞ ∞
e i k x nL e i k y mL
X X
= (25)
n=−∞ m=−∞

3.2.3 Calcul de la TF de notre grille

Maintenant, exactement de la même méthode qu’avec la fonction à une dimension on cal-


cule simplement la multiplication de nos deux fonctions (C (x, y) avec P (x, y)) et on trouve donc la
transformée de Fourier de notre grille.

17
3.2 Transformée de Fourier à 2 Dimensions projet et TP : Optique de Fourier

∞ ∞ a2 a a
e i k x nL e i k y mL ×
X X
F (k x , k y ) = T F ( f (x, y)) = 2
× sin c(k x ) × sin c(k y ) (26)
n=−∞ m=−∞ 4π 2 2

3.2.4 Interprétation

Nous avons donc fait la transformée de Fourier de notre grille.


Il faut désormais appliquer un filtre sur cette TF. En effet si on prend uniquement la valeur 1 pour x
variant de −∞ à +∞ et 0 quel que soit la valeur de y, c’est à dire qu’on prend une fente horizontale,
on remarque qu’on retrouve analytiquement nos résultats expérimentaux. C’est-à-dire qu’on ne
retrouve uniquement des lignes verticales en appliquant un filtre de fente horizontale.
Et inversement, avec une fente verticale, on ne va retrouver que des lignes horizontales.

18
projet et TP : Optique de Fourier

4 Partie numérique

Dans le cadre de ce projet, nous avons réalisé un programme en Python, afin de calculer nu-
mériquement les transformées de Fourier de nos images, appliquer des filtres sur ces transformées
et enfin afficher notre image dont la transformée de Fourier a été modifiée.

4.1 La transformée de Fourier numérique

Afin de calculer la transformée de Fourier numérique nous devons discrétiser la transformée


de Fourier que nous pouvons calculer de manière analytique. La transformée de Fourier discrète
et la transformée inverse sont implémentées de cette manière :

NX
−1
Fn = u k × e (−i 2πnk)/N (27)
k=0

Si l’on calcule la transfomée de fourier de cette manière sans optimisation, la complexité est
2
en N . Il existe d’autre algorithme de transformée de fourier rapide (FFT) possible comme le plus
connu, celui de Cooley-Tukey, ce dernier réduit la complexité à N2 l og (N ). Pour cela nous allons
décomposer en deux sommes différentes, d’un coté une somme avec les uk pairs et de l’autre les
uk impairs, nous obtenons donc :

NX
/2−1 k
NX
/2−1 k+1/2
Fn = u 2k × e −i 2πn N /2 + u 2k+1 × e −i 2πn N /2 (28)
k=0 k=0
NX
/2−1 NX
/2−1
2k×n (2k+1)×n
= u 2k ×C N + u 2k+1 ×C N (29)
k=0 k=0
NX
/2−1 NX
/2−1
2k×n n 2k×n
= u 2k ×C N +C N u 2k+1 ×C N (30)
k=0 k=0
NX
/2−1 NX
/2−1
k×n n k×n
= u 2k ×C N /2 +C N u 2k+1 ×C N /2 (31)
k=0 k=0
pai r n i mpai r
= Fn +C N Fn (32)

On a donc d’un coté la TFD des N2 termes pairs et de l’autre la TFD des N2 termes impairs.
Or N2 = 2e q−1 donc aussi divisible par 2, on peut donc décomposer de manière récursive en deux
sommes de termes pairs et impairs de même "taille" jusqu’à avoir des TFD à un seul terme dans
chacune des deux sommes.

4.2 Import de l’image à traiter et transformée de Fourier

Pour importer notre image nous allons simplement utiliser la fonction "mpimg" de la librai-
rie matplotlib avec la commande suivante :

F IGURE 28 – Import image

19
4.3 Les différents filtres projet et TP : Optique de Fourier

Il est a noté que l’image doit être un fichier png, on peut aisément passer par un convertis-
seur en ligne si notre image est initialement un fichier jpeg par exemple, l’image doit également
être dans le même dossier que le script python que l’on éxecute.

Nous allons à présent calculer numériquement la transformée de Fourier de notre image,


pour cela nous importons la fonction FFT (Fast Fourier Transform) de la librairie numpy. Tout
d’abord on initialise un tableau de zéros de 3 dimensions, deux pour la taille de l’image et une
troisième qui indique la « profondeur » d’un pixel, à l’aide de la fonction plb.zeros de numpy. Ici
cette profondeur est égale à 3, ce qui indique qu’un pixel est codé par un triplet RGB.
Ensuite nous pouvons parcourir notre tableau afin d’appliquer la fonction FFT à chaque pixel de
notre image. Nous utilisons également la fonction fftshift qui permet de placer la fréquence nulle
au centre de notre figure. On utilise la commande "[ :, :,i]" qui permet de parcourir toutes les va-
leurs contenues dans les dimensions où sont disposés les " :", ici ce sont les deux dimensions de
l’image.
Avant de passer au filtrage de la transformée de Fourier que nous venons d’obtenir nous allons
en garder une copie grâce à la commande plb.copy, afin de comparer par la suite la transformée
filtrée et non filtrée par la suite.

F IGURE 29 – Calcul fft

4.3 Les différents filtres

Maintenant que nous avons la transformée de Fourier de notre image nous pouvons lui
appliquer des filtres pour modifier notre image initiale. Tout d’abord le filtre passe-bas, ce filtre
comme son nom l’indique va laisser passer les basses fréquences et couper celles qui sont au des-
sus d’un seuil que l’on aura préalablement défini. Pour cela on créer un tableau de booléen ini-
tialisés à False puis on calcule la distance au centre (puisque que la fréquence nulle est au centre)
puis nous la comparons à notre seuil, si la distance est supérieure on coupe la fréquence corres-
pondante (la booléen passe de False à True) sinon rien ne change. Nous allons ensuite appliquer
le filtre sur la transformée de Fourier, nous affectons la nouvelle valeur (0,0,0) partout où le filtre
vaut True.

4.3.1 Le filtre passe-bas

Pour ce filtre nous allons donc laisser passer uniquement les basses fréquences, pour cela
nous appliquons un diaphragme plus ou moins ouvert et centré sur le centre du plan de fourier,
donc sur la fréquence nulle. Plus on va fermer le diaphragme, plus notre image va devenir floue.
Afin de réaliser ce montage numériquement, nous allons calculer une distance limite par rap-
port au centre, cela représente le rayon d’ouverture du diaphragme, puis l’on va comparer chaque
point du plan de fourier avec cette ouverture. Si le point est au delà de l’ouverture déterminée on
coupe totalement la fréquence, sinon on ne change pas sa valeur. Le filtre que nous avons donc
est binaire, soit la fréquence est complètement coupée soit elle reste inchangée.

20
4.3 Les différents filtres projet et TP : Optique de Fourier

F IGURE 30 – Filtre passe-bas

4.3.2 Le filtre passe-haut

Pour ce filtre le fonctionnement est sensiblement le même que pour le filtre passe-bas, à
un détail près. Cette fois-ci on va garder les fréquences qui sont au delà de l’ouverture calculer
et couper les fréquences à l’intérieur. Physiquement ce filtre se représente par une petite pastille
opaque sur le centre du plan de Fourier.
Si l’on veut couper uniquement la fréquence nulle au centre du plan de Fourier on peut reformuler
la fonction de cette manière :

F IGURE 31 – Filtre passe-haut

4.3.3 Le filtre coupe-bande

Ici, nous allons également construire un filtre du même type que le filtre passe-haut vu dans
la partie précédente mais cette fois-ci nous allons couper une ou plusieurs bandes de fréquence
au lieu d’un cercle centré sur la fréquence nulle au plan de Fourier, comme précédemment. Phy-
siquement cela représente par exemple un couteau de foucault ou une grille. On créer autant de
boucle if que l’on veut couper des bandes.

F IGURE 32 – Filtre coupe bande

21
4.4 Passage de la transformée de fourier filtrée à l’image finale projet et TP : Optique de Fourier

4.3.4 Le filtre passe-bande diagonale

Pour ce filtre nous allons définir une condition, si la condition est vérifiée on ne change rien
et sinon on coupe la fréquence, à la manière de filtres vu précédemment. La différence cette fois-ci
est que la condition représente une bande en diagonale sur le plan de Fourier :

F IGURE 33 – Filtre coupe bande

4.4 Passage de la transformée de fourier filtrée à l’image finale

Nous voulons à présent obtenir notre image après le filtrage sur le plan de Fourier. Pour cela
nous allons utilisé la fonction fast fourier transform inverse. De la même manière que dans la
première partie nous allons parcourir chaque pixel du plan de Fourier et lui appliquer la fonction
inverse fast fourier transform.

F IGURE 34 – Fft inverse

4.5 Affichage des résultats

Afin de tester le programme, nous allons prendre la même image que celle utilisée lors de la
partie expérimentale, l’image du héron, nous pourrons ainsi comparer nos résultats.
Dans le but d’avoir un programme plus facile à utiliser nous avons décider de créer une interface
interactive tkinter avec des curseurs pour modifier la taille du diaphragme ainsi que du cache et
d’actualiser le résultats grâce à un bouton. A chaque nouveau lancement on efface le lancement
précédent afin d’avoir qu’une seule fenêtre graphique à chaque fois puis on relance le programme
avec les nouvelles valeurs rentrées via les curseurs. Pour cela on actualise les nouvelles valeurs
pour le diaphragme et le cache grâce au curseur, python cela donne :

F IGURE 35 – Scale tkinter

22
4.5 Affichage des résultats projet et TP : Optique de Fourier

Et on crée un bouton "Lancer" qui appelle notre fonction de calcul et d’affichage avec les nouvelles
valeurs de diaphragme et de cache :

F IGURE 36 – Bouton lancement

L’interface que nous obtenons est donc sous cette forme :

F IGURE 37 – Interface tkinter

Pour afficher les résultats nous créons deux figures, sur l’une nous afficherons les transfor-
mées de Fourier filtrées et non filtrées tandis que sur l’autre afficherons l’image avant et après
filtrage. L’affichage des transformées de fourier filtrées et non-filtrées nous sert à vérifier que le
filtrage précédemment effectué est bel et bien celui que nous souhaitions initialement. Pour le cas
du filtre passe-bas nous obtenons :

F IGURE 38 – Vérification du filtrage passe-bas

23
4.5 Affichage des résultats projet et TP : Optique de Fourier

Et pour le filtre passe-haut :

F IGURE 39 – Vérification du filtrage passe-haut

Voyons à présent les résultats des ces filtres sur notre image initiale, l’image du héron. Pour
l’accentuation de la trame de nous obtenons :

F IGURE 40 – Accentuation trame

Et pour le détramage nous obtenons :

F IGURE 41 – Détramage

On retrouve bien l’action respectivement d’un diaphragme et d’une pastille opaque au centre du
plan de Fourier. D’autres exemples de résultats sont placés en annexe (figure 52, 53, 54).

24
projet et TP : Optique de Fourier

5 Conclusion

Ce projet nous aura permit d’apprendre à problématiser un sujet ouvert. En effet nous avons
du nous même choisir des expériences à réaliser correspondantes au sujet, nous avons donc choisi
trois expériences à réaliser : la strioscopie, le détramage d’image, tramage d’image. De ces expé-
riences nous avons essayé de retrouver nos résultats de manière analytique puis parallèlement
nous avons fait un programme python qui nous a permit de vérifier les expériences et de nous
conforter dans nos résultats ainsi que d’en faire d’autres plus facilement. Durant nos recherches
nous avons découvert d’autres expériences à réaliser comme par exemple la spectroscopie à trans-
formée de Fourier que nous avons pas eu le temps de traiter lors de ce projet.

25
projet et TP : Optique de Fourier

6 Annexe

6.1 Photos de notre montage pour la strioscopie

F IGURE 42 – Photo du montage de la strioscopie

F IGURE 43 – Photo profilée du montage de la strioscopie

F IGURE 44 – Lame de rasoir dans le plan de Fourier(couteau de Foucault)

Nous avons ici, placer une feuille (verte) juste derrière le couteau de Foucault pour pouvoir voir le
plan de Fourier.

26
6.2 Nos résultats expérimentaux projet et TP : Optique de Fourier

6.2 Nos résultats expérimentaux

F IGURE 46 – Image du Héron avec un filtre


F IGURE 45 – Image du Héron sans filtre
passe-bas, un trou de 1,5mm

F IGURE 47 – Image du Héron sans filtre F IGURE 48 – Image du Héron avec un filtre
passe-bas, trou de 2mm

F IGURE 50 – Image du Héron avec filtre


F IGURE 49 – Image du Héron sans filtre
passe-haut, un point de 1,5mm

27
6.3 Formule d’Euler et sinus cardinal. projet et TP : Optique de Fourier

6.3 Formule d’Euler et sinus cardinal.

La formule d’Euler pour les sinus est :


e i x = cos(x) + i sin(x)
On la transforme pour qu’on puisse l’exploiter dans notre cas :
e i x − e −i x
sin(x) =
2i
on a donc en continuant nos calculs de l’équation (14) :
1 h a −a
i 1 ³ a´
− e −i k 2 + e −i k 2 = 2i sin k
2i πk 2i πk 2
1 ¡ a´
= sin k
πk 2
Durant nos calculs, nous avons également besoin de la formule du sinus cardinal :

sin(x)
sin c(x) =
x

F IGURE 51 – Graphique d’un sinus cardinal (rouge) et d’un sinus cardinal normalisé (bleu)

6.4 Explication des calculs de la partie 2.3.

Comme nous somme dans les mêmes conditions sur x et sur y, les valeurs de C(x) et C(y) sont iden-
tiques sur les mêmes intervalles. On utilise, de la même manière qu’à une dimension, la formule
de la transformée de Fourier mais cette fois on l’adapte pour les deux dimensions.
Z ∞Z ∞
1
F (k x , k y ) = T F (C (x, y)) = 2 C (x)C (y) × e −i k x x × e −i k y y d xd y (33)
4π −∞ −∞

28
6.4 Explication des calculs de la partie 2.3. projet et TP : Optique de Fourier

Notre formule peut se réécrire de cette forme :


Z −a Z −a
1 2 2
F (k x , k y ) = T F (C (x, y)) = 2 C (x)C (y) × e −i k x x × e −i k y y d xd y
4π −∞ −∞
Z aZ a
1 2 2
+ 2 C (x)C (y) × e −i k x x × e −i k y y d xd y
4π −a
2
−a
2
Z ∞Z ∞
1
+ 2 C (x)C (y) × e −i k x x × e −i k y y d xd y (34)
4π 2 a a
2

Si l’on remplace par les valeurs de C(x) et C(y) par 1 lorsque nous somme sur l’intervalle [ −a , a ] en
2 2
x et en y et 0 partout ailleurs nous obtenons donc :
Z aZ a
1 2 2
F (k x , k y ) = T F (C (x, y)) = 0 + 1 × 1 × e −i k x x × e −i k y y d xd y + 0 (35)
4π2 −a 2
−a
2
Z aZ a
1 2 2
= 2 e −i k x x × e −i k y y d xd y (36)
4π −a 2
−a
2
Z a
1 2 £ 1 −i k x ¤ a2
= 2 e −i k y y × e x −a d y (37)
4π −a 2
−i k x 2
a
1 1 h i kx a
Z
i 2
a
= 2× e 2 − e −i k x 2 e −i k y y d y (38)
4π i kx −a
2
1 1 h i kx a a
i £ 1 ¤ a2
= 2× e 2 − e −i k x 2 × e −i k y y −a (39)
4π i kx −i k y 2

1 1 h
i k x a2 −i k x a2
i 1 h
i k y a2 −i k y a2
i
= 2× e −e × e −e (40)
4π i kx i ky
h i h i
i k x a2 −i k x a2 i k y a2 −i k y a2
1 1 e − e 1 e − e
= 2× × (41)
π kx 2i ky 2i
1 a a
= 2 sin(k x ) sin(k y ) (42)
π kx k y 2 2
a a
a2 sin(k x 2 ) sin(k y 2 )
= × × (43)
4π2 k x a2 k y a2
a2 a a
= 2
× sin c(k x ) × sin c(k y ) (44)
4π 2 2

29
6.5 Autres exemples de résultats numériques projet et TP : Optique de Fourier

6.5 Autres exemples de résultats numériques

Si l’on reprend le même type de grille que lors de la partie expérimentale et qu’on lui applique les
mêmes filtres, nous obtenons tout d’abord avec un filtre passe-bande verticale :

F IGURE 52 – filtre passe bas

Puis avec un passe-bande horizontale :

F IGURE 53 – Filtre passe bas

Et pour finir avec un passe-bande diagonale :

30
6.6 Script python projet et TP : Optique de Fourier

F IGURE 54 – Filtre passe-bas

On retrouve bien les résultats attendus.

6.6 Script python

# −* − coding : utf −8 −* −

from t k i n t e r import *
import t k i n t e r as tk
# Import des bibliotheques necessaire
import pylab as plb
import matplotlib . image as mpimg

# Import de l ’ image a t r a i t e r ( en png )


image = mpimg. imread ( " oiseau . png " )

# Definition des axes x et y


axe_x = image . shape [ 0 ]
axe_y = image . shape [ 1 ]

# Transformee de Fourier de l ’ image grace a l a fonction f f t ( f a s t


f o u r i e r transform )
imagefft=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . complex64 )
f o r i in range ( 3 ) :
imagefft [ : , : , i ]= plb . f f t s h i f t ( plb . f f t 2 ( image [ : , : , i ] ) )
# l a fonction f f t s h i f t permet de placer l a frequence nulle au centre

31
6.6 Script python projet et TP : Optique de Fourier

#copie de l a f f t de l ’ image pour pouvoir l a f i l t r e e par l a


# s u i t e en gardant l a f f t non f i t r e e a f i n de l e s comparer

i m a g e f f t _ f i l t r e 1 =plb . copy ( imagefft )


i m a g e f f t _ f i l t r e 2 =plb . copy ( imagefft )

### Definitio n des f i l t r e s

def f i l t r a g e _ p a s s e _ b a s ( i m a g e f f t _ f i l t r e , diaphragme ) :
# F i l t r e passe −bas donc on coupe l e s hautes frequences , comme un diaphragme

# Tableau de booleen aux memes dimension que l ’ image , un booleen par p i x e l


Passe_Bas=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )

# On remplit l a l i s t e passe −bas


f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
Passe_Bas [ i , j ] = ( ( i −axe_x / 2 ) * * 2 + ( j −axe_y / 2 ) * * 2 > axe_x * axe_y /
diaphragme )
# l e booleen vaut true s i l a condition e s t v e r i f i e r e s t donc

l ’ amplitude e s t coupee

# On coupe quand l e booleen vaut True


i m a g e f f t _ f i l t r e [ Passe_Bas ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e [ : , : , i ] ) )

# On recupere nos images


return i m a g e f f t _ f i l t r e , imageinv

def f i l t r a g e _ p a s s e _ h a u t ( i m a g e f f t _ f i l t r e , cache ) :
# F i l t r e passe −haut donc on coupe l e s basses frequences , comme une

p a s t i l l e opaque

# Tableau de booleen aux memes dimension que l ’ image , un booleen par p i x e l


Passe_Haut=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )

# On remplit l a l i s t e passe −haut


f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
Passe_Haut [ i , j ] = ( ( i −axe_x / 2 ) * * 2 + ( j −axe_y / 2 ) * * 2 < axe_x * axe_y /cache )
# l e booleen vaut true s i l a condition e s t v e r i f i e r e s t donc

32
6.6 Script python projet et TP : Optique de Fourier

l ’ amplitude e s t coupee

# On coupe quand l e booleen vaut True


i m a g e f f t _ f i l t r e [ Passe_Haut ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e [ : , : , i ] ) )

# On recupere nos images


return i m a g e f f t _ f i l t r e , imageinv

def filtrage_coupe_bande ( i m a g e f f t _ f i l t r e ) :
# F i l t r e coupe−bande donc on coupe des bandes de frequences , comme une g r i l l e

# Tableau de booleen aux m mes dimension que l ’ image , un booleen par p i x e l


coupe_bande=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )

# On remplit l a l i s t e coupe−bande , on f a i t autant de boucle que l ’ on veut


pour couper
# autant de bande que l ’ on veut
f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
i f 0< i <275 and 0< j <475:
coupe_bande [ i , j ]= True
i f 325< i <600 and 600< j <1050:
coupe_bande [ i , j ]= True
i f 600< j <1050:
coupe_bande [ i , j ]= True
i f 390< i <410:
coupe_bande [ i , j ]= True
i f 705< j <715:
coupe_bande [ i , j ]= True
i f 290< i <310 and j <290 :
coupe_bande [ i , j ]= True
i f 290< i <310 and j >310 :
coupe_bande [ i , j ]= True

# On coupe quand l e booleen vaut True


i m a g e f f t _ f i l t r e [ coupe_bande ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e [ : , : , i ] ) )

# On recupere nos images

33
6.6 Script python projet et TP : Optique de Fourier

return i m a g e f f t _ f i l t r e , imageinv

def f i l t r a g e _ d i a g o n a l ( i m a g e f f t _ f i l t r e ) :
diagonal=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )
f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
diagonal [ i , j ]= abs ( j − i * axe_y / axe_x ) >5

i m a g e f f t _ f i l t r e [ diagonal ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e [ : , : , i ] ) )

return i m a g e f f t _ f i l t r e , imageinv

# Fonction pour r e c a l c u l e r et a f f i c h e r l a f i g u r e a chaque lancement


# Uniquement pour l e f i l t r e passe −bas et passe −haut donc detramage et tramage
de l ’ image

def c a l c u l ( ) :
# On ferme l a f i g u r e du lancement precedent
plb . close ( )

# On recupere l e s valeurs des curseurs


diaphragme=curseur_diaphragme . get ( )
cache=curseur_cache . get ( )

# Import de l ’ image a t r a i t e r ( en png )


image = mpimg. imread ( " oiseau . png " )

# Defini ti o n des axes x et y


axe_x = image . shape [ 0 ]
axe_y = image . shape [ 1 ]

# Transformee de Fourier de l ’ image grace a l a fonction f f t ( f a s t f o u r i e r


transform )
imagefft=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . complex64 )
f o r i in range ( 3 ) :
imagefft [ : , : , i ]= plb . f f t s h i f t ( plb . f f t 2 ( image [ : , : , i ] ) )
# l a fonction f f t s h i f t permet de placer l a frequence nulle au centre

# On creer deux copie , une pour chaque f i l t r a g e


i m a g e f f t _ f i l t r e 1 =plb . copy ( imagefft )
i m a g e f f t _ f i l t r e 2 =plb . copy ( imagefft )

34
6.6 Script python projet et TP : Optique de Fourier

### F i l t r e passe −bas donc on coupe l e s hautes frequences ( comme un


diaphragme )
Passe_Bas=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )

# On remplit l a l i s t e passe −bas


f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
Passe_Bas [ i , j ] = ( ( i −axe_x / 2 ) * * 2 + ( j −axe_y / 2 ) * * 2 >

axe_x * axe_y /diaphragme )

# l e booleen vaut true s i l a condition e s t v e r i f i e r e s t donc

l ’ amplitude e s t coupee

# On applique l e f i l t r e donc met a zeros l e s valeurs correspondantes


i m a g e f f t _ f i l t r e 1 [ Passe_Bas ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e 1 [ : , : , i ] ) )

### F i l t r e passe −haut donc on coupe l e s basses frequences ( comme une

p a s t i l l e opaque )
Passe_Haut=plb . zeros ( ( axe_x , axe_y ) , dtype=bool )

# On remplit l a l i s t e passe −haut


f o r i in range ( axe_x ) :
f o r j in range ( axe_y ) :
Passe_Haut [ i , j ] = ( ( i −axe_x / 2 ) * * 2 + ( j −axe_y / 2 ) * * 2 < axe_x * axe_y /cache )

# l e booleen vaut true s i l a condition e s t v e r i f i e r e s t donc

l ’ amplitude e s t coupee

i m a g e f f t _ f i l t r e 2 [ Passe_Haut ] = [ 0 , 0 , 0 ]

# Transformee de Fourier inverse pour avoir notre image modifiee


imageinv2=plb . zeros ( ( axe_x , axe_y , 3 ) , dtype=plb . f l o a t 3 2 )
f o r i in range ( 3 ) :
imageinv2 [ : , : , i ]= plb . i f f t 2 ( plb . i f f t s h i f t ( i m a g e f f t _ f i l t r e 2 [ : , : , i ] ) )

35
6.6 Script python projet et TP : Optique de Fourier

# Figure pour a f f i c h e r l e s t r o i s images et l e s t r o i s plan de f o u r i e r


# ( Non f i l t r e , f i l t r e passe −bas , f i l t r e passe −haut )
f i g 2 =plb . f i g u r e ( f i g s i z e = ( 1 0 , 1 0 ) )

axe21= f i g 2 . add_subplot (231)


axe21 . imshow( image )
axe21 . s e t _ t i t l e ( ’ image i n i t i a l e ’ )

axe22= f i g 2 . add_subplot (234)


axe22 . imshow( plb . log10 ( plb . absolute ( imagefft [ : , : , 0 ] ) ) )
axe22 . s e t _ t i t l e ( ’ t r a n s f o r m e de Fourier non f i l t r e ’ , f o n t s i z e =10)

axe23= f i g 2 . add_subplot (232)


axe23 . s e t _ t i t l e ( ’ image d t r a m e ’ )
axe23 . imshow( imageinv )

axe24= f i g 2 . add_subplot (235)


axe24 . imshow( plb . log10 ( plb . absolute ( i m a g e f f t _ f i l t r e 1 [ : , : , 0 ] ) ) )
axe24 . s e t _ t i t l e ( ’ t r a n s f o r m e de Fourier d t r a m e ’ , f o n t s i z e =10)

axe25= f i g 2 . add_subplot (233)


axe25 . s e t _ t i t l e ( ’ image t r a m e ’ )
axe25 . imshow( imageinv2 )

axe26= f i g 2 . add_subplot (236)


axe26 . imshow( plb . log10 ( plb . absolute ( i m a g e f f t _ f i l t r e 2 [ : , : , 0 ] ) ) )
axe26 . s e t _ t i t l e ( ’ t r a n s f o r m e de Fourier t r a m e ’ , f o n t s i z e =10)

# Creation de l a f e n e t r e p r i n c i p a l e
i n t e r f a c e = tk . Tk ( )
i n t e r f a c e . geometry ("500 x400 " )
i n t e r f a c e . t i t l e ( " d t r a m a g e et tramage d ’ une image " )

# 1 er curseur pour l a t a i l l e du diaphragme


curseur_diaphragme= tk . Scale ( i n t e r f a c e , o r i e n t = ’ horizontal ’ , from_=1 , to =1000 ,
length =400 ,
l a b e l =" t a i l l e du diaphragme " )
curseur_diaphragme . place ( x =10 , y=50)

# 2e curseur pour l a t a i l l e du cache


curseur_cache= tk . Scale ( i n t e r f a c e , o r i e n t = ’ horizontal ’ , from_=1 , to =10000 ,
length =400 ,
l a b e l =" t a i l l e du cache " )

36
6.6 Script python projet et TP : Optique de Fourier

curseur_cache . place ( x =10 , y=120)

# Bouton pour r e c a l c u l e r l e s transformee de f o u r i e r et a f f i c h e r l e s nouvelles


images
b1 = tk . Button ( i n t e r f a c e , t e x t = ’ Lancer ’ , command=lambda : c a l c u l ( ) )
b1 . place ( x =10 , y=200)

# Bouton pour a r r e t e r l a simulation


b3 = tk . Button ( i n t e r f a c e , t e x t = ’ Quitter ’ , command= i n t e r f a c e . destroy )
b3 . pack ( side = RIGHT, padx = 10 , pady = 10)
b3 . place ( x =10 , y=250)

i n t e r f a c e . mainloop ( )

37

Vous aimerez peut-être aussi