-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main_Clustering.m
128 lines (105 loc) · 4.42 KB
/
Main_Clustering.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
clear all, close all
addpath('Code');
addpath('ResultsMainClustering');
addpath('Code/GCMex;Code/GraphCuts');
addpath('Features');addpath('GTruth');
addpath('Code/GCMex;Code/GraphCuts');
% PC MESA
directorio_im='';
% Save
saveResults=('');
folders={'Petia1','Petia2','Mariella','Estefania1','Estefania2','Day1','Day2','Day3','Day4','Day6'};
formats={'.jpg', '.jpg', '.jpg', '.jpg', '.jpg', '.JPG','.JPG','.JPG','.JPG','.JPG'};
methods_indx={'ward','centroid','complete','weighted','single','median','average'};
cut_indx=(0.2:0.05:2);
%Tolerance
tol=5;
%% Clustering
for i_fold=1:length(folders)
% Images
folder=folders{i_fold};
fichero=([directorio_im folder]);
files_aux=dir([fichero '/*' formats{i_fold}]);
count = 1;files=[];
for n_files = 1:length(files_aux)
if(files_aux(n_files).name(1) ~= '.')
files(count) = files_aux(n_files);
count = count+1;
end
end
Nframes=length(files);
% Read GroundTruth - Excel
excel_filename=(['GT_' folder '.xls']);
[clust_man,clustersIdGT,cl_limGT, ~]=analizarExcel_Narrative(excel_filename,files, formats{i_fold});
delim=cl_limGT';
if delim(1) == 1, delim=delim(2:end); end
for i=1:length(clust_man)
[a,b]=find(clustersIdGT==i);
clust_manId{i,1}=b;
end
% Images Features
load(['CNNfeatures_' folder '.mat']);
[features_time] = normalizeL2(features); %sin añadir tiempo
%PCA FEATURES
params.minVarPCA=0.95;
params.standarizePCA=true;
[ featuresPCA, ~, ~ ] = applyPCA( features_time, params ) ;
similarities=pdist(featuresPCA,'cosine');
% Apply Methods
for met_indx=1:length(methods_indx)
method=methods_indx{met_indx};
Z = linkage(similarities, method);
% Cut value
for idx_cut=1:length(cut_indx)
cut=cut_indx(idx_cut);
clust_auto_ini = cluster(Z, 'cutoff', cut, 'criterion', 'distance');
index=1;bound=[];
for pos=1:length(clust_auto_ini)-1
if (clust_auto_ini(pos)~=clust_auto_ini(pos+1))>0
bound(index)=pos;
index=index+1;
end
end
if (exist('bound','var')==0), bound=0; end
automatic=bound;
if automatic(1) == 1, automatic=automatic(2:end);end
% clust_man & clust_auto = array of cells
% LH MATRIX: Allow us to apply the same criteria that we have
% applied to the FMeasure-> separate consecutive images when
% they are not with the same identification
for i=1:max(clust_auto_ini)
[a,~]=find(clust_auto_ini==i);
for pos=1:length(a)
LH(a(pos),i)=1;
end
end
[ labels_event, ~, ~ ] = getEventsFromLH(LH);
%Cluster by identification
for i=1:max(labels_event)
[~,b]=find(labels_event==i);
clust_autoId{i,1}=b;
end
% Assign the original image name
clust_auto_ImagName=image_assig(clust_autoId,files);
clust_man_ImagName=image_assig(clust_manId,files);
% Evaluation
disp(['Evaluation: ' num2str(cut) ' cut value, method: ' method ' , folder: ' folder ])
[rec,prec,acc,fMeasure]=Rec_Pre_Acc_Evaluation(delim,automatic,Nframes,tol);
[JImean,JIvar,U,P,long]=JaccardIndex(clust_man_ImagName,clust_auto_ImagName);
%Create Results Array
RPAF{idx_cut,1}=clust_auto_ini;
RPAF{idx_cut,2}=fMeasure;
RPAF{idx_cut,3}=rec;
RPAF{idx_cut,4}=prec;
RPAF{idx_cut,5}=acc;
RPAF{idx_cut,6}=JImean;
RPAF{idx_cut,7}=JIvar;
RPAF{idx_cut,8}=long;
RPAF{idx_cut,9}=length(clust_auto_ImagName);
end%end cut
% SAVE Results
disp(['Save: ' method ' applied to ' folder ' folder'])
aux_Save=([saveResults 'RPAF_' folder '_' method]);
save(aux_Save,'RPAF')
end %end method
end %end folder