# How Can I remove the Periodic Noise lines from Color image attached?

69 views (last 30 days)

Show older comments

Hy, I am trying to filter out the periodic lines in Colour image attached using FFT and IFFT and median filter. Can anybody help me in this please. The end result should be same colour picture but those grey lines gone or atlease faded away. Help will be appreciated

I am attaching the Picture and Code modified with the help of @Image Analyst.

% Demo to filter an image, with periodic ripple, in the Fourier domain.

clc; % Clear the command window.

close all; % Close all figures (except those of imtool.)

clear; % Erase all existing variables. Or clearvars if you want.

workspace; % Make sure the workspace panel is showing.

format long g;

format compact;

fontSize = 14;

%Read Image

grayImage = imread('Cereal_noise.png');

[rows, columns, numberOfColorBands] = size(grayImage);

if numberOfColorBands > 1

grayImage = rgb2gray(grayImage);

end

subplot(2, 3, 1);

imshow(grayImage, [0 255]);

title('Original Image', 'FontSize', fontSize);

set(gcf, 'units','normalized','outerposition',[0 0 1 1]); % Maximize figure.

% Compute the 2D fft.

frequencyImage = fftshift(fft2(grayImage));

% Take log magnitude so we can see it better in the display.

amplitudeImage = log(abs(frequencyImage));

minValue = min(min(amplitudeImage))

maxValue = max(max(amplitudeImage))

subplot(2, 3, 4);

imshow(amplitudeImage, []);

caption = sprintf('Notice the two spikes\nperpendicular to the periodic frequency');

title(caption, 'FontSize', fontSize);

axis on;

% zoom(10)

% Find the location of the big spikes.

amplitudeThreshold = 16;

brightSpikes = amplitudeImage > amplitudeThreshold; % Binary image.

subplot(2, 3, 5);

imshow(brightSpikes);

axis on;

title('Bright Spikes', 'FontSize', fontSize);

% Let user see the image.

promptMessage = sprintf('The image below shows the bright spikes.\nNow we will exclude the central spike.');

titleBarCaption = 'Continue?';

button = questdlg(promptMessage, titleBarCaption, 'Continue', 'Cancel', 'Continue');

if strcmpi(button, 'Cancel')

return;

end

% Exclude the central DC spike. Everything from row 115 to 143.

brightSpikes(115:143, :) = 0;

imshow(brightSpikes);

title('Bright spikes other than central spike', 'FontSize', fontSize);

promptMessage = sprintf('Now we will use these bright spikes to filter (mask) the spectrum.');

button = questdlg(promptMessage, titleBarCaption, 'Continue', 'Cancel', 'Continue');

if strcmpi(button, 'Cancel')

return;

end

% Filter/mask the spectrum.

frequencyImage(brightSpikes) = 0;

% Take log magnitude so we can see it better in the display.

amplitudeImage2 = log(abs(frequencyImage));

minValue = min(min(amplitudeImage2))

maxValue = max(max(amplitudeImage2))

subplot(2, 3, 5);

imshow(amplitudeImage2, [minValue maxValue]);

axis on;

title('Spikes zeroed out', 'FontSize', fontSize);

% zoom(10)

filteredImage = ifft2(fftshift(frequencyImage));

amplitudeImage3 = abs(filteredImage);

minValue = min(min(amplitudeImage3))

maxValue = max(max(amplitudeImage3))

subplot(2, 3, 6);

imshow(amplitudeImage3, [minValue maxValue]);

title('Filtered Image', 'FontSize', fontSize);

##### 0 Comments

### Accepted Answer

Image Analyst
on 30 Nov 2020

### More Answers (1)

sushanth govinahallisathyanarayana
on 30 Nov 2020

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!