大学の課題で、画像拡大のプログラムを作っているのですが、行き詰ってしまいました。
画像拡大そのもののプログラムは完成して、あとは画像向上のための処理なのですが、
その準備段階で、行き詰っています。
フーリエ変換を用いて、画像の向上を図るのですが、
ためしに1次元のフーリエ変換のプログラムなんですが、sin波を入れても
出力がすべて0になってしまいます。(±ありますが)
変換の式が間違えているのでしょうか?
申し訳ないですが、アドバイスお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define PI 3.14159265358979323846
int dft(double *re, double *im, int n)
{
double *t_re, *t_im;
int i, j;
/*メモリ確保*/
t_re = (double *)malloc(sizeof (double) *n);
if(t_re == NULL){
printf("malloc errer1\n");
return -1;
}
t_im = (double *)malloc(sizeof (double) *n);
if(t_im == NULL){
printf("malloc errer2\n");
return -1;
}
for(i=0; i<n; i++)
{
t_re = 0;
t_im = 0;
}
/*フーリエ変換*/
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
t_re += re*cos(2*PI*i*j/n)+im*sin(2*PI*i*j/n);
t_im += -re*sin(2*PI*i*j/n)+im*cos(2*PI*i*j/n);
}
}
for(i=0; i<n; i++)
{
re = t_re;
im[i] = t_im[i];
}
/*メモリ解放*/
free(t_re);
free(t_im);
return 0;
}
int main()
{
double re[32], im[32];
int i;
for(i=0; i<32; i++)
{
re[i] = sin(2.0*PI*i/32);
im[i] = 0;
printf("%f\n", re[i]);
}
dft(re, im, 32);
for(i=0; i<32; i++)
{
printf("re=%f im=%f\n", re[i], im[i]);
}
return 0;
}