JA EN

Image Processing in the Frequency Domain - Practical FFT and DCT Analysis and Filtering

· 9 min read

What is the Frequency Domain - Differences from Spatial Domain and Why Transform

Image processing has two fundamental approaches: spatial domain and frequency domain. In the spatial domain, pixel values are manipulated directly, while in the frequency domain, images are represented as superpositions of sinusoidal waves, allowing individual frequency components to be manipulated independently.

Why process in the frequency domain: Spatial domain convolution becomes computationally expensive as kernel size increases. For a 1024x1024 image with a 64x64 filter, spatial convolution requires approximately 4.3 billion multiplications, while frequency domain processing uses FFT (O(N log N)) plus element-wise multiplication, achieving dramatic speedup.

Intuitive understanding of frequency: In images, "low frequency" represents gradual brightness changes (backgrounds, large structures), while "high frequency" represents rapid changes (edges, textures, noise). Uniform regions consist only of low-frequency components, while fine textures contain significant high-frequency content.

This decomposition enables intuitive noise removal (cutting high frequencies), edge enhancement (boosting high frequencies), and compression (removing unnecessary frequency components). JPEG compression uses DCT precisely because human vision is less sensitive to high-frequency components, enabling efficient data reduction.

Discrete Fourier Transform and FFT - Image Spectrum Analysis

The Discrete Fourier Transform (DFT) decomposes finite-length discrete signals into frequency components. Applying 2D DFT to images yields amplitude and phase for each spatial frequency. FFT (Fast Fourier Transform) computes DFT in O(N log N) time complexity.

2D DFT computation: For an MxN image f(x,y), the DFT is defined as F(u,v) = ΣΣ f(x,y) × exp(-j2π(ux/M + vy/N)). The result is a complex array where amplitude |F(u,v)| represents frequency component strength and phase arg(F(u,v)) preserves positional information.

Python/OpenCV implementation:

import numpy as np

dft = np.fft.fft2(image)

dft_shift = np.fft.fftshift(dft)

magnitude = 20 * np.log10(np.abs(dft_shift) + 1)

The fftshift operation moves the DC component (frequency 0, average brightness) to the center, essential for spectrum visualization. Logarithmic scale display is necessary because the amplitude difference between DC and high-frequency components spans several orders of magnitude.

Reading the spectrum: The center represents low frequencies, outer regions represent high frequencies. Horizontal edges appear on the vertical axis, vertical edges on the horizontal axis. Periodic patterns (textures, moiré) appear as peaks at specific positions, enabling noise identification and removal. FFT of a 1024x1024 image takes approximately 10ms on modern CPUs.

Discrete Cosine Transform - The Core Technology Behind JPEG Compression

The Discrete Cosine Transform (DCT) is the real-valued version of the Fourier transform and the most important transform in image compression. It forms the foundation of major compression standards including JPEG, MPEG, and H.264/H.265, making it essential knowledge for image processing engineers.

DCT vs DFT differences: DFT outputs complex numbers while DCT outputs only real numbers. DFT assumes periodic signals causing boundary discontinuities, while DCT performs even-symmetric extension eliminating boundary artifacts and achieving superior energy compaction. This means the same information can be represented with fewer coefficients, making it ideal for compression.

DCT application process in JPEG:

Quality vs compression ratio tradeoff: JPEG quality parameter (1-100) is a scaling factor for the quantization table. Quality 75 achieves approximately 1/10 compression, quality 50 achieves approximately 1/20. Above quality 85, degradation is virtually imperceptible to human eyes.

Python DCT computation: from scipy.fft import dctn, idctn provides N-dimensional DCT. OpenCV offers cv2.dct() for 2D-DCT but requires float32 input. The 8x8 block DCT requires only about 200 additions and multiplications for 64 points, making it extremely lightweight.

Frequency Filtering - Designing Low-pass, High-pass, and Band-pass Filters

Frequency domain filtering is achieved by multiplying the spectrum with a mask (filter function). It is mathematically equivalent to spatial domain convolution but faster for large kernel sizes.

Ideal filter: A rectangular filter that completely blocks frequencies beyond cutoff D0. For low-pass, only components where D(u,v) ≤ D0 pass through. However, the abrupt cutoff causes ringing (Gibbs phenomenon), producing ring-shaped artifacts in the image. Not practical for real applications.

Butterworth filter: Defined as H(u,v) = 1 / (1 + (D(u,v)/D0)^(2n)), providing smooth cutoff characteristics. Higher order n produces steeper cutoff. Order n=2 offers practical balance, enabling effective filtering while suppressing ringing artifacts.

Gaussian filter: Defined as H(u,v) = exp(-D(u,v)² / (2D0²)). Has the smoothest cutoff characteristics with absolutely no ringing. Equivalent to spatial domain Gaussian blur.

Implementation steps:

Band-pass filter: Passes only specific frequency bands, constructed as the difference between low-pass and high-pass filters. Effective for removing periodic noise (moiré, power line noise). Notch filters are specialized band-reject filters that remove only specific spectral peaks corresponding to periodic noise sources.

Practical Applications - Noise Removal, Edge Detection, Image Restoration

Practical applications of frequency domain processing are presented with concrete code examples and numerical results. Many tasks that are difficult in the spatial domain become intuitive and efficient in the frequency domain.

Periodic noise removal: Periodic noise patterns in scanned or sensor images appear as distinct peaks in the spectrum. Placing notch filters (circular masks with radius 5-10 pixels) at these peak positions removes the noise. While spatial domain filters struggle with complete periodic noise removal, frequency domain processing enables precise elimination.

Wiener filter for image restoration: Inverse filtering to restore images degraded by blur or defocus. For degradation model G = H × F + N (H: degradation function, N: noise), the Wiener filter W = H* / (|H|² + K) is applied. K estimates the noise-to-signal ratio, typically ranging from 0.001 to 0.01.

Homomorphic filtering: Separates images into illumination (low frequency) and reflectance (high frequency) components to correct non-uniform lighting. The process involves taking the logarithm, applying FFT, applying a filter that suppresses low frequencies and enhances high frequencies, then inverse FFT and exponentiation. This effectively reveals details hidden in dark shadows.

Performance comparison: For a 64x64 Gaussian filter on a 1024x1024 image, spatial convolution takes approximately 850ms while FFT-based filtering takes approximately 25ms, achieving 34x speedup. However, for small kernels (3x3, 5x5), spatial domain is faster. The break-even point is approximately kernel size 15x15.

Comparison with Wavelet Transform and Modern Trends

Beyond FFT/DCT, wavelet transforms are another important frequency analysis tool. Understanding each transform's characteristics and selecting appropriately for the task is crucial in practice. The role of frequency domain processing in the deep learning era is also discussed.

Wavelet transform advantages: FFT provides only frequency information, losing spatial information about where specific frequencies occur. Wavelet transforms provide time-frequency analysis (spatial-frequency for images), capturing local frequency characteristics. JPEG 2000 adopts wavelet transforms, achieving high-quality compression without block artifacts.

Choosing between transforms:

Integration with deep learning: Recent research implements CNN convolution layers in the frequency domain. FFC (Fast Fourier Convolution) efficiently achieves large receptive fields, showing excellent performance in image inpainting tasks. Additionally, adding frequency domain features as CNN inputs has been reported to improve texture recognition accuracy.

Library selection for implementation: NumPy's np.fft is general-purpose, but PyFFTW (FFTW wrapper) is 2-3x faster for large images. For GPU processing, CuPy's cupyx.scipy.fft or PyTorch's torch.fft are available, offering 10-50x speedup in batch processing. For real-time processing, OpenCV's cv2.dft() is well-optimized for single image operations.

Related Articles

Deep Dive into Image Compression Algorithms - DCT, Wavelet Transform, and Predictive Coding

In-depth explanation of core image compression technologies. Understand the mathematical principles behind JPEG's DCT, JPEG 2000's wavelet transform, H.265/AV1 predictive coding, and entropy coding.

Image Noise Reduction Principles and Practice - Complete Guide to Digital Photo Denoising

From noise generation causes to removal algorithms and practical workflows. Learn how to handle noise from high-ISO and low-light photography effectively.

Fourier Filtering for Noise Removal - Image Processing in the Frequency Domain

Explains noise removal using Fourier transforms. Covers DFT principles, low-pass/high-pass filter design, notch filters for periodic noise, and Python implementation.

Wavelet Transform and JPEG 2000 - Multi-Resolution Analysis for Image Compression

From wavelet transform principles to JPEG 2000 compression algorithms. Covers DWT, subband coding, and EBCOT mechanisms with practical examples.

Dithering Techniques - Types and Applications for Representing Gradients with Limited Colors

Compare error diffusion, Bayer dithering, and blue noise techniques. Covers principles, characteristics, and applications from retro aesthetics to printing.

Image Deblurring Principles and Practice - From Motion Blur to Defocus Recovery

Systematic guide to image deblurring techniques covering Wiener filtering, blind deconvolution, and state-of-the-art deep learning methods with implementation details.

Related Terms