Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

strk_corr_tracker_process.cxx

Go to the documentation of this file.
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 }

Generated on Thu Jan 10 14:53:19 2008 for contrib/brl/bseg/strk by  doxygen 1.4.4