Я пытаюсь заставить работать преобразования Фурье, я должен сделать это для задания, и я думаю, что у меня есть это там, где оно должно работать, и я не уверен, почему это не так. Я думаю, что это как-то связано с комплексными числами, поскольку здесь задействовано «i». Я просмотрел много ссылок и понимаю формулу, но у меня проблемы с ее программированием. это то, что у меня есть до сих пор
void NaiveDFT::Apply( Image & img )
{
//make the fourier transform using the naive method and set that to the image.
Image dft(img);
Pixel ** dftData = dft.GetImageData();
Pixel ** imgData = img.GetImageData();
for(unsigned u = 0; u < img.GetWidth(); ++u)
{
for(unsigned v = 0; v < img.GetHeight(); ++v)
{
std::complex<double> sum = 0;
for(unsigned x = 0; x < img.GetWidth(); ++x)
{
for(unsigned y = 0; y < img.GetHeight(); ++y)
{
std::complex<double> i = sqrt(std::complex<double>(-1));
std::complex<double> theta = 2 * M_PI * (((u * x) / img.GetWidth()) + ((v * y) / img.GetHeight()));
sum += std::complex<double>(imgData[x][y]._red) * cos(theta) + (-i * sin(theta));
//sum += std::complex<double>(std::complex<double>(imgData[x][y]._red) * pow(EULER, -i * theta));
}
}
dftData[u][v] = (sum.imag() / (img.GetWidth() * img.GetHeight()));
}
}
img = dft;
}
У меня есть несколько тестовых изображений, с которыми я тестирую это, и я получаю либо все черное изображение, либо все серое изображение.
Я также пробовал сумму e ^ (-i * 2 * PI * (x * u * ширина + y * v * высота) * 1/ширина * высота, которая дает тот же результат, что и ожидалось, хотя это все еще не желаемое выход.
Я также пробовал число sum.real(), и это тоже не выглядит правильно.
если у кого-нибудь есть какие-либо советы или может указать мне правильное направление, это было бы здорово, на данный момент я просто продолжаю пробовать разные вещи и проверять результат, пока не получу то, что должен получить.
Спасибо.
i
это всего лишьstd::complex< >(0,1)
. - person MSalters   schedule 18.11.2013