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