if (~exist('epsilon ',' var '))
ε= 0.000000 1;
end
if(is empty(ε))
ε= 0.000000 1;
end
if (~exist('win_size ',' var '))
win _ size = 1;
end
if (isempty(win_size))
win _ size = 1;
end
neb_size=(win_size*2+ 1)^2;
[h, w, c]= size (i);
n = h; m = w;
img _ size = w * h;
consts=imerode(consts,ones(win _ size * 2+ 1));
indsM = shape([ 1:img _ size],h,w);
tlen=sum(sum( 1-consts(win_size+ 1:end-win_size,win_size+ 1:end-win_size)))*(neb_size^2);
row_inds=zeros(tlen, 1);
col_inds=zeros(tlen, 1);
vals=zeros(tlen, 1);
len = 0;
For j= 1+win_size:w-win_size.
for I = win _ size+ 1:h-win _ size
if (consts(i,j))
continue
end
win _ inds = indsM(I-win _ size:I+win _ size,j-win _ size:j+win _ size);
win _ inds = win _ inds(:);
winI=I(i-win_size:i+win_size,j-win_size:j+win_size,);
winI = shape(winI,neb_size,c);
win_mu=mean(winI, 1)';
win _ var = inv(winI ' * winI/Neb _ size-win _ mu * win _ mu '+epsilon/Neb _ size * eye(c));
winI=winI-repmat(win_mu ',neb_size, 1);
tvals =( 1+winI * win _ var * winI ')/Neb _ size;
row_inds( 1+len:neb_size^2+len)=reshape(repmat(win_inds, 1,neb_size), ...
neb_size^2, 1);
col_inds( 1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size, 1), ...
neb_size^2, 1);
vals( 1+len:neb_size^2+len)=tvals(:);
len=len+neb_size^2;
end
end
vals = vals( 1:len);
row _ inds = row _ inds( 1:len);
col _ inds = col _ inds( 1:len);
A=sparse(row_inds,col_inds,vals,img_size,img _ size);
sumA=sum(A,2);
A=spdiags(sumA(:),0,img_size,img _ size)-A;