forked from jakobkarlstrand/tnm034-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
clean_up_mouth_mask.m
72 lines (40 loc) · 1.31 KB
/
clean_up_mouth_mask.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
function [outmask] = clean_up_mouth_mask(mask,regions, lEye, rEye)
MAX_ANGLE = 12;
img_size = size(mask);
img_y = img_size(1);
for k = 1 : length(regions)
mouthY = regions(k).Centroid(2);
if mouthY > 3/5*img_y && mouthY <= 3.9/5*img_y
else
bound = regions(k).BoundingBox();
bx = int64(bound(1)); % Pos X
by = int64(bound(2)); % Pos Y
bw = int64(bound(3)); % Width X
bh = int64(bound(4)); % Height Y
mask(by:by+bh,bx:bx+bw) = 0;
end
end
regions = regionprops(mask, 'Centroid', 'BoundingBox');
min_dist = [length(regions)];
for k = 1 : length(regions)
mouthX = regions(k).Centroid(1);
mouthY = regions(k).Centroid(2);
dst_left_eye = sqrt( (mouthX-lEye(1)) *(mouthX-lEye(1)) + (mouthY-lEye(2))*(mouthY-lEye(2)));
dst_right_eye = sqrt((mouthX-rEye(1)) *(mouthX-rEye(1)) + (mouthY-rEye(2))*(mouthY-lEye(2)));
difference = abs(dst_right_eye-dst_left_eye);
min_dist(k) = difference;
end
[val, idx] = min(min_dist);
for k = 1 : length(regions)
if k == idx
else
bound = regions(k).BoundingBox();
bx = int64(bound(1)); % Pos X
by = int64(bound(2)); % Pos Y
bw = int64(bound(3)); % Width X
bh = int64(bound(4)); % Height Y
mask(by:by+bh,bx:bx+bw) = 0;
end
end
outmask = mask; % Return modified mask
end