-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathhog.m
75 lines (67 loc) · 1.51 KB
/
hog.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
function out = hog(f, isPath)
img = f;
if(isPath == 1)
img = imread(f);
img = rgb2gray(img);
end
%size(img)
[n,m] = size(img);
if(n == 160)
%img = cast(img(16:160-11, 16:96-11), 'double');
img = imresize(img, [134,70]);
end
xmask = [-1 0 1];
ymask = [-1; 0; 1];
dx = cast(conv2(img, xmask, 'same'), 'double');
dy = cast(conv2(img, ymask, 'same'), 'double');
mag = zeros(134,70);
mag = sqrt((dx.*dx)+(dy.*dy));
%mx = max(transpose(max(mag)));
%mag = cast(255*(mag*(1/mx)), 'uint8');
%for x=1:1:134
% for y=1:1:70
% angle(x,y) = atan2d(dy(x,y),dx(x,y));
% end
%end
angle = atan2d(dy,dx);
for x =1:1:134
for y = 1:1:70
if(angle(x,y) < 0)
angle(x,y) = angle(x,y) + 360;
end
end
end
for x =1:1:134
for y = 1:1:70
if(angle(x,y) > 180)
angle(x,y) = angle(x,y) - 180;
end
end
end
%mx = max(transpose(max(angle)));
%angle = cast(255*(angle*(1/mx)), 'uint8');
%create 2x2 blocks
vec = [];
for y = 4:8:116
for x = 4:8:52
%blockMag = zeros(16,16);
%blockAngle = zeros(16,16);
%for j = 1:1:16
% for i = 1:1:16
% blockAngle(j,i) = angle((j+y),(i+x));
% blockMag(j,i) = mag((j+y),(i+x));
% end
%end
blockMag = mag(y:y+16,x:x+16);
blockAngle = angle(y:y+16,x:x+16);
hist = blockHist(blockAngle, blockMag);
vec = [vec,hist];
end
end
out = vec;
for i = 1:1:3780
if(isnan(out(i)))
out(i) = 0;
end
end
end