Point Cloud Library (PCL)  1.8.1
face_common.h
1 #ifndef FACE_DETECTOR_COMMON_H_
2 #define FACE_DETECTOR_COMMON_H_
3 
4 #include <pcl/features/integral_image2D.h>
5 
6 namespace pcl
7 {
8  namespace face_detection
9  {
11  {
12  public:
13  std::vector<boost::shared_ptr<pcl::IntegralImage2D<float, 1> > > iimages_; //also pointer to the respective integral image
14  int row_, col_;
15  int wsize_;
16  int label_;
17 
18  //save pose head information
19  Eigen::Vector3f trans_;
20  Eigen::Vector3f rot_;
21  };
22 
24  {
25  public:
26  int row1_, col1_;
27  int row2_, col2_;
28 
29  int wsizex1_, wsizey1_;
30  int wsizex2_, wsizey2_;
31 
32  float threshold_;
33  int used_ii_;
34 
36  {
37  used_ii_ = 0;
38  }
39 
40  void serialize(std::ostream & stream) const
41  {
42  stream.write (reinterpret_cast<const char*> (&row1_), sizeof(row1_));
43  stream.write (reinterpret_cast<const char*> (&col1_), sizeof(col1_));
44  stream.write (reinterpret_cast<const char*> (&row2_), sizeof(row2_));
45  stream.write (reinterpret_cast<const char*> (&col2_), sizeof(col2_));
46  stream.write (reinterpret_cast<const char*> (&wsizex1_), sizeof(wsizex1_));
47  stream.write (reinterpret_cast<const char*> (&wsizex2_), sizeof(wsizex2_));
48  stream.write (reinterpret_cast<const char*> (&wsizey1_), sizeof(wsizey1_));
49  stream.write (reinterpret_cast<const char*> (&wsizey2_), sizeof(wsizey2_));
50  stream.write (reinterpret_cast<const char*> (&threshold_), sizeof(threshold_));
51  stream.write (reinterpret_cast<const char*> (&used_ii_), sizeof(used_ii_));
52  }
53 
54  inline void deserialize(std::istream & stream)
55  {
56  stream.read (reinterpret_cast<char*> (&row1_), sizeof(row1_));
57  stream.read (reinterpret_cast<char*> (&col1_), sizeof(col1_));
58  stream.read (reinterpret_cast<char*> (&row2_), sizeof(row2_));
59  stream.read (reinterpret_cast<char*> (&col2_), sizeof(col2_));
60  stream.read (reinterpret_cast<char*> (&wsizex1_), sizeof(wsizex1_));
61  stream.read (reinterpret_cast<char*> (&wsizex2_), sizeof(wsizex2_));
62  stream.read (reinterpret_cast<char*> (&wsizey1_), sizeof(wsizey1_));
63  stream.read (reinterpret_cast<char*> (&wsizey2_), sizeof(wsizey2_));
64  stream.read (reinterpret_cast<char*> (&threshold_), sizeof(threshold_));
65  stream.read (reinterpret_cast<char*> (&used_ii_), sizeof(used_ii_));
66  }
67  };
68 
69  template<class FeatureType>
70  class RFTreeNode
71  {
72  public:
73  float threshold;
75  std::vector<RFTreeNode> sub_nodes;
76  float value;
77  float variance;
78 
79  Eigen::Vector3d trans_mean_;
80  Eigen::Vector3d rot_mean_;
81 
82  float purity_;
83  Eigen::Matrix3d covariance_trans_;
84  Eigen::Matrix3d covariance_rot_;
85 
86  void serialize(::std::ostream & stream) const
87  {
88 
89  const int num_of_sub_nodes = static_cast<int> (sub_nodes.size ());
90  stream.write (reinterpret_cast<const char*> (&num_of_sub_nodes), sizeof(num_of_sub_nodes));
91 
92  if (sub_nodes.size () > 0)
93  {
94  feature.serialize (stream);
95  stream.write (reinterpret_cast<const char*> (&threshold), sizeof(threshold));
96  }
97 
98  stream.write (reinterpret_cast<const char*> (&value), sizeof(value));
99  stream.write (reinterpret_cast<const char*> (&variance), sizeof(variance));
100 
101  for (size_t i = 0; i < 3; i++)
102  stream.write (reinterpret_cast<const char*> (&trans_mean_[i]), sizeof(trans_mean_[i]));
103 
104  for (size_t i = 0; i < 3; i++)
105  stream.write (reinterpret_cast<const char*> (&rot_mean_[i]), sizeof(rot_mean_[i]));
106 
107  for (size_t i = 0; i < 3; i++)
108  for (size_t j = 0; j < 3; j++)
109  stream.write (reinterpret_cast<const char*> (&covariance_trans_ (i, j)), sizeof(covariance_trans_ (i, j)));
110 
111  for (size_t i = 0; i < 3; i++)
112  for (size_t j = 0; j < 3; j++)
113  stream.write (reinterpret_cast<const char*> (&covariance_rot_ (i, j)), sizeof(covariance_rot_ (i, j)));
114 
115  for (int sub_node_index = 0; sub_node_index < num_of_sub_nodes; ++sub_node_index)
116  {
117  sub_nodes[sub_node_index].serialize (stream);
118  }
119  }
120 
121  inline void deserialize(::std::istream & stream)
122  {
123  int num_of_sub_nodes;
124  stream.read (reinterpret_cast<char*> (&num_of_sub_nodes), sizeof(num_of_sub_nodes));
125 
126  if (num_of_sub_nodes > 0)
127  {
128  feature.deserialize (stream);
129  stream.read (reinterpret_cast<char*> (&threshold), sizeof(threshold));
130  }
131 
132  stream.read (reinterpret_cast<char*> (&value), sizeof(value));
133  stream.read (reinterpret_cast<char*> (&variance), sizeof(variance));
134 
135  for (size_t i = 0; i < 3; i++)
136  stream.read (reinterpret_cast<char*> (&trans_mean_[i]), sizeof(trans_mean_[i]));
137 
138  for (size_t i = 0; i < 3; i++)
139  stream.read (reinterpret_cast<char*> (&rot_mean_[i]), sizeof(rot_mean_[i]));
140 
141  for (size_t i = 0; i < 3; i++)
142  for (size_t j = 0; j < 3; j++)
143  stream.read (reinterpret_cast<char*> (&covariance_trans_ (i, j)), sizeof(covariance_trans_ (i, j)));
144 
145  for (size_t i = 0; i < 3; i++)
146  for (size_t j = 0; j < 3; j++)
147  stream.read (reinterpret_cast<char*> (&covariance_rot_ (i, j)), sizeof(covariance_rot_ (i, j)));
148 
149  sub_nodes.resize (num_of_sub_nodes);
150 
151  if (num_of_sub_nodes > 0)
152  {
153  for (int sub_node_index = 0; sub_node_index < num_of_sub_nodes; ++sub_node_index)
154  {
155  sub_nodes[sub_node_index].deserialize (stream);
156  }
157  }
158  }
159  };
160  }
161 }
162 #endif /* FACE_DETECTOR_COMMON_H_ */
Eigen::Matrix3d covariance_rot_
Definition: face_common.h:84
void serialize(std::ostream &stream) const
Definition: face_common.h:40
std::vector< boost::shared_ptr< pcl::IntegralImage2D< float, 1 > > > iimages_
Definition: face_common.h:13
void deserialize(std::istream &stream)
Definition: face_common.h:54
void deserialize(::std::istream &stream)
Definition: face_common.h:121
std::vector< RFTreeNode > sub_nodes
Definition: face_common.h:75
void serialize(::std::ostream &stream) const
Definition: face_common.h:86
Eigen::Matrix3d covariance_trans_
Definition: face_common.h:83