1. Background:

I get an 128*128 2D one-channel noisy image as follows:

enter image description here

I get the shifted absolute values of 2D FFT result by the following Python code:

import numpy as np
import cv2


x = x.reshape(128, 128)
x_fft_abs = np.fft.fftshift(np.log(1 + np.abs(np.fft.fft2(x))))


enter image description here

2. My Question:

It seems that the latent clean image mainly consists of mid-/high-frequency components, since the lowest (central) and highest (marginal) values are significantly smaller.

However, since I know little about FFT and its properties, I do not know which type of noise affects the image, with regular (uniformly distributed) cross patterns (i.e., something like "+++++" in the 2D FFT abs result).

Could you please figure it out and tell me how to prevent it (or remove it) in my device?


1 Answer 1


You can see that your image has spatial correlation. The pixel intensity has periodicity in x and y directions giving rise to the grid in the FFT. The grid spacing tells you the periodicity.

Moreover there is a short range correlation giving rise to the bright ring. Again, the ring radius tells you the distance at which the correlation happens.

Given that these two features are pretty clean in the FFT one could make a complex-valued model for the Fourier Transform that contains these two contributions and fit that to the FFT. Then do an inverse FT of your model.

A simpler way would be to slightly bandpass filter the image in a way you describe. The lowpass cutoff distance could be around 1.5 pixel which passes the outer third of the FFT. The highpass cutoff could be at about 20 pixel to dump thr inner hole of the FFT. But this won't clean the image much, because you still keep most of the FFT in (and thus most of the noise, too).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.