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