Récemment, j'ai rencontré des problèmes concernant l'utilisation de fftw et de sa transformation c2c (voir: 3d c2c fft with fftw library). Comme je localisais mes problèmes dans l'utilisation de la bibliothèque, j'ai créé une nouvelle question afin de discuter de cette situation d'une manière plus concrète. Puisque je fais une transformation complexe à complexe avec des données réelles, mes données transformées dans l'espace Fourier sont supposées être symétriques: F [n] = con (F [Nn])fftw c2c: absence de symétrie dans les données réelles transformées
Maintenant, j'ai fait quelques transformations avec de petits blocs de test-data pour vérifier les données transformées pour cette symétrie. Pour 1D transformer à chaque chose a fonctionné comme prévu, mais pour les dimensions plus élevées, j'ai obtenu des résultats inattendus.
J'utilise fftwf_plan_dft_2d
pour transformer une image en niveaux de gris 8x8 dans l'espace de Fourier et le résultat complexe est donné par:
n
0 real 7971 imag 0
1 real -437.279 imag -802.151
2 real -289 imag -566
3 real -182.721 imag 15.8486
4 real 31 imag 0
5 real -182.721 imag -15.8486
6 real -289 imag 566
7 real -437.279 imag 802.151
8 real -1499.79 imag -315.233
9 real 182.693 imag -74.5563
10 real 55.9239 imag -12.8234
11 real -84.7868 imag -9.10052
12 real -14.4264 imag 211.208
13 real 289.698 imag 214.723
14 real 452.659 imag -246.279
15 real 1136.35 imag -763.85
16 real 409 imag -134
17 real -141.865 imag 42.6396
18 real -33 imag 122
19 real 129.075 imag -49.7868
20 real 1 imag -150
21 real 109.865 imag -84.6396
22 real 95 imag -142
23 real -841.075 imag -92.2132
24 real -108.207 imag -89.2325
25 real -127.213 imag 28.8995
26 real -36.6589 imag -8.27922
27 real -74.6934 imag 43.4437
28 real 70.4264 imag 29.2082
29 real -88.3545 imag -81.8499
30 real -127.924 imag -190.823
31 real 230.302 imag 8.7229
32 real -53 imag 0
33 real -73.1127 imag -22.8578
34 real -85 imag -82
35 real -10.8873 imag 51.1421
36 real -65 imag 0
37 real -10.8873 imag -51.1421
38 real -85 imag 82
39 real -73.1127 imag 22.8578
40 real -108.207 imag 89.2325
41 real 230.302 imag -8.7229
42 real -127.924 imag 190.823
43 real -88.3545 imag 81.8499
44 real 70.4264 imag -29.2082
45 real -74.6934 imag -43.4437
46 real -36.6589 imag 8.27922
47 real -127.213 imag -28.8995
48 real 409 imag 134
49 real -841.075 imag 92.2132
50 real 95 imag 142
51 real 109.865 imag 84.6396
52 real 1 imag 150
53 real 129.075 imag 49.7868
54 real -33 imag -122
55 real -141.865 imag -42.6396
56 real -1499.79 imag 315.233
57 real 1136.35 imag 763.85
58 real 452.659 imag 246.279
59 real 289.698 imag -214.723
60 real -14.4264 imag -211.208
61 real -84.7868 imag 9.10052
62 real 55.9239 imag 12.8234
63 real 182.693 imag 74.5563
Désolé pour cette longue liste de données, mais il montre mon problème.
Par exemple pour F[3]=-182.721 + 15.8486i
je m'attendais à F[64-3] = F[61] = -182.721 - 15.8486i
, mais comme vous pouvez le voir il est -84.7868 + 9.10052i
. Au lieu de cela, le conjugué de F[3]
est situé à l'index 5. Même chose pour les autres paires.
S'il y a un système, je ne le trouve pas.
Voici le code complet:
QImage image("/Users/wolle/Desktop/wolf.png");
int w = image.width();
int h = image.height();
int size = w * h;
cl_float *rawImage = imageToRaw(image); // converts a QImage into an rgb array [0..255]
fftwf_complex *complexImage = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex) * size);
fftwf_complex *freqBuffer = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex) * size);
// real data to complex data
for (int i = 0; i < size; i++)
{
complexImage[i][0] = (float)rawImage[i];
complexImage[i][1] = 0.0f;
}
fftwf_plan forward = fftwf_plan_dft_2d(w, h, complexImage, freqBuffer, FFTW_FORWARD, FFTW_ESTIMATE);
fftwf_execute(forward);
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
int gid = y * w + x;
qDebug() << gid << "real" << freqBuffer[gid][0] << "imag" << freqBuffer[gid][1];
}
}
Je vous serais reconnaissant de l'aide. :-D
salutations
loup
Je ne suis pas sûr que je comprends. Vous parlez d'une image 16x16, mais vos données ne sont que 64 éléments. En outre, tous les éléments de cette liste ressemblent à des paires conjuguées ... –