Sei sulla pagina 1di 5

close all;

clear all;

%% Parameters
method = 0; % 1 for Harris, 0 for Gabor
sigmat = 2; % sigma for time dimension
tau = 5;
sigma = 3;
POI = 600;
scale = sigma^2/2;
lucas_multi = 1;
nbins = 9;
num_of_centroids = 100;
n = 9;
m = 9;
N = 4;
s = 1.3;
%% Main function

super_test = [];
tic
parfor oo=1:9
if oo==1
L = readVideo('./samples/boxing/person16_boxing_d4_uncomp.avi',200,0);
elseif oo==2
L = readVideo('./samples/boxing/person21_boxing_d1_uncomp.avi',200,0);
elseif oo==3
L = readVideo('./samples/boxing/person25_boxing_d4_uncomp.avi',200,0);
elseif oo==4
L = readVideo('./samples/running/person09_running_d1_uncomp.avi',200,0);
elseif oo==5
L = readVideo('./samples/running/person15_running_d1_uncomp.avi',200,0);
elseif oo==6
L = readVideo('./samples/running/person23_running_d3_uncomp.avi',200,0);
elseif oo==7
L = readVideo('./samples/walking/person07_walking_d2_uncomp.avi',200,0);
elseif oo==8
L = readVideo('./samples/walking/person14_walking_d2_uncomp.avi',200,0);
else %% oo==9
L = readVideo('./samples/walking/person20_walking_d3_uncomp.avi',200,0);
end
L = im2double(L);

LoG = [];
H = [];
for i=1:N
mult_sigma = round(sigma*s^(i-1));
log = zeros(6*mult_sigma+1,6*mult_sigma+1,1);
log(:,:,1) = fspecial('log',6*mult_sigma+1,mult_sigma);
LoG(:,:,:,i) = mult_sigma^2 * abs(imfilter(L,log, 'symmetric'));
if method==1
%% Harris
fprintf('# %d: Starting Harris\n',oo)

k=0.005;
% [Lx,Ly,Lt] = imgradientxyz(L);
impulse_response = zeros(3,1,1);
impulse_response(:,1,1) = [1 0 -1];
Lx = convn(padarray(L,[1 0 0],'symmetric'),impulse_response,'valid');
impulse_response = zeros(1,3,1);
impulse_response(1,:,1) = [1 0 -1];
Ly = convn(padarray(L,[0 1 0],'symmetric'),impulse_response,'valid');

impulse_response = zeros(1,1,3);
impulse_response(1,1,:) = [1 0 -1];
Lt = convn(padarray(L,[0 0 1],'symmetric'),impulse_response,'valid');

gauss = zeros([5*mult_sigma, 5*mult_sigma, 1]);


gauss(:,:,1) = fspecial('gaussian',5*[mult_sigma
mult_sigma],mult_sigma);
gauss_time = zeros([1 1 5*sigmat+1]);
gauss_temp = fspecial('gaussian',5*[sigmat sigmat]+1,sigmat);
temp = gauss_temp(:,ceil(5*sigmat/2),1); %obtain 1D gaussian from a
slice of the 2D gaussian
gauss_time(1,1,:) = temp;

A = imfilter(Lx.^2,gauss,'symmetric');
A = padarray(A,[0 0 floor(length(gauss_time)/2)],'symmetric');
A = convn(A,gauss_time,'valid');

B = imfilter(Lx .* Ly,gauss,'symmetric');
B = padarray(B,[0 0 floor(length(gauss_time)/2)],'symmetric');
B = convn(B,gauss_time,'valid');

C = imfilter(Lx.*Lt,gauss,'symmetric');
C = padarray(C,[0 0 floor(length(gauss_time)/2)],'symmetric');
C = convn(C,gauss_time,'valid');

D = imfilter(Ly.^2,gauss,'symmetric');
D = padarray(D,[0 0 floor(length(gauss_time)/2)],'symmetric');
D = convn(D,gauss_time,'valid');

E = imfilter(Ly.*Lt,gauss,'symmetric');
E = padarray(E,[0 0 floor(length(gauss_time)/2)],'symmetric');
E = convn(E,gauss_time,'valid');

F = imfilter(Lt.^2,gauss,'symmetric');
F = padarray(F,[0 0 floor(length(gauss_time)/2)],'symmetric');
F = convn(F,gauss_time,'valid');

Det = -F.*(B.^2) + 2 *B.*C.*E - D.*(C.^2) - A.*(E.^2) + A.*D.*F;


Trace = A + D + F;
H(:,:,:,i) = Det - k*Trace.^3;

else
%% Gabor
fprintf('# %d: Starting Gabor\n',oo)
t=(-2*tau):(2*tau);
omega = 4/tau;

h = - cos(2*pi*omega*t) .* exp(-t.^2./(2.*tau.^2));
hev = zeros([1 1 length(t)]);
hev(1,1,:) = h./norm(h,1);

h = - sin(2*pi*omega*t) .* exp(-t.^2./(2.*tau.^2));
hodd = zeros([1 1 length(t)]);
hodd(1,1,:) = h./norm(h,1);

gauss = zeros([5*mult_sigma 5*mult_sigma 1]);


gauss(:,:,1) = fspecial('gaussian',5*[mult_sigma mult_sigma],3);
% Lg = convn(L,gauss,'valid');
Lg = imfilter(L,gauss,'symmetric');

Lg_padded = padarray(Lg,[0 0 floor(length(t)/2)],'symmetric');

H(:,:,:,i) = (convn(Lg_padded,hev,'valid')).^2 +
(convn(Lg_padded,hodd ,'valid')).^2;

end
end

% Find local max


Cond1 = (H == imdilate(H,strel('disk',1)));

Cond2=ones(size(Cond1));

if N>1
% analysis for multiscale
for i=1:N
if i==1
Cond2(:,:,:,1) = LoG(:,:,:,1)>LoG(:,:,:,2);
elseif i==N
Cond2(:,:,:,N) = LoG(:,:,:,N)>LoG(:,:,:,N-1);
else
Cond2(:,:,:,i) = (LoG(:,:,:,i)>LoG(:,:,:,i-1)) &
(LoG(:,:,:,i)>LoG(:,:,:,i+1));
end
end
end
finalrow = [];
finalcol = [];
finalv =[];
frames = [];
sigmas = [];

% find Point of interest


for i=1:N
mult_sigma = round(sigma*s^(i-1));
for fr=1:200
[row, col, v] = find(Cond1(:,:,fr,i).*Cond2(:,:,fr,i).*H(:,:,fr,i));

finalrow = [finalrow; row];


finalcol = [finalcol; col];
finalv = [finalv; v];
frames = [frames; fr*ones(length(row),1)];
sigmas = [sigmas; mult_sigma*ones(length(row),1)];
end
end

values = [finalcol finalrow sigmas frames];


[~,idx] = sort(finalv,'descend');
res = sort(values,1);
sortedvalues = values(idx,:);

fprintf('# %d: Feature Extraction has ended\n',oo)


% showDetection(L,sortedvalues(1:POI,1:4));
% continue

fprintf('# %d: Begining Histogram Calculations\n',oo)

test = [];
for i=1:POI
row = sortedvalues(i,2);
if row-2*scale<1
row_minus = 1;
row_plus = 4*scale+1;
elseif row+2*scale>120
row_plus = 120;
row_minus = 120 - 4*scale;
else
row_minus = row-2*scale;
row_plus = row+2*scale;
end

col = sortedvalues(i,1);
if col-2*scale<1
col_minus = 1;
col_plus = 4*scale+1;
elseif col+2*scale>160
col_plus = 160;
col_minus = 160 - 4*scale;
else
col_minus = col-2*scale;
col_plus = col+2*scale;
end
fr = sortedvalues(i,4);

[Gx, Gy] = imgradientxy(L(:,:,fr));


Gx = Gx(row_minus:row_plus, col_minus:col_plus);
Gy = Gy(row_minus:row_plus, col_minus:col_plus);

if fr==200
fr=fr-1;
end
[dx, dy] = Lucasmulti(L(:,:,fr), L(:,:,fr+1), 3, 0.05, lucas_multi);

dx = dx(row_minus:row_plus,col_minus:col_plus);
dy = dy(row_minus:row_plus,col_minus:col_plus);

% temporal = [OrientationHistogram(Gx,Gy,nbins,size(Gx))
OrientationHistogram(dx,dy,nbins,size(dx))];
superHOGF = [myOrientationHistogram(Gx,Gy,nbins,[n m])
myOrientationHistogram(dx,dy,nbins,[n m])];
% georgeHOGF = [george_myOrientationHistogram(Gx,Gy,nbins,size(Gx))
george_myOrientationHistogram(dx,dy,nbins,size(dx))];
%
% figure(111)
% plot(temporal)
% figure(222)
% plot(superHOGF)
% figure(333)
% plot(georgeHOGF)
% for i=1:size(temporal,1)
% for j=1:size(temporal,2)
% if isnan(temporal(i,j))
% [i,j]
% end
% end
% end

test(i,:) = superHOGF; %[myOrientationHistogram(Gx,Gy,nbins,size(Gx))


myOrientationHistogram(dx,dy,nbins,size(dx))];

end
super_test(oo,:,:) = test;

fprintf('# %d: Histogram Calculations are done\n',oo)

end
toc
fprintf('\nStarting Bag of Words!\n')
BO = MyBagOfWords(super_test,num_of_centroids);
fprintf('Bag of Words is done!\n')

file = fopen('results/num.txt','r');
num = fscanf(file,'%d');
fclose(file);
file = fopen('results/num.txt','w');
fprintf(file,'%d',num+1);
fclose(file);

Z = linkage(BO,'single','@distChiSq');
figure(666)
dendrogram(Z)

string = sprintf('results/%d -- method-%d sigmat-%d tau-%d sigma-%d lucas-%d


nbins-%d centroids-%d POI-%d n-%d m-%d multila-
%d.eps',num,method,sigmat,tau,sigma,lucas_multi,nbins,num_of_centroids,POI,n,m,N);
saveas(gcf,string)
string = sprintf('results/%d -- method-%d sigmat-%d tau-%d sigma-%d lucas-%d
nbins-%d centroids-%d POI-%d n-%d m-%d multila-
%d.png',num,method,sigmat,tau,sigma,lucas_multi,nbins,num_of_centroids,POI,n,m,N);
saveas(gcf,string)

Potrebbero piacerti anche