public ImageProcessor GetFourierTransformedImages(double normalizationScale, double logoffset) { var realImage = new double[Image.Width, Image.Height]; var imaginaryImage = new double[Image.Width, Image.Height]; var signal = new Complex[Image.Width, Image.Height]; for (int i = 0; i < Image.Width; i++) { for (int j = 0; j < Image.Height; j++) { signal[i, j] = Image[i, j].R; } } FourierTransformation.FFT2(signal, FourierTransformation.Direction.Forward); var copy = new Complex[Image.Width, Image.Height]; ComplexToImages(copy, signal, realImage, imaginaryImage); Normalize(realImage, normalizationScale, logoffset); Normalize(imaginaryImage, normalizationScale, logoffset); return(new ImageProcessor(CreateImage(realImage), CreateImage(imaginaryImage), copy)); }
public Image <Rgb24> ReverseFourierTransform() { var signal = new Complex[Image.Width, Image.Height]; var normalImage = new double[Image.Width, Image.Height]; for (int i = 0; i < Image.Width; i++) { for (int j = 0; j < Image.Height; j++) { signal[i, j] = TransformedSignal[i, j]; } } FourierTransformation.FFT2(signal, FourierTransformation.Direction.Backward); for (int i = 0; i < Image.Width; i++) { for (int j = 0; j < Image.Height; j++) { normalImage[i, j] = signal[i, j].Real; } } return(CreateImage(normalImage)); }
static void Main(string[] args) { List <DataModel> datas = new DataParser("asd.csv").LoadFromTextFile(); //asd123 using var sw = new StreamWriter("result.csv"); sw.WriteLine("No,Ido,Bemenet,Re,Im,Magnitude,dB,Phase"); foreach (var d in datas) { List <Complex> cmplx = new List <Complex>(); foreach (var item in d.RawData) { cmplx.Add(new Complex(item)); } var result = new FourierTransformation().FastFourierTransformation(cmplx.Take(256).ToArray()); for (int i = 0; i < result.Length; i++) { sw.WriteLine($"{i},{d.RecordTime},{d.RawData[i]},{result[i].Real},{result[i].Imaginary},{result[i].Magnitude},{result[i].Decibell},{result[i].Phase}"); } } }