Я пытаюсь написать DFT на C ++ Qt. Я использую версию с функцией exp. Я перепробовал много версий, и результат всегда один и тот же. Первый DFT для строк, а затем для столбцов. Изображение 400 x 400 RGB. Это правильно? Если нет, то что не так?
using namespace std;
complex<double> *tab;
tab = new complex<double>[640000];
complex<double> i(0.0, 1.0);
for (int j = 0; j < 400; ++j) {
for (int k = 0; k < 400; ++k) {
complex<double> sum(0.0, 0.0);
for (int n = 0; n < 400; ++n) {
int t = (j * 400 + n) << 2;
complex<double> arg = -i * ((2.0 * M_PI * k * n) / 400);
complex<double> val(tmp[t] / 255.0, 0.0); //tmp - unsigned char, values R G B
sum += val * exp(arg);
}
int t = (j * 400 + k) << 2;
tab[t] = sum;
tab[t + 1] = sum;
tab[t + 2] = sum;
}
}
for (int j = 0; j < 400; ++j) {
for (int k = 0; k < 400; ++k) {
complex<double> sum(0.0, 0.0);
for (int n = 0; n < 400; ++n) {
int t = (n * 400 + j) << 2;
complex<double> arg = -i * ((2.0 * M_PI * k * n) / 400);
sum += tab[t] * exp(arg);
}
int t = (k * 400 + j) << 2;
unsigned char p;
p = static_cast<unsigned char>(static_cast<int>(round(abs(sum))) % 256);
buf[t] = p;
buf[t + 1] = p;
buf[t + 2] = p;
}
}
delete tab;
Я использую изображение:
Результат: