0001 function y=nt_video_sns(x,nneighbors)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 if nargin<1; error('!'); end
0013
0014 if nargin<2||isempty(nneighbors);
0015 disp('default nneighbors = 10');
0016 nneighbors=10;
0017 end
0018
0019 [nframes,nrows,ncols]=size(x);
0020 x=x(:,:);
0021 y=nan(size(x));
0022
0023 closest=nt_proximity([nrows,ncols],nneighbors);
0024 for iPixel=1:size(closest,1)
0025
0026 xx=x(:,closest(iPixel,:));
0027
0028
0029 [V,D]=eig(xx'*xx); V=real(V); D=real(D);
0030 PCA_THRESH=10^-8;
0031 topcs=V(:,find(D/max(D) > PCA_THRESH));
0032 xxx=xx*topcs;
0033 b=( x(:,iPixel)'*xxx ) / (xxx'*xxx);
0034 y(:,iPixel)=xxx*b';
0035 end
0036 y=reshape(y,[nframes,nrows,ncols]);
0037
0038