Go to the documentation of this file.00001
00002 #ifndef HEAD_TRACKING_H
00003 #define HEAD_TRACKING_H
00004 #include <pcl/kdtree/kdtree_flann.h>
00005 #include <pcl/surface/mls.h>
00006 #include <pcl/registration/ia_ransac.h>
00007 #include <pcl/registration/icp_nl.h>
00008 #include <pcl/segmentation/extract_clusters.h>
00009
00010 #include <hrl_head_registration/pcl_basic.h>
00011 #include <hrl_head_registration/skin_color_util.h>
00012 #include <hrl_head_registration/hsl_rgb_conversions.h>
00013
00014 typedef pcl::KdTree<PRGB> KDTree;
00015
00016 #define COPY_PT_INTO_CLOUD(source, dest, ind) \
00017 do { \
00018 PRGB pt; \
00019 pt.x = source->points[ind].x; pt.y = source->points[ind].y; pt.z = source->points[ind].z; \
00020 pt.rgb = source->points[ind].rgb; \
00021 dest->points.push_back(pt); \
00022 } while(0)
00023
00024 #define PT_IS_NOT_NAN(pc, ind) ( (pc)->points[(ind)].x == (pc)->points[(ind)].x && \
00025 (pc)->points[(ind)].y == (pc)->points[(ind)].y && \
00026 (pc)->points[(ind)].z == (pc)->points[(ind)].z )
00027
00028 void extractSkinPC(const PCRGB::Ptr& pc_in, PCRGB::Ptr& pc_out, double thresh);
00029 int32_t findClosestPoint(const PCRGB::Ptr& pc, uint32_t u, uint32_t v);
00030 void sphereTrim(const PCRGB::Ptr& pc_in, PCRGB::Ptr& pc_out, uint32_t ind, double radius);
00031
00032
00033 void extractFace(const PCRGB::Ptr& input_pc, PCRGB::Ptr& out_pc, int u_click, int v_click);
00034 void extractFaceColorModel(const PCRGB::Ptr& input_pc, PCRGB::Ptr& out_pc, int u_click, int v_click);
00035 bool findFaceRegistration(const PCRGB::Ptr& template_pc, const PCRGB::Ptr& input_pc,
00036 int u_click, int v_click, Eigen::Affine3d& tf_mat);
00037
00038 #endif