00001 // This is brl/bseg/strk/strk_corr_tracker_process.cxx 00002 #include <vcl_iostream.h> 00003 #include <vtol/vtol_topology_object.h> 00004 #include <vtol/vtol_edge.h> 00005 #include <vtol/vtol_face_2d.h> 00006 #include <vil1/vil1_memory_image_of.h> 00007 #include <strk/strk_tracker.h> 00008 #include <strk/strk_corr_tracker_process.h> 00009 00010 strk_corr_tracker_process::strk_corr_tracker_process(strk_tracker_params & tp) 00011 : tracker_(tp) 00012 { 00013 failure_ = false; 00014 first_frame_ = true; 00015 } 00016 00017 strk_corr_tracker_process::~strk_corr_tracker_process() 00018 { 00019 tracker_.clear(); 00020 } 00021 00022 00023 bool strk_corr_tracker_process::execute() 00024 { 00025 if (failure_) 00026 { 00027 vcl_cout << "In strk_corr_tracker_process::execute() - process failed\n"; 00028 return false; 00029 } 00030 if (this->get_N_input_images()!=1) 00031 { 00032 vcl_cout << "In strk_corr_tracker_process::execute() -" 00033 << " not exactly one input image\n"; 00034 failure_ = true; 00035 return false; 00036 } 00037 output_topo_objs_.clear(); 00038 //assume the input images are grey scale (should really check) 00039 vil1_memory_image_of<unsigned char> img(vpro_video_process::get_input_image(0)); 00040 input_images_.clear(); 00041 00042 if (first_frame_) 00043 { 00044 tracker_.set_image_0(img); 00045 if (!get_N_input_topo_objs()) 00046 { 00047 vcl_cout << "In strk_corr_tracker_process::execute() -" 00048 << " no input correlation face\n"; 00049 failure_ = true; 00050 return false; 00051 } 00052 vtol_topology_object_sptr to = input_topo_objs_[0]; 00053 vtol_face_sptr f = to->cast_to_face(); 00054 vtol_face_2d_sptr f2d = f->cast_to_face_2d(); 00055 if (!f2d) 00056 { 00057 vcl_cout << "In strk_corr_tracker_process::execute() -" 00058 << " input is not a vtol_face_2d\n"; 00059 failure_ = true; 00060 return false; 00061 } 00062 tracker_.set_initial_model(f2d); 00063 tracker_.init(); 00064 vcl_vector<vtol_edge_sptr> edges_2d; 00065 f2d->edges(edges_2d); 00066 for (vcl_vector<vtol_edge_sptr>::iterator eit = edges_2d.begin(); 00067 eit != edges_2d.end(); eit++) 00068 { 00069 vtol_topology_object_sptr to = (*eit)->cast_to_edge(); 00070 output_topo_objs_.push_back(to); 00071 } 00072 first_frame_ = false; 00073 return true; 00074 } 00075 00076 tracker_.set_image_i(img); 00077 tracker_.track(); 00078 vtol_face_2d_sptr f = tracker_.get_best_sample(); 00079 vcl_vector<vtol_edge_sptr> edges; 00080 f->edges(edges); 00081 for (vcl_vector<vtol_edge_sptr>::iterator eit = edges.begin(); 00082 eit != edges.end(); eit++) 00083 { 00084 vtol_topology_object_sptr to = (*eit)->cast_to_edge(); 00085 output_topo_objs_.push_back(to); 00086 } 00087 return true; 00088 }
1.4.4