Example #1
0
        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);
        }
Example #2
0
        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;
        }