function [CorrCoeff, Stretch] = rescaleCorr(X, Y, opt)
% rescaleCorr
%   X   - First input 2D matrix.
%   Y   - Second input 2D matrix.
%   opt - Structure with fields:
%         * scale - Compression scale that refers to 100% compression.
%
% RETURN
%   CorrCoff    - Correlation coefficient for all tested stretches along
%                 the 1st dimension.
%   Strecth     - Tested strech ratios.
%
%   Copyright (C) 2015  Florian Raudies, 05/02/2015, Palo Alto, CA.
%   License, GNU GPL, free software, without any warranty.
%

nX1         = size(X,1);
nY1         = size(Y,1);
scale       = opt.scale;
nStretch    = 51;
CorrCoeff   = zeros(nStretch, 1);
Stretch     = linspace(0.6, 1.15, nStretch); % Range of stretch factors.

if nX1~=nY1,    
    X = interp1(linspace(-1,+1,nX1)',X,linspace(-scale,scale,nY1)','*linear');    
    Original    = linspace(-scale,scale,nY1);
    for iStretch = 1:nStretch,
        stretch                     = Stretch(iStretch);
        Rescale                     = linspace(-stretch,+stretch,nY1);
        YStretch                    = interp1(Rescale',Y,Original',...
                                              '*linear');
        YStretch(isnan(YStretch))   = 0;
        CorrCoeff(iStretch)         = corrCoeff(X,YStretch);
    end
    
    Stretch = 2*(Stretch - scale)/scale; % strech = 2/3 is 100%
else
    error('Matlab:IO','Only supports matching for the 1st dimension!');
end


function r = corrCoeff(X,Y)

    X = X(:);
    Y = Y(:);
    X = X - mean(X);
    Y = Y - mean(Y);
    r = sum(X.*Y)./(eps + sqrt(sum(X.^2).*sum(Y.^2)));