You are on page 1of 3

clc;

clear;
close all;
%% Upload Image
A=imread(HW3_2_1)
A=double(A);

subplot(121)
imshow(A),title('Original Image')

%% Median Filter 7x7


%% 7x7 Windowing
m=7;
n=7;
%% Zero Padding
big_image=padarray(A,[floor(m/2),floor(n/2)]); %zero pad for
masking fit
output = zeros(r,c);
med_indx = round((m*n)/2); %MEDIAN INDEX

for i=1:size(big_image,1)-(m-1)
for j=1:size(big_image,2)-(n-1)

matrix=big_image(i:i+(m-1),j:j+(n-1),:);
mat_sort = sort(matrix(:));%tmp(:) converts 2D
matrix to 1D matrix
output(i,j) = mat_sort(med_indx);

end
end

inverse_filt = InverseFilter(NoiseImage1);
% call InverseFilter function
weiner_filt = WienerFilter(inverse_filt);
% call WienerFilter function
subplot(1,2,2); imshow(weiner_filt); title('Restored
Image');

%% InverseFilter Function
function InversFilterImage = InverseFilter(x)

x=double(x);
[rowSize,columnSize] = size(x);
k = 3;

row = 2*rowSize;
column = 2*columnSize;
zeros1 = zeros((row),(column));
zeros2 = zeros((row),(column));
%%%% padding %%%%
for i=1:rowSize
for j=1:columnSize
zeros1(i,j)=x(i,j);
end
end
%%%% center the transform %%%%
for i=1:rowSize
for j=1:columnSize
zeros2(i,j)=zeros1(i,j)*((-1)^(i+j));
end
end
%%% Fourier Transform %%%
fftZeros2=fft2(zeros2);

[x,y] = freqspace(column,'meshgrid');
z = zeros(row,column);
for i = 1:row
for j = 1:column
z(i,j) = exp(-k*((x(i,j).^2 + y(i,j).^2)^(5)));
end
end
filter = fftZeros2.*z;
%%%% Inverse Forier Transform %%%%
ifftFilter=ifft2(filter);

for i=1:row
for j=1:column
ifftFilter(i,j)=ifftFilter(i,j)*((-1)^(i+j));
end
end

%%% Removing The Padding %%%%


InversFilterImage = zeros(rowSize,columnSize);
for i=1:rowSize
for j=1:columnSize
InversFilterImage(i,j)=ifftFilter(i,j);
end
end
InversFilterImage=real(InversFilterImage);
InversFilterImage =uint8(InversFilterImage);
end

%% WienerFilter Function %%

function WienerFilterImage=WienerFilter(y)
WienerFilterImage= wiener2(y,[5 5]);
end

You might also like