function[y]=ada(x)
ters=0;
matrix=uint8(x);
filtered=matrix;
[row ,col]=size(matrix);
for k=2:row-1
for l=2:col-1
clear tmp;
zd=0;
zd5=0;
count=0;
count3=0;
counte3=0;
tmp=matrix(k-1:k+1,l-1:l+1);
if tmp(2,2)==0 || tmp(2,2)==255
so=sort(tmp(:));
for g=1:9
if (so(g)==0 || so(g)==255)
zd=zd+1;
end
end
if zd<=4
filtered(k,l)=so(5);
else
if(k<=row-2 && k>=3 && l>=3 && l<=col-2)
tmp5=matrix(k-2:k+2,l-2:l+2);
so5=sort(tmp5(:));
for i5=1:25
if (so5(i5)==0 || so5(i5)==255)
zd5=zd5+1;
end
end
if zd5 <=12
filtered(k,l)=so5(13);
else
[count,ters]=meanen(so5);
if count == 0
filtered(k,l)=filtered(k,l-1);
else
newy=ters/count;
newx=fix(newy);
filtered(k,l)=newx;
end
end
else
for i3=1:9
if so(i3)~=0 && so(i3)~=255
count3=count3+1;
counte3=counte3+so(i3);
end
end
if count3==0
filtered(k,l)=filtered(k,l-1);
else
newy3=counte3/count3;
newe=fix(newy3);
filtered(k,l)=newe;
end
end
end
end
end
end
filtered(1,:)=filtered(2,:);
filtered(row,:)=filtered(row-1,:);
filtered(:,1)=filtered(:,2);
filtered(:,col)=filtered(:,col-1);
y=filtered;
end