Linear Filter :
Linear filtering technique is used for reducing random noise, sharpening the edges and correcting unequal illuminations.
Linear filtering technique is used for reducing random noise, sharpening the edges and correcting unequal illuminations.
The procedure is carried out by filtering the image by correlation with an appropriate filter kernel. The value of output pixel is calculated as a weighted sum of neighboring pixels.
MATLAB CODE:
A=imread('eight.tif');
figure,imshow(A);
title('Original Image');
corr=[0 0.5 0.5;-1 0.5 0.2; 0.4 0.2 0;];%corr=[0.5% 0.4% 0.1];%corr=ones(5,5)/25;
%To pad the input image with zeros based on the kernel size.
Array padding can also be done using matlab built_in function padarray.
Example:
Let M=[4 5 6; 1 1 4; 7 8 8;];
M= [ 4 5 6
1 1 4
7 8 8]
M1=padarray(M,[1 1])
%Pad with zeros on all sides
M1 =
0 0 0 0 0
0 4 5 6 0
0 1 1 4 0
0 7 8 8 0
0 0 0 0 0
>> M2=padarray(M,[2 2])
%pad with two rows and columns of zeros on all sides
M2 =
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 4 5 6 0 0
0 0 1 1 4 0 0
0 0 7 8 8 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
>> M3=padarray(M,[1 2])
%Pad 1 row and 2 columns with zeros on all sides
M3 =
0 0 0 0 0 0 0
0 0 4 5 6 0 0
0 0 1 1 4 0 0
0 0 7 8 8 0 0
0 0 0 0 0 0 0
Array padding can also be done using matlab built_in function padarray.
Example:
Let M=[4 5 6; 1 1 4; 7 8 8;];
M= [ 4 5 6
1 1 4
7 8 8]
M1=padarray(M,[1 1])
%Pad with zeros on all sides
M1 =
0 0 0 0 0
0 4 5 6 0
0 1 1 4 0
0 7 8 8 0
0 0 0 0 0
>> M2=padarray(M,[2 2])
%pad with two rows and columns of zeros on all sides
M2 =
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 4 5 6 0 0
0 0 1 1 4 0 0
0 0 7 8 8 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
>> M3=padarray(M,[1 2])
%Pad 1 row and 2 columns with zeros on all sides
M3 =
0 0 0 0 0 0 0
0 0 4 5 6 0 0
0 0 1 1 4 0 0
0 0 7 8 8 0 0
0 0 0 0 0 0 0
pad1=size(corr,1)-1;pad2=size(corr,2)-1;output=uint8(zeros(size(A)));if(size(corr,1)==1)B=zeros(size(A,1),size(A,2)+pad2);m=0;n=floor(size(corr,2)/2);sz1=size(B,1);sz2=size(B,2)-pad2;elseif(size(corr,2)==1)B=zeros(size(A,1)+pad1,size(A,2));m=floor(size(corr,1)/2);n=0;sz1=size(B,1)-pad1;sz2=size(B,2);elseB=zeros(size(A,1)+pad1,size(A,2)+pad2);m=floor(size(corr,1)/2);n=floor(size(corr,2)/2);sz1=size(B,1)-pad1;sz2=size(B,2)-pad2;endfor i=1:size(A,1)for j=1:size(A,2)B(i+m,j+n)=A(i,j);endendszcorr1=size(corr,1);szcorr2=size(corr,2);for i=1:sz1for j=1:sz2sum=0;m=i;n=j;for x=1:szcorr1for y=1:szcorr2%The weighted sum of the neighborhood pixels is calculated.sum=sum+(B(m,n)*corr(x,y));n =n+1;endn=j;m=m+1;endoutput(i,j)= sum;endendfigure,imshow(output);title('After linear filtering');
%For the correlation kernel ones(5,5)/25;