0% found this document useful (0 votes)
56 views9 pages

Butterworth: All All 'Lena - BMP'

The document contains code to apply different types of low pass and high pass filters to an image. It loads an image, takes its FFT, applies Butterworth, Gaussian and ideal filters by multiplying the FFT with the filter response, and performs inverse FFT to obtain the filtered image. Low pass filters like Butterworth and Gaussian are designed to pass low frequencies below a cutoff and attenuate higher frequencies. High pass filters are designed to do the opposite - pass higher frequencies and attenuate lower frequencies below a cutoff.

Uploaded by

Hajer Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
56 views9 pages

Butterworth: All All 'Lena - BMP'

The document contains code to apply different types of low pass and high pass filters to an image. It loads an image, takes its FFT, applies Butterworth, Gaussian and ideal filters by multiplying the FFT with the filter response, and performs inverse FFT to obtain the filtered image. Low pass filters like Butterworth and Gaussian are designed to pass low frequencies below a cutoff and attenuate higher frequencies. High pass filters are designed to do the opposite - pass higher frequencies and attenuate lower frequencies below a cutoff.

Uploaded by

Hajer Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Butterworth

clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 4;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Butterworth filter.
filter1(i,j)= 1/(1 + (dist/180)^(2*n));
filter2(i,j) = 1/(1 + (dist/80)^(2*n));
filter3(i,j)= 1.0 - filter2(i,j);
filter3(i,j) = filter1(i,j).*filter3(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

Gaussian
clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 4;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Gaussian filter.
filter1(i,j) = exp(-dist^2/(2*180^2));
filter2(i,j) = exp(-dist^2/(2*80^2));
filter3(i,j) = 1.0 - filter2(i,j);
filter3(i,j) = filter1(i,j).*filter3(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

Ideal
clear all;
close all;
clc
ima=imread('lena.bmp');
ima = double(ima);
figure (1)
imshow(ima,[]);
imafft = fftshift(fft2(fftshift(ima)));
% Fourier Spectrum of Image
imafft2 = fft2(ima);
imafft3 = fftshift(imafft2);
s = size(ima);
ma=max(max((imafft)));
maxr = 0.5*sqrt(s(1)^2+s(2)^2);
cutoff1 = maxr*80;
cutoff2 = maxr*180;
c=1;
for i = 1 : s(1)
for j = 1 : s(2)
r = sqrt((i-1-s(1)/2)^2+(j-1-s(2)/2)^2);
if( r < 80)
z(i,j) = 0;
else
if( r > 180)
z(i,j) = 0;
else
z(i,j) =255;
end
end
end
end
% Plots
figure (2)
imafft=imafft.*z/255;
ima_out = fftshift(ifft2(fftshift(imafft)));
ima_out =ima_out-ima;
fftshow(ima_out,'abs');
figure (3)
fftshow(imafft3,'log');
figure (4)
fftshow(z,'log');

Ideal low pass filter


clear all;
close all;
clc
ima=imread('lena.bmp');
ima = double(ima);
figure (1)
imshow(ima,[]);
imafft = fftshift(fft2(fftshift(ima)));
% Fourier Spectrum of Image
imafft2 = fft2(ima);
imafft3 = fftshift(imafft2);
s = size(ima);
[M N]=size(ima);
ma=max(max((imafft)));
maxr = 0.5*sqrt(s(1)^2+s(2)^2);
cutoff1 = maxr*80;
% cutoff2 = maxr*180;
Imf=fft2(ima);
D0=80
for i=1:M
for j=1:N
D=sqrt(i^2+j^2);
if D<D0
H(i,j)=1;
else
H(i,j)=0;
end
G(i,j)=Imf(i,j)*H(i,j);
end
end
F=ifft2(G);
% Plots
figure (2)
imafft=imafft.*G/255;
ima_out = fftshift(ifft2(fftshift(imafft)));
imshow(F,[]);
figure (3)
fftshow(imafft3,'log');
figure (4)
fftshow(G,'log');

Gaussian

low pass

clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 4;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Gaussian filter.
filter1(i,j) = exp(-dist^2/(2*80^2));
% filter2(i,j) = exp(-dist^2/(2*80^2));
%filter3(i,j) = 1.0 - filter2(i,j);
filter3(i,j) = filter1(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

Butterworth
clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 2;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Butterworth filter.
filter1(i,j)= 1/(1 + (dist/80)^(2*n));
%filter2(i,j) = 1/(1 + (dist/0)^(2*n));
% filter3(i,j)= 1.0 - filter2(i,j);
filter3(i,j) = filter1(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

lowpass

Ideal high pass filter


clear all;
close all;
clc
ima=imread('lena.bmp');
ima = double(ima);
figure (1)
imshow(ima,[]);
imafft = fftshift(fft2(fftshift(ima)));
% Fourier Spectrum of Image
imafft2 = fft2(ima);
imafft3 = fftshift(imafft2);
s = size(ima);
ma=max(max((imafft)));
maxr = 0.5*sqrt(s(1)^2+s(2)^2);
cutoff1 = maxr*0;
cutoff2 = maxr*80;
c=1;
for i = 1 : s(1)
for j = 1 : s(2)
r = sqrt((i-1-s(1)/2)^2+(j-1-s(2)/2)^2);
if(r>=80)
z(i,j) = 255;
else
z(i,j) = 0;
end
end
end
figure (2)
imafft=imafft.*z/255;
F=ifft2(imafft);
imshow(F);
ima_out = fftshift(ifft2(fftshift(imafft)));
ima_out =ima_out-ima;
figure (3)
fftshow(imafft3,'log');
figure (4)
fftshow(z,'log');

Gaussian

high pass

clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 4;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Gaussian filter.
%filter1(i,j) = exp(-dist^2/(2*0^2));
filter2(i,j) = exp(-dist^2/(2*80^2));
filter3(i,j) = 1.0 - filter2(i,j);
%filter3(i,j) = filter1(i,j).*filter3(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

Butterworth
clear all;
close all;
clc
micro = imread('lena.bmp');
micro = double(micro);
[nx ny] = size(micro);
u = micro;
micro = uint8(u);
imwrite(micro,'lena1.bmp');
fftu = fft2(u,2*nx-1,2*ny-1);
fftu = fftshift(fftu);
figure(1)
imshow(micro,[]);
figure(2)
fftshow(fftu,'log')
% Initialize filter.
filter1 = ones(2*nx-1,2*ny-1);
filter2 = ones(2*nx-1,2*ny-1);
filter3 = ones(2*nx-1,2*ny-1);
n = 2;
for i = 1:2*nx-1
for j=1:2*ny-1
dist = ((i-(nx+1))^2 + (j-(ny+1))^2)^.5;
% Use Butterworth filter.
filter1(i,j)= 1/(1 + (80/dist)^(2*n));
%filter2(i,j) = 1/(1 + (dist/0)^(2*n));
% filter3(i,j)= 1.0 - filter2(i,j);
filter3(i,j) = filter1(i,j);
end
end
% Update image with passed frequencies.
fil_micro = fftu + filter3.*fftu;
figure(3)
fftshow(filter3,'log')
fil_micro = ifftshift(fil_micro);
fil_micro = ifft2(fil_micro,2*nx-1,2*ny-1);
fil_micro = real(fil_micro(1:nx,1:ny));
fil_micro = uint8(fil_micro);
figure(4)
imshow(fil_micro,[])

high pass

You might also like