Masked FFT and iFFT

The temul.signal_processing module allows one to choose the masking coordinates with temul.topotem.fft_mapping.choose_mask_coordinates() and easily return the masked fast Fourier Transform (FFT) with temul.topotem.fft_mapping.get_masked_ifft(). This can useful in various scenarios, from understanding the diffraction space spots and how they relate to the real space structure, to revealing domain walls and finding initial atom positions for difficult images.

Load the Example Image

>>> import temul.api as tml
>>> from temul.dummy_data import get_polarisation_dummy_dataset
>>> atom_lattice = get_polarisation_dummy_dataset(image_noise=True)
>>> image = atom_lattice.sublattice_list[0].signal
>>> image.plot()

Choose the Mask Coordinates

>>> mask_coords = tml.choose_mask_coordinates(image, norm="log")

Plot the Masked iFFT

>>> mask_radius = 10  # pixels, default is also 10 pixels
>>> image_ifft = tml.get_masked_ifft(image, mask_coords,
...                                     mask_radius=mask_radius)
>>> image_ifft.plot()

Reverse the masking with keep_masked_area=False

>>> image_ifft = tml.get_masked_ifft(image, mask_coords,
...                                     keep_masked_area=False)
>>> image_ifft.plot()

Plot the FFT with masks overlaid by using plot_masked_fft=True

>>> image_ifft = tml.get_masked_ifft(image, mask_coords,
...                                     plot_masked_fft=True)

If the input image is already a Fourier transform

>>> fft_image = image.fft(shift=True)  # Check out Hyperspy
>>> image_ifft = tml.get_masked_ifft(fft_image, mask_coords,
...                                     image_space='fourier')

Run FFT masking for Multiple Images

If you have multiple images, you can easily apply the mask to them all in a simple for loop. Of course, you can also save the images after plotting.

>>> from import load
>>> for file in files:
...     image = load(file)
...     image_ifft = tml.get_masked_ifft(image, mask_coords)
...     image_ifft.plot()