Grid FFT intuition
A grid is made of two orthogonal families of parallel lines. Each family is strongly periodic, so most of its energy lands in a few
discrete frequency bins, producing bright peaks in the spectrum.
If the grid has \(c\) cells across an \(N\)-pixel image, the fundamental repetition is about \(c\) cycles across the image,
so the strongest peaks tend to appear near radius \(r \approx c\) (in FFT bins).
Increasing “Grid cells across” makes the spacing smaller (higher frequency), so peaks move farther from the center.
Rotating the grid rotates the peak locations by the same angle.
Gaussian FFT intuition
Independent (i.i.d.) Gaussian noise is (approximately) white: in expectation it has similar power at all spatial frequencies.
In the 2D FFT, that means there is no preferred radius or angle, so the spectrum has a roughly isotropic (directionless) appearance.
For a finite \(N\times N\) image, each frequency bin is a random draw, so the spectrum looks speckled rather than perfectly flat.
The log-power display compresses dynamic range, which visually turns that speckle into a more uniform “cloud”.
Perlin Noise FFT intuition
Perlin noise is smooth / correlated, meaning nearby pixels are similar. Smooth variation corresponds to low spatial frequencies,
so the spectrum is brightest near DC (the center after shifting) and typically rolls off as you move outward.
With multiple octaves (fBm), you still see a low-frequency bias, but with additional mid/high-frequency texture.
What do the 1D profiles mean?
The FFT image is 2D, but sometimes it’s easier to read a few 1D summaries.
The three profile plots (in the section above) are computed from the same shifted log-power spectrum:
Radial average (power vs radius): for each radius \(r\) (distance from the center / DC, in FFT bins), we average spectrum values on the ring.
Since radius corresponds to frequency magnitude, this shows how much energy lives at low vs high spatial frequencies.
Example intuition: smooth (Perlin) noise concentrates near small \(r\); a fine grid produces bumps at larger \(r\) where its peaks sit.
Axis cuts (horizontal + vertical slices): we take the spectrum row and column through the center.
This emphasizes components aligned with the image axes. For a perfectly axis-aligned grid you’ll see strong spikes along these cuts;
rotating the grid moves energy off-axis, so these particular cuts may weaken even though the 2D spectrum still has strong peaks.
Radial peakiness (top percentile on each ring): for each radius \(r\), we look at the high end of spectrum values on that ring
(here: the \(98\)th percentile, i.e. roughly “top \(2\%\)”). This is similar in spirit to taking a max, but it’s a bit more robust:
a single outlier pixel won’t dominate as easily.
On the Radial peakiness plot, there are two overlaid curves:
Blue = ring mean \(\mu(r)\): this is the same radial average as the first plot, shown again here as a baseline.
Orange = \(98\)th-percentile ring value \(p_{98}(r)\): for each radius \(r\), collect all spectrum samples whose distance from DC rounds to \(r\),
sort them, and read off the value at the \(98\)th percentile. If a ring contains a few very bright frequency bins (sharp FFT peaks),
\(p_{98}(r)\) will jump upward at exactly those radii.
The key signal is the gap between blue and orange. For a grid, energy is concentrated into a few bins on a ring (peaks), so
\(p_{98}(r)\) can be much larger than \(\mu(r)\) at the grid’s fundamental radius (and often its harmonics).
For noise, ring values are less concentrated into a few spikes, so the blue curve tends to track closer to the orange curve.
Period rings on the FFT image: each ring marks an approximate constant spatial period.
If the FFT size is \(N\times N\) and a peak lies at radius \(r\) bins from the center, its dominant spatial period is roughly \(\text{period} \approx N/r\) pixels.
(For this page with \(N=256\): \(r=32\Rightarrow\) \(\approx 8\)px period; \(r=64\Rightarrow\) \(\approx 4\)px; \(r=128\Rightarrow\) \(\approx 2\)px.)
For an axis-aligned grid with “Grid cells across” \(=c\), the fundamental peaks often appear near \(r\approx c\) (about \(c\) cycles across the image).
Detecting tiling and edge artifacts with the FFT
The FFT is a powerful diagnostic for unwanted periodic structure. Artifacts that repeat in the image (or in how it’s produced)
concentrate energy into localized peaks at specific frequency bins.
Tiling / repeating textures: if an image is formed by repeating a tile of size \(T_x\times T_y\), then the image contains strong periodicities
at about \(k_x\approx N/T_x\) and \(k_y\approx N/T_y\) (and harmonics). In the shifted spectrum, this shows up as bright symmetric peaks
at a fixed radius (often multiple radii for harmonics). The peak angle indicates the dominant repetition direction.
Seams / grid boundaries: a faint seam every \(T\) pixels is still periodic, so it can create a comb of peaks along the axis normal to the seam.
If the seam is mainly vertical (a jump across \(x\)), energy tends to concentrate along the \(k_x\) direction; for horizontal seams it concentrates along \(k_y\).
Edge artifacts (FFT assumes wrap-around): a DFT treats the image as if it repeats outside the boundary. If the left/right or top/bottom edges do not match,
the implied wrap-around creates a sharp discontinuity at the boundary. Sharp discontinuities inject broad high-frequency energy, often visible as
streaks or elevated intensity across many bins.
A common mitigation is to apply a window (e.g. Hann/Hamming) before the FFT to reduce edge discontinuities; the trade-off is slightly blurrier peaks.