大学の課題で、画像拡大のプログラムを作っているのですが、行き詰ってしまいました。
画像拡大そのもののプログラムは完成して、あとは画像向上のための処理なのですが、
その準備段階で、行き詰っています。
フーリエ変換を用いて、画像の向上を図るのですが、
ためしに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; }