%
% Copyright (c) 2011, Kai Guo, Prakash Ishwar, and Janusz Konrad. All
% rights reserved.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are
% met:
%
% 1) Redistributions of source code must retain the above copyright
%    notice, this list of conditions and the following disclaimer.
%
% 2) Redistributions in binary form must reproduce the above copyright
%    notice, this list of conditions and the following disclaimer in the
%    documentation and/or other materials provided with the distribution.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
% A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
% HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
% SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
% LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
% DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
% THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
%

%extract features: temporal mean, spatial distance in x and y directions

function [dSE,dNW,dSW,dNE]=diag_dis_boundary_fast2(S)

S=logical(S);

[H,V]=size(S);

dNW=zeros(H,V);
dSE=dNW;
dNE=dNW;
dSW=dNW;

[m,n]=find(S~=0);

%  find the range of foreground pixels
%  |--------->y
%  |
%  |
%  *
%  x


xmin=min(m);
xmax=max(m);
ymin=min(n);
ymax=max(n);

%======================dNW==========================
for i=xmin:xmax
    count=0;
    i2=i;
    j2=ymin;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax        
          count=S(i2,j2)*(count+1);
          dNW(i2,j2)=S(i2,j2)*(count-1);
          i2=i2+1;
          j2=j2+1;
    end
end

for j=ymin:ymax
    count=0;
    i2=xmin;
    j2=j;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dNW(i2,j2)=S(i2,j2)*(count-1);
          i2=i2+1;
          j2=j2+1;
    end
end

%======================dSE==========================
 for i=xmin:xmax
    count=0;
    i2=i;
    j2=ymax;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dSE(i2,j2)=S(i2,j2)*(count-1);
          i2=i2-1;
          j2=j2-1;
    end
end

for j=ymin:ymax
    count=0;
    i2=xmax;
    j2=j;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dSE(i2,j2)=S(i2,j2)*(count-1);
          i2=i2-1;
          j2=j2-1;
    end
end

%======================dNE==========================
 for i=xmin:xmax
    count=0;
    i2=i;
    j2=ymax;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dNE(i2,j2)=S(i2,j2)*(count-1);
          i2=i2+1;
          j2=j2-1;
    end
end

for j=ymin:ymax
    count=0;
    i2=xmin;
    j2=j;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dNE(i2,j2)=S(i2,j2)*(count-1);
          i2=i2+1;
          j2=j2-1;
    end
end

%======================dSW==========================
 for i=xmin:xmax
    count=0;
    i2=i;
    j2=ymin;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dSW(i2,j2)=S(i2,j2)*(count-1);
          i2=i2-1;
          j2=j2+1;
    end
end

for j=ymin:ymax
    count=0;
    i2=xmax;
    j2=j;
    while i2>=xmin & i2<=xmax & j2>=ymin & j2<=ymax
          count=S(i2,j2)*(count+1);
          dSW(i2,j2)=S(i2,j2)*(count-1);
          i2=i2-1;
          j2=j2+1;
    end
end




