52 lines
1.1 KiB
Matlab
52 lines
1.1 KiB
Matlab
clear; close all; clc;
|
|
|
|
img = imread('pavian.png'); % Choose any picture you like here
|
|
img = rgb2gray(img);
|
|
|
|
%% Display image
|
|
figure; subplot(131);
|
|
imshow(img);
|
|
title('Ausgangsbild');
|
|
|
|
%% FFT
|
|
fft2d = fft2(img);
|
|
|
|
% Display the FFT image.
|
|
subplot(132);
|
|
imshow(log(fftshift(abs(fft2d))), []);
|
|
title('2D-FFT');
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%
|
|
|
|
% Approach: We want to remove the low frequencies (high pass filter) to
|
|
% keep the areas of the image where the lightness changes relative to
|
|
% nearby pixels
|
|
|
|
% Shift FFT so low frequencies are in the center
|
|
F = fftshift(fft2d);
|
|
|
|
% Get image size
|
|
[M, N] = size(F);
|
|
|
|
% Radius of how much to remove
|
|
r = 25;
|
|
|
|
% We cut out the center of the fft low frequencies
|
|
H = ones(M, N);
|
|
H(M/2-r:M/2+r, N/2-r:N/2+r) = 0;
|
|
|
|
% Apply filter
|
|
F_filtered = F .* H;
|
|
|
|
% Shift back
|
|
fft2d = ifftshift(F_filtered);
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
%% IFFT to obtain filtered image
|
|
img_filtered = ifft2(fft2d);
|
|
subplot(133);
|
|
imshow(real(img_filtered), []);
|
|
title('Gefiltertes Ausgangssignal');
|