%----------------------------------------------------
% >>>Sistemi Avanzati per il Riconoscimento<<<
%    29 maggio 2015
%    - Shape Descriptors - Traccia
%---------------------------------------------------- 

clear all;
close all;
%----------------------------------------
% FUNZIONE DI BASE SPLINE QUADRATICA
%----------------------------------------
s=[0:0.01:3]';
Qx = [2]
B_0= qb_spline(s);
x_s = B_0.*Qx;
figure(1); set(gcf,'name','Funzione di base spline quadratica');
plot(s,x_s)
hold on;
scatter(3/2,Qx,50,[1,0,0],'marker','O','markerfacecolor',[1,0,0])


%----------------------------------------
% BASE COMPOSTA DA 4 FUNZIONI DI BASE 
%----------------------------------------
NB=4;
s=[0:0.01:3+NB-1]';
Qx = [1,5,3,1]';
x_s = zeros(length(s),1);
for n=0:NB-1
    x_s = x_s + qb_spline(s-n).*Qx(n+1);
end
figure(2); set(gcf,'name','B-spline quadratica, 4 funzioni base');
plot(s,x_s); hold on;
scatter(1/2+[1:NB],Qx,50,[1,0,0],'marker','O','markerfacecolor',[1,0,0])

%% -- ESAMINO I CONTRIBUTI DELLE SINGOLE FUNZIONI BASE -- %%
x_s_mul = zeros(length(s),NB);
for n=0:NB-1
    x_s_mul(:,n+1) = x_s_mul(:,n+1) + qb_spline(s-n).*Qx(n+1);
    plot(s,x_s_mul(:,n+1),'color',unifrnd(0,1,1,3)); 
end
% Nota che non si riescono a controllare i valori iniziali della curva.  


%-------------------------------------------------------
% BASE COMPOSTA DA 3 FUNZIONI DI BASE, UN NODO RIPETUTO
%-------------------------------------------------------
%% Curva parametrica r(s) su x e y;
Qx= [0 1 3 2 0]; % nodi in x;
Qy= [0 0 3 2 1]; % nodi in y;
nB = length(Qx);
L = nB;
iter=1;
xs = zeros(nB*100+1,1);
ys = zeros(nB*100+1,1);
%xs(iter)=0;ys(iter)=0;
s=[0:0.01:nB];
    for n=1:nB
    xs= xs+Qx(n).*qb_spline(mod(s-n,nB));
    ys= ys+Qy(n).*qb_spline(mod(s-n,nB));
    end
%     iter=iter+1;
%end
figure(3); set(gcf,'name','Curva 2D chiusa')
scatter(xs,ys); hold on
scatter(Qx,Qy,50,[1,0,0],'marker','O','markerfacecolor',[1,0,0])


%%%%%%%%%%%%%%%%% Analisi di forme in video sequenze
here = pwd
addpath(here);

input = '.\PRE\';
output = '.\RES\';
fprintf('-BG subtraction-\n');
SGimages(input,...
    output,...
    3,0.00001,0.99,0.001,14,12,18);
close all;

