public Complex[,] DFT(Bitmap OriginalImage)
{
Complex[,] fourier = new Complex[OriginalImage.Width, OriginalImage.Height];
Bitmap image = this.ToGreyscale(OriginalImage);
int M = OriginalImage.Width;
int N = OriginalImage.Height;
for (int k = 0; k < M; k++)
{
for (int l = 0; l < N; l++)
{
Complex sum = 0;
for (int j = 0; j < N; j++)
{
for (int i = 0; i < M; i++)
{
Double p = Convert.ToDouble(image.GetPixel(i, j).R);
Complex im = new Complex(0, 1);
Double g = (k * i) / Convert.ToDouble(M) + (l * j) / Convert.ToDouble(N);
Complex exp = Complex.Exp(-im * 2 * Math.PI * g);
sum += p * exp;
}
}
fourier[k, l] = sum / Math.Sqrt(M * N);
}
}
return fourier;
}