landmarks.h
4.7 KB
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
// landmarks.h: code for manipulating landmarks
//
// Copyright (C) 2005-2013, Stephen Milborrow
#ifndef STASM_LANDMARKS_H
#define STASM_LANDMARKS_H
namespace stasm
{
struct LANDMARK_INFO // landmark information
{
int partner; // symmetrical partner point, -1 means no partner
int prev, next; // previous and next point
// special val -1 means prev=current-1 and next=current+1
double weight; // weight of landmark relative to others (for shape mod)
};
static const LANDMARK_INFO LANDMARK_INFO_TAB[stasm_NLANDMARKS] = // stasm77 points
{
// par pre next weight
{ 12, 1, 15, 1. }, // 00 L_LTemple
{ 11, -1, -1, 1. }, // 01 L_LJaw01
{ 10, -1, -1, 1. }, // 02 L_LJawNoseline
{ 9, -1, -1, 1. }, // 03 L_LJawMouthline
{ 8, -1, -1, 1. }, // 04 L_LJaw04
{ 7, -1, -1, 1. }, // 05 L_LJaw05
{ -1, -1, -1, 1. }, // 06 L_CTipOfChin
{ 5, -1, -1, 1. }, // 07 L_RJaw07
{ 4, -1, -1, 1. }, // 08 L_RJaw08
{ 3, -1, -1, 1. }, // 09 L_RJawMouthline
{ 2, -1, -1, 1. }, // 10 L_RJawNoseline
{ 1, -1, -1, 1. }, // 11 L_RJaw11
{ 0, 11, 13, 1. }, // 12 L_RTemple
{ 15, -1, -1, 0. }, // 13 L_RForehead point is virtually useless
{ -1, -1, -1, 0. }, // 14 L_CForehead point is virtually useless
{ 13, -1, -1, 0. }, // 15 L_LForehead point is virtually useless
{ 23, -1, -1, 0. }, // 16 L_LEyebrowTopInner
{ 24, -1, -1, 0. }, // 17 L_LEyebrowTopOuter
{ 25, 0, 17, 0. }, // 18 L_LEyebrowOuter
{ 26, -1, -1, 0. }, // 19 L_LEyebrowBotOuter
{ 27, -1, -1, 0. }, // 20 L_LEyebrowBotInner
{ 22, 0, 12, 0. }, // 21 L_LEyebrowInner
{ 21, 0, 12, 0. }, // 22 L_REyebrowInner
{ 16, -1, -1, 0. }, // 23 L_REyebrowTopInner
{ 17, -1, -1, 0. }, // 24 L_REyebrowTopOuter
{ 18, 12, 24, 0. }, // 25 L_REyebrowOuter
{ 19, -1, -1, 0. }, // 26 L_REyebrowBotOuter
{ 20, -1, -1, 0. }, // 27 L_REyebrowBotInner
{ 29, 26, 39, 1. }, // 28 L_REyelid
{ 28, 20, 38, 1. }, // 29 L_LEyelid
{ 40, 32, 36, 1. }, // 30 L_LEyeInner
{ 41, -1, -1, 1. }, // 31 L_LEye31
{ 42, -1, -1, 1. }, // 32 L_LEyeTop
{ 43, -1, -1, 1. }, // 33 L_LEye33
{ 44, 32, 36, 1. }, // 34 L_LEyeOuter
{ 45, -1, -1, 1. }, // 35 L_LEye35
{ 46, -1, -1, 1. }, // 36 L_LEyeBot
{ 47, 30, 36, 1. }, // 37 L_LEye37
{ 39, -1, -1, 1. }, // 38 L_LPupil
{ 38, -1, -1, 1. }, // 39 L_RPupil
{ 30, 42, 46, 1. }, // 40 L_REyeInner
{ 31, -1, -1, 1. }, // 41 L_REye41
{ 32, -1, -1, 1. }, // 42 L_REyeTop
{ 33, -1, -1, 1. }, // 43 L_REye43
{ 34, 42, 46, 1. }, // 44 L_REyeOuter
{ 35, -1, -1, 1. }, // 45 L_REye45
{ 36, -1, -1, 1. }, // 46 L_REyeBot
{ 37, 40, 46, 1. }, // 47 L_REye47
{ 50, 0, 12, 1. }, // 48 L_RNoseMid
{ -1, -1, -1, 1. }, // 49 L_CNoseMid
{ 48, 0, 12, 1. }, // 50 L_LNoseMid
{ 53, 0, 12, 1. }, // 51 L_LNostrilTop
{ -1, 0, 12, 1. }, // 52 L_CNoseTip
{ 51, 0, 12, 1. }, // 53 L_RNostrilTop
{ 58, 0, 12, 1. }, // 54 L_RNoseSide
{ 57, 60, 62, 1. }, // 55 L_RNostrilBot
{ -1, -1, -1, 1. }, // 56 L_CNoseBase
{ 55, 30, 62, 1. }, // 57 L_LNostrilBot
{ 54, 0, 12, 1. }, // 58 L_LNoseSide
{ 65, 61, 74, 1. }, // 59 L_LMouthCorner
{ 64, 59, 61, 1. }, // 60 L_LMouth60
{ 63, -1, -1, 1. }, // 61 L_LMouthCupid
{ -1, -1, -1, 1. }, // 62 L_CTopOfTopLip
{ 61, -1, -1, 1. }, // 63 L_RMouthCupid
{ 60, 63, 65, 1. }, // 64 L_RMouth64
{ 59, 61, 74, 1. }, // 65 L_RMouthCorner
{ 68, 65, 67, 1. }, // 66 L_RMouth66
{ -1, -1, -1, 1. }, // 67 L_CBotOfTopLip
{ 66, 59, 67, 1. }, // 68 L_LMouth68
{ 71, 59, 70, 1. }, // 69 L_LMouth69
{ -1, -1, -1, 1. }, // 70 L_CTopOfBotLip
{ 69, 65, 70, 1. }, // 71 L_RMouth71
{ 76, 65, 73, 1. }, // 72 L_RMouth72
{ 75, 72, 74, 1. }, // 73 L_RMouth73
{ -1, -1, -1, 1. }, // 74 L_CBotOfBotLip
{ 73, 74, 76, 1. }, // 75 L_LMouth75
{ 72, 59, 75, 1. }, // 76 L_LMouth76
};
double MeanPoint(
const Shape& shape, // in
int ipoint1, // in
int ipoint2, // in
int ix); // in: IX or IY
void PrevAndNextLandmarks(
int& prev, // out
int& next, // out
int ipoint, // in
const Shape& shape); // in
Shape FlipShape( // flip shape horizontally
const Shape& shape, // in
int imgwidth); // in
} // namespace stasm
#endif // STASM_LANDMARKS_H