CITE THIS NOTEBOOK: Amplitude and phase of a Fourier-transformed image by Markus van Almsick. Wolfram Community DEC 28 2022.
A centered spike as a test image (single channel):
In[]:=
spike=
;
Fourier amplitude and phase for an image with the origin at the top left corner:
fourier=Fourier[ImageData[spike]];
In[]:=
Image[Abs@fourier]//ImageAdjust
In[]:=
Image[Arg@fourier]/(2π)+1/2
You can move the origin to the image center by multiplying the Fourier transformed image with the corresponding phase factors:
fourierCentered=Exp[-πOuter[Plus,N[(#2-1)/#2]Range[0,#2-1],N[(#1-1)/#1]Range[0,#1-1]]&@@ImageDimensions[spike]]*Fourier[ImageData[spike]];
In[]:=
Image[Abs@fourierCentered]//ImageAdjust
In[]:=
Image[Arg@fourierCentered]/(2π)+1/2
Finally, to display the 0-frequency at the center of the spectrum, we move all the Fourier coefficients with RotateLeft:
CenteredfourierCentered=RotateLeft[Exp[-πOuter[Plus,N[(#2-1)/#2]Range[0,#2-1],N[(#1-1)/#1]Range[0,#1-1]]&@@ImageDimensions[spike]]*Fourier[ImageData[spike]],Reverse@Ceiling[ImageDimensions[spike]/2]];
In[]:=
Image[Abs@CenteredfourierCentered]//ImageAdjust
In[]:=
Image[Arg@CenteredfourierCentered]/(2π)+1/2
Test with a spike translated by 2 pixels to the right:
In[]:=
spike2=
;
CenteredfourierCentered=RotateLeft[Exp[-πOuter[Plus,N[(#2-1)/#2]Range[0,#2-1],N[(#1-1)/#1]Range[0,#1-1]]&@@ImageDimensions[spike2]]*Fourier[ImageData[spike2]],Reverse@Ceiling[ImageDimensions[spike2]/2]];
In[]:=
Image[Abs@CenteredfourierCentered]//ImageAdjust
In[]:=
Image[Arg@CenteredfourierCentered]/(2π)+1/2