IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Transformée de Fourier


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai Avatar de Wozwald
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Points : 12
    Points
    12
    Par défaut Transformée de Fourier
    Bonsoir à tous,

    Je suis toujours sur mon programme de déconvolution et j'ai un petit (gros) souci.

    Je veux appliquer la TF à une image et vérifier que la TF inverse me redonne bien mon image. Je n'utilise tout d'abord qu'une seule colonne du tableau (donc une TF suivant une seule direction).

    Mais quand j'applique la TF à ma colonne (qui est un tableau numpy), cela me donne un tableau numpy avec la partie réelle strictement identique aux valeurs du tableau sans TF et avec une partie imaginaire nulle.

    J'ai visualisé les valeurs en utilisant matplotlib et j'ai le même graphique avec et sans TF.

    Quelqu'un peut-il m'aider ? Je ne comprends vraiment pas pourquoi cela ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    from matplotlib import pyplot as plt
    from skimage import *
    import numpy as np
    import math
     
    spectre = io.imread("/home/wozwald/Documents/000Fac/S6/Stages/Stage_IAP/Docs/ESO_Spectroscopy_fichiers/Spectres/EFOSC_Corona.sp1_2019-07-02T20_40.png", as_gray=True)
     
    spectre = img_as_float(spectre)
     
    col_offset = spectre[40:2000,720:1030]
     
    offset = np.mean(col_offset)
     
    colonne1=spectre[760:2060,333:334]
    colonne2=spectre[760:2060,334:335]
    colonne3=spectre[760:2060,335:336]
    colonne=np.zeros((1300,1))
     
    #Je commence par prendre trois colonnes au milieu du spectre pour les moyenner entre elles.
     
    for i in range (0, 1300,1) :
        colonne[i]=(colonne1[i]+colonne2[i]+colonne3[3])/3
     
    for i in range (0,1300,1) :
        colonne[i]=colonne[i]-offset
     
    #Je retire l'offset.
     
    '''X = np.linspace(0,1300,1300)
    Y = np.zeros((1300))
    for i in range (len(colonne)) :
        Y[i]=colonne[len(colonne)-1-i]
    plt.plot(X,Y)
    plt.show()'''
     
    moy = np.mean(colonne)                  
     
    for i in range (0,1300,1) :
        colonne[i]=colonne[i]-moy
    print(colonne)
     
    #Puis je calcule la valeur moyenne de la colonne obtenue et je la soustrais à la colonne.
     
    '''X = np.linspace(0,1300,1300)
    Y = np.zeros((1300))
    for i in range (len(colonne)) :
        Y[i]=colonne[len(colonne)-1-i]
    plt.plot(X,Y)
    plt.show()'''
     
    colonne2 = np.copy(colonne)
    for i in range (0,1300,1) :
        colonne2[i]=colonne[-1-i]
     
    #Je retourne le spectre pour l'avoir dans le bon sens.
     
    colonne_sym = np.zeros((2600,1))
    for i in range (0,1300,1):
        colonne_sym[i] = colonne2[i]
    for i in range (2599,1300,-1) :
        j = 2599-i
        colonne_sym[i]=colonne2[j]
     
    print(colonne_sym)
     
    #Je symétrise le spectre.
     
    '''X = np.linspace(0,2600,2600)
    Y = np.zeros((2600))
    for i in range (len(colonne_sym)) :
        Y[i]=colonne_sym[len(colonne_sym)-1-i]
    plt.plot(X,Y)
    plt.show()'''
     
    colonne_fft = np.fft.fft(colonne_sym)
     
    #J'applique la TF à la colonne.
     
    print(colonne_fft)
     
    col_reel_fft = np.real(colonne_fft)
    col_im_fft = np.imag(colonne_fft)
     
    '''X = np.linspace(0,2600,2600)
    Y = np.zeros((2600))
    for i in range (len(colonne_fft)) :
        Y[i]=col_reel_fft[len(colonne_fft)-1-i]
    plt.plot(X,Y)
    plt.show()'''
     
    #Je sépare partie réelle et partie imaginaire.
     
    col_ifft_div = np.fft.ifft(colonne_fft)
     
    #J'applique la TF inverse.
     
    col=col_ifft_div + moy
    Et les résultats obtenus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    [[ 0.01498389]
     [ 0.01640298]
     [ 0.01602659]
     ...
     [-0.01964391]
     [-0.02150043]
     [-0.02201923]]
    [[-0.02201923]
     [-0.02150043]
     [-0.01964391]
     ...
     [-0.01964391]
     [-0.02150043]
     [-0.02201923]]
    [[-0.02201923+0.j]
     [-0.02150043+0.j]
     [-0.01964391+0.j]
     ...
     [-0.01964391+0.j]
     [-0.02150043+0.j]
     [-0.02201923+0.j]]
    Merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Scipy contient déjà tout ce qu'il faut pour traiter des transformées de Fourier ...

    https://docs.scipy.org/doc/scipy/ref...orial/fft.html

  3. #3
    Membre à l'essai Avatar de Wozwald
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Scipy contient déjà tout ce qu'il faut pour traiter des transformées de Fourier ...

    https://docs.scipy.org/doc/scipy/ref...orial/fft.html
    Merci pour votre réponse.

    J'ai réécrit mon programme avec la TF de scipy, j'ai toujours le même problème.

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    1) Fournissez le nouveau code
    2) Avec ce code, fournissez un petit exemple. Donnez un array, je sais pas, de 10 éléments disons, soit random, soit que vous choisissez, montrer le résultats que ca produit, et dites le résultat que vous attendriez. Car là en l'état on ne peut rien faire tourner de notre côté, donc difficile de vous aider plus.

  5. #5
    Membre à l'essai Avatar de Wozwald
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Donnez un array, je sais pas, de 10 éléments disons, soit random, soit que vous choisissez, montrer le résultats que ca produit, et dites le résultat que vous attendriez.
    Bonjour, je viens de comprendre mon erreur, grâce à votre conseil ^^

    Le problème était que je prennais une colonne, donc un tableau 2D avec une seule valeur par ligne. Donc la FFT s'applique valeur par valeur, et les valeurs restent inchangées.

    J'ai transformé ma colonne en ligne et ça marche !

    Merci pour votre aide

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Voilà, je m'en doutais un peu, mais rien ne vaut la création d'un exemple minimal pour débogger. Dans plus d'un cas sur 2, ca nous permet d'identifier seul. Et dans l'autre cas, c'est un élément précieux et indispensable pour que les autres puissent vous apportez une aide efficace.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformée de Fourier Mellin
    Par meera dans le forum Scilab
    Réponses: 6
    Dernier message: 04/08/2008, 14h46
  2. Transformée de fourier rapide
    Par Aida dans le forum Traitement du signal
    Réponses: 23
    Dernier message: 03/01/2006, 15h14
  3. transformée de fourier
    Par Mat 74 dans le forum Traitement du signal
    Réponses: 8
    Dernier message: 15/05/2005, 19h26
  4. Transformée de fourier
    Par rstaros dans le forum C
    Réponses: 5
    Dernier message: 09/05/2005, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo