←Select platform

FastFourierTransformCommand Class

Summary
Computes the Fast Fourier Transform of an image or the Inverse Fast Fourier Transform as specified by flags.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public class FastFourierTransformCommand : RasterCommand 
@interface LTFastFourierTransformCommand : LTRasterCommand 
public class FastFourierTransformCommand 
    extends RasterCommand 
public ref class FastFourierTransformCommand : public RasterCommand   
class FastFourierTransformCommand(RasterCommand): 
Remarks

This command is available in the Imaging and above toolkits.

  • This function converts the image from the time domain to the frequency domain and vice versa using a Fast Fourier Transform algorithm. Fast Fourier Transform algorithms are a simplification of a Discrete Fourier Transform and require that the image dimensions must be power of two (i.e. 2, 4, 8, 16, 32, etc). The number of computations needed are reduced from 2N2 to 2N LgN. Use the DiscreteFourierTransformCommand to use a Discrete Fourier Transform algorithm on an image. If you try to use this method with an image with dimensions that are not a power of two, the method will return an ERROR_INV_PARAMETER error, unless you use the padding flags as explained below.
  • Before using this command, you must create an instance of FourierTransformInformation
  • When using this command with an image where at least one of its dimensions is not a power of two, you must specify an extra flag when creating the FourierTransformInformation instance to pad the dimension(s) to the nearest power of two. If you try to use this method with an image whose dimensions are not a power of two and without specifying a padding flag, this method will return an ERROR_INV_PARAMETER error.
  • The image can be transformed back into the original image minus the noise using the InverseFastFourierTransform
  • This command does not work on regions. If the image has a region the method ignores it and processes the entire image.
  • This command does not support 12 and 16-bit grayscale and 48 and 64-bit color images. If the image is 12 and 16-bit grayscale and 48 and 64-bit color, the command will not threw an exception.
  • This command does not support 32-bit grayscale images.

For more information, refer to Removing Noise.

FFT Function - Before

FFT Function - Before

FFT Function - After

FFT Function - After

View additional platform support for this FFT function.

Example

Run the FastFourierTransformCommand on an image to apply a FFT transformation.

C#
Java
using Leadtools; 
using Leadtools.ImageProcessing; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Core; 
 
public void FastFourierTransformCommandExample() 
{ 
   // Load an image 
   RasterCodecs codecs = new RasterCodecs(); 
   codecs.ThrowExceptionsOnInvalidImages = true; 
 
   RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, @"ImageProcessingDemo\FourierTransform.jpg")); 
 
   // Prepare the command 
   // Resize the image to make sure the image's dimensions are power of two. 
   SizeCommand sizecommand = new SizeCommand(256, 256, Leadtools.RasterSizeFlags.Bicubic); 
 
   sizecommand.Run(image); 
 
   FourierTransformInformation FTArray = new FourierTransformInformation(image); 
   // Apply FFT. 
   FastFourierTransformCommand command = new FastFourierTransformCommand(FTArray, FastFourierTransformCommandFlags.FastFourierTransform | FastFourierTransformCommandFlags.Gray); 
   command.Run(image); 
   LeadRect rcRect = new LeadRect(0, 0, image.Width / 2, image.Height / 2); 
   FrequencyFilterCommand FreqCommand = new FrequencyFilterCommand(FTArray, rcRect, FrequencyFilterCommandFlags.InsideX | FrequencyFilterCommandFlags.OutsideY); 
 
   FastFourierTransformCommand InvCommand = new FastFourierTransformCommand(FTArray, FastFourierTransformCommandFlags.InverseFastFourierTransform | FastFourierTransformCommandFlags.Gray | FastFourierTransformCommandFlags.Scale | 
         FastFourierTransformCommandFlags.Both); 
   InvCommand.Run(image); 
 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import java.io.File; 
import java.io.IOException; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import static org.junit.Assert.assertTrue; 
 
import leadtools.*; 
import leadtools.codecs.*; 
import leadtools.imageprocessing.*; 
import leadtools.imageprocessing.core.*; 
 
 
public void fastFourierTransformCommandExample() { 
    final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
 
    // Load an image 
    RasterCodecs codecs = new RasterCodecs(); 
    codecs.setThrowExceptionsOnInvalidImages(true); 
 
    RasterImage image = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "FourierTransform.jpg")); 
 
    // Prepare the command 
    // Resize the image to make sure the image's dimensions are power of two. 
    SizeCommand sizeCommand = new SizeCommand(256, 256, RasterSizeFlags.BICUBIC.getValue()); 
    sizeCommand.run(image); 
 
    FourierTransformInformation ftArray = new FourierTransformInformation(image); 
 
    // Apply FFT. 
    FastFourierTransformCommand command = new FastFourierTransformCommand(); 
    command.setFourierTransformInformation(ftArray); 
    command.setFlags(FastFourierTransformCommandFlags.FAST_FOURIER_TRANSFORM.getValue() 
            | FastFourierTransformCommandFlags.GRAY.getValue()); 
    command.run(image); 
 
    FastFourierTransformCommand invCommand = new FastFourierTransformCommand(ftArray, 
            FastFourierTransformCommandFlags.INVERSE_FAST_FOURIER_TRANSFORM.getValue() 
                    | FastFourierTransformCommandFlags.GRAY.getValue() 
                    | FastFourierTransformCommandFlags.SCALE.getValue() 
                    | FastFourierTransformCommandFlags.BOTH.getValue()); 
    invCommand.run(image); 
 
    // Save the image 
    String outputFileName = combine(LEAD_VARS_IMAGES_DIR, "FourierTransform_constructorResult.jpg"); 
    codecs.save(image, outputFileName, RasterImageFormat.JPEG, 0); 
 
    System.out.println("Command run and image saved to " + outputFileName); 
    assertTrue(new File(outputFileName).exists()); 
} 
Requirements

Target Platforms

Help Version 23.0.2024.3.3
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.ImageProcessing.Core Assembly

Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.