private void FillResultImages(Bitmap bitmap) { var phaseInterval = MathHelper.CalculateMinMax(ComplexData, Spectrum.Phase); var magnitudeInterval = MathHelper.CalculateMinMax(ComplexData, Spectrum.Magnitude); FourierHelper.SwapQuadrants(ComplexData); using (var phaseBitmapData = new SingleBitmapData(bitmap, PixelFormat.Format8bppIndexed)) using (var magnitudeBitmapData = new SingleBitmapData(bitmap, PixelFormat.Format8bppIndexed)) { for (int y = 0; y < phaseBitmapData.HeightInPixels; y++) { for (int x = 0; x < phaseBitmapData.WidthInBytes; x += phaseBitmapData.BytesPerPixel) { var index = x + y * phaseBitmapData.WidthInBytes; phaseBitmapData.FirstPixelPtr[index] = (byte)FourierHelper.LogNormalize(ComplexData[y][x].Phase, phaseInterval.Max, 255); magnitudeBitmapData.FirstPixelPtr[index] = (byte)FourierHelper.LogNormalize(ComplexData[y][x].Magnitude, magnitudeInterval.Max, 255); } } PhaseImage = phaseBitmapData.Bitmap; MagnitudeImage = magnitudeBitmapData.Bitmap; } FourierHelper.SwapQuadrants(ComplexData); }
public static unsafe ImageComponents ProcessFourierImage( ImageComponents imageComponents, IProcessingFourierOperation fourierOperation) { var clonedData = CollectionHelper.Clone(imageComponents.ComplexData); FourierHelper.SwapQuadrants(clonedData); fourierOperation.ProcessImage(clonedData); FourierHelper.SwapQuadrants(clonedData); var processedData = CollectionHelper.Clone(clonedData); var bitmap = FastFourierTransform.IFFT2D(processedData, imageComponents.Image); return(new ImageComponents(clonedData, bitmap)); }