public static unsafe Complex[,] Transform(Bitmap spatialDomain, PixelFormat pixelFormat) { Complex[,] output = new Complex[spatialDomain.Width, spatialDomain.Height]; BitmapData bData = spatialDomain.LockBits(new Rectangle(0, 0, spatialDomain.Width, spatialDomain.Height), ImageLockMode.ReadWrite, spatialDomain.PixelFormat); byte bitsPerPixel = ImageHelper.GetBitsPerPixel(bData.PixelFormat); byte * scan0 = (byte *)bData.Scan0.ToPointer(); if (bitsPerPixel == 8) { for (int i = 0; i < bData.Height; ++i) { for (int j = 0; j < bData.Width; ++j) { byte *data = scan0 + i * bData.Stride + j * bitsPerPixel / 8; output[i, j] = data[0]; } } for (int i = 0; i < output.GetUpperBound(0) + 1; i++) { FFTRow(output, i); } for (int i = 0; i < output.GetUpperBound(1) + 1; i++) { FFTColumn(output, i); } } spatialDomain.UnlockBits(bData); return(output); }
public double[] MakeDouble(Complex[,] comp) { int width = comp.GetUpperBound(0) + 1; int height = comp.GetUpperBound(1) + 1; double[] features = new double[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { features[(j * width) + i] = comp[i, j].Im; } } return features; }