Added filtering matlab file
This commit is contained in:
117
filtering/main.m
Normal file
117
filtering/main.m
Normal file
@@ -0,0 +1,117 @@
|
||||
clear
|
||||
close all
|
||||
clc
|
||||
format compact
|
||||
|
||||
%loading an image
|
||||
im = im2double(imread('dog.jpg'));
|
||||
|
||||
%making image spectrum for graphics
|
||||
imf_r = mat2gray(log(abs(fftshift(fft2(im(:,:,1))))+1));
|
||||
imf_g = mat2gray(log(abs(fftshift(fft2(im(:,:,2))))+1));
|
||||
imf_b = mat2gray(log(abs(fftshift(fft2(im(:,:,3))))+1));
|
||||
imf = cat(3, imf_r, imf_g, imf_b);
|
||||
|
||||
%graphics
|
||||
figure
|
||||
subplot(1,2,1); imshow(im)
|
||||
title('Original image')
|
||||
subplot(1,2,2); imshow(imf,[])
|
||||
title('Image spectrum (log)')
|
||||
|
||||
%dimensions of the image
|
||||
[r,c,colors] = size(im);
|
||||
|
||||
%making gaussian low-pass filter mask
|
||||
s = 0.1; %sigma in 1/pix
|
||||
sigma = 0.1*min([r c]);
|
||||
|
||||
h = fspecial('gaussian',[r c],sigma); %gaussian mask
|
||||
f = linspace(-0.5,0.5,c); %frequency grid
|
||||
|
||||
%graphics
|
||||
figure
|
||||
norm = max(max(h(r/2,:)))^-1; %normalizing coefficient
|
||||
plot(f,norm*h(r/2,:),'b')
|
||||
line([s s], [0 1], 'Color', 'r', 'LineWidth', 1)
|
||||
line(-[s s], [0 1], 'Color', 'r', 'LineWidth', 1)
|
||||
grid
|
||||
title(['Gaussian filter with \sigma = ',num2str(s),' pix^{-1}'])
|
||||
xlabel('frequency, pix^{-1}')
|
||||
|
||||
%graphics
|
||||
figure
|
||||
imshow(log(abs(h)+1),[])
|
||||
title('Gaussian mask in frequency domain')
|
||||
|
||||
%applying LP filter to channels spectra
|
||||
im1f_r = fftshift(fft2(im(:,:,1))).*h;
|
||||
im1f_g = fftshift(fft2(im(:,:,2))).*h;
|
||||
im1f_b = fftshift(fft2(im(:,:,3))).*h;
|
||||
|
||||
%getting image from spectra
|
||||
im1_r = mat2gray(abs(ifft2(ifftshift(im1f_r))));
|
||||
im1_g = mat2gray(abs(ifft2(ifftshift(im1f_g))));
|
||||
im1_b = mat2gray(abs(ifft2(ifftshift(im1f_b))));
|
||||
im1 = cat(3,im1_r,im1_g,im1_b);
|
||||
|
||||
%making image spectrum for graphics
|
||||
imf1_r = mat2gray(log(abs(fftshift(fft2(im1(:,:,1))))+1));
|
||||
imf1_g = mat2gray(log(abs(fftshift(fft2(im1(:,:,2))))+1));
|
||||
imf1_b = mat2gray(log(abs(fftshift(fft2(im1(:,:,3))))+1));
|
||||
imf1 = cat(3, imf1_r, imf1_g, imf1_b);
|
||||
|
||||
%graphics
|
||||
figure
|
||||
subplot(1,2,1); imshow(im1,[])
|
||||
title('Filtered image')
|
||||
subplot(1,2,2); imshow(imf1,[])
|
||||
title('Filtered image spectrum (log)')
|
||||
|
||||
%Fourier transform of gaussian mask
|
||||
hs = ifftshift(ifft2(h));
|
||||
|
||||
%graphics
|
||||
figure
|
||||
imshow(log(abs(hs)+1),[])
|
||||
title('Gaussian mask in spatial domain')
|
||||
|
||||
uncut = 11; %size of spatial domain mask
|
||||
cut = floor(11/2); %half-size of spatial domain mask
|
||||
|
||||
hs_cut = hs((r/2-cut+1):(r/2+cut+1),(c/2-cut+1):(c/2+cut+1)); %cut mask
|
||||
H = sum(sum(abs(hs_cut)))^-1*abs(hs_cut); %normalized mask
|
||||
|
||||
%grapahics
|
||||
figure
|
||||
plot(H(cut+1,:))
|
||||
grid
|
||||
title({['Cut Gaussian mask of size ', num2str(uncut) ,'x'...
|
||||
num2str(uncut)],[' in spatial domain']})
|
||||
|
||||
%applying mask to image
|
||||
im2 = imfilter(im, H);
|
||||
|
||||
%making image spectrum for graphics
|
||||
imf2_r = mat2gray(log(abs(fftshift(fft2(im2(:,:,1))))+1));
|
||||
imf2_g = mat2gray(log(abs(fftshift(fft2(im2(:,:,2))))+1));
|
||||
imf2_b = mat2gray(log(abs(fftshift(fft2(im2(:,:,3))))+1));
|
||||
imf2 = cat(3, imf2_r, imf2_g, imf2_b);
|
||||
|
||||
%graphics
|
||||
figurep
|
||||
subplot(1,2,1); imshow(im2,[])
|
||||
title('Filtered image')
|
||||
subplot(1,2,2); imshow(imf2,[])
|
||||
title('Filtered image spectrum (log)')
|
||||
|
||||
im3 = imfilter(im, H, 'circular'); % periodic boundary option
|
||||
|
||||
%graphics
|
||||
figure
|
||||
subplot(1,3,1); imshow(im1(1:50,1:50,:),[])
|
||||
title('Frequency processed image')
|
||||
subplot(1,3,2); imshow(im2(1:50,1:50,:),[])
|
||||
title({['Spatially processed image'],['Zero boundary option']})
|
||||
subplot(1,3,3); imshow(im3(1:50,1:50,:),[])
|
||||
title({['Spatially processed image'],['Periodic boundary option']})
|
||||
Reference in New Issue
Block a user