%
% 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 [dE,dW,dS,dN]=hor_ver_dis_boundary_fast(S)

S=logical(S);

[H,V]=size(S);

dN=zeros(H,V);
dS=dN;
dE=dN;
dW=dN;

[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);

for i=xmin:xmax
    count=0;
    for j=ymin:ymax
        count=S(i,j)*(count+1);
        dW(i,j)=S(i,j)*(count-1);
    end
end

for i=xmin:xmax
    count=0;
    for j=ymax:-1:ymin
        count=S(i,j)*(count+1);
        dE(i,j)=S(i,j)*(count-1);
    end
end
            
for j=ymin:ymax
    count=0;
    for i=xmin:xmax
        count=S(i,j)*(count+1);
        dN(i,j)=S(i,j)*(count-1);
    end
end

for j=ymin:ymax
    count=0;
    for i=xmax:-1:xmin
        count=S(i,j)*(count+1);
        dS(i,j)=S(i,j)*(count-1);
    end
end

%%%%%%%%
