function f =awmf(g,w_central,N,c)
%ADPMEDIAN Perform adaptive median filtering
%首先判断Smax是否符合要求: Smax应该是大于1的奇数
if nargin<2
w_central=99;
end
if nargin<3
N=5;
end
if nargin<4
c=20;
end
if (N <= 1)||(N/2 == round(N/2))||(N ~= round(N))
error('N must be an odd integer>1.')
end
[L,H]=size(g);
K=(N-1)/2;
g1=zeros(L+2*K,H+2*K);
g1(K+1:L+K,K+1:H+K)=g;
f=zeros(L,H);
for x=1:L
for y=1:H
% find the maximum window
gk=g1(x:x+N-1,y:y+N-1);
sigma=std2(gk);
m=mean2(gk);
w=zeros(N,N);
gl_v=[];
for i=1:N
for j=1:N
d=sqrt((K-i)^2+(K-j)^2);
w(i,j)=round(w_central-c*d*(sigma^2)/m);
gl_v=[gl_v ones(1,w(i,j))*gk(i,j)];
end
end
f(x,y)=median(gl_v);
end
end