-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpartbased_init_strongclassifier.m
111 lines (99 loc) · 6.06 KB
/
partbased_init_strongclassifier.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
function sstrongclassifier = partbased_init_strongclassifier(I, patch)
global parameter;
widthdiv2 = floor(patch(3)/2);
heightdiv2 = floor(patch(4)/2);
leftwidth = patch(3) - widthdiv2;
leftheight = patch(4) - heightdiv2;
%% do not use part based
if ~parameter.partbased
parameter.partnumber = 1;
partpatch = [0 , 0, patch(3), patch(4)];
sstrongclassifier(1).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(1).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(1).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(1).alpha = zeros(parameter.numselectors, 1);
return;
end
if ~parameter.randompart
%% total
partpatch = [0 , 0, patch(3), patch(4)];
sstrongclassifier(1).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(1).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(1).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(1).alpha = zeros(parameter.numselectors, 1);
%% top
partpatch = [0 , 0, patch(3), heightdiv2];
sstrongclassifier(2).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(2).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(2).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(2).alpha = zeros(parameter.numselectors, 1);
%% left
partpatch = [0 , 0, widthdiv2, patch(4)];
sstrongclassifier(3).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(3).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(3).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(3).alpha = zeros(parameter.numselectors, 1);
%% bottom
partpatch = [0 , patch(4) - leftheight, patch(3), leftheight];
sstrongclassifier(4).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(4).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(4).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(4).alpha = zeros(parameter.numselectors, 1);
%% right
partpatch = [patch(3) - leftwidth , 0, leftwidth, patch(4)];
sstrongclassifier(5).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(5).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(5).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(5).alpha = zeros(parameter.numselectors, 1);
if parameter.partnumber == 7
%% middle horizon
partpatch = [0 , floor(patch(4)/4), patch(3), heightdiv2];
sstrongclassifier(6).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(6).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(6).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(6).alpha = zeros(parameter.numselectors, 1);
%% middle vertical
partpatch = [floor(patch(3)/4), 0, widthdiv2, patch(4)];
sstrongclassifier(7).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(7).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(7).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(7).alpha = zeros(parameter.numselectors, 1);
end
else
if parameter.sizefixed
partpatch = [0 , 0, patch(3), patch(4)];
sstrongclassifier(1).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(1).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(1).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(1).alpha = zeros(parameter.numselectors, 1);
for i = 2:parameter.partnumber
vaild = true;
while vaild
partpatch(1) = randi(patch(3)) - 1 ;
partpatch(2) = randi(patch(4)) - 1 ;
if partpatch(1) + parameter.fixedwidth <= patch(3) & ...
partpatch(2) + parameter.fixedheight <= patch(4)
vaild = false;
end
end
partpatch(3) = parameter.fixedwidth;
partpatch(4) = parameter.fixedheight;
sstrongclassifier(i).partclassifier = init_strongclassifier(I, [patch(1) + partpatch(1), ...
patch(2) + partpatch(2), partpatch(3), partpatch(4)]);
sstrongclassifier(i).partpatch = [partpatch(1), partpatch(2), partpatch(3), partpatch(4)];
sstrongclassifier(i).selectors = zeros(parameter.numselectors, 1);
sstrongclassifier(i).alpha = zeros(parameter.numselectors, 1);
end
else
end
end
end