[ImageJ-devel] Differences between .fft.FourierTransform and .fft2.FFT

Michael Ellis michael.ellis at dsuk.biz
Wed Dec 17 02:54:13 CST 2014

I am trying to reproduce example 

imglib2-tutorials Example6c


using the new net.imglib2.algorithm.fft2.FFT rather than the old deprecated net.imglib2.algorithm.fft.FourierTransform

The original example code does:

        // compute fourier transform of the template
        final FourierTransform< FloatType, ComplexFloatType> fft
                = new FourierTransform< FloatType, ComplexFloatType>(
                        template, new ComplexFloatType());
        Img< ComplexFloatType> templateFFT = fft.getResult();

Which produces an image of size templateFFT minX=0 minY=0 maxX=40 maxY=79

My new code looks like this:

            ImgFactory<ComplexFloatType> fftImgFactory = null;
            try {
                fftImgFactory = template.factory().imgFactory(new ComplexFloatType());
            } catch (IncompatibleTypeException ex) {
                fftImgFactory = null;

            // compute fourier transform of the template
            Img< ComplexFloatType> templateFFT2 = FFT.realToComplex(template, fftImgFactory);

Which produces an image of size templateFFT2 minX=0 minY=0 maxX=36 maxY=71

Also it looks like the image produced by the old FourierTransform and new FFT differ in that the results are shifted in X and Y.

Can anyone help?

In particular I want to achieve the image alignment functionality that is done in Example6c.java without using deprecated code.

Many thanks — Michael Ellis

More information about the ImageJ-devel mailing list