contrib/brl/bseg/vpro/vpro_line_fit_process.cxx
Go to the documentation of this file.
00001 // This is brl/bseg/vpro/vpro_line_fit_process.cxx
00002 #include "vpro_line_fit_process.h"
00003 //:
00004 // \file
00005 #include <vcl_iostream.h>
00006 #include <vul/vul_timer.h>
00007 #include <vsol/vsol_line_2d.h>
00008 #include <vtol/vtol_edge_2d_sptr.h>
00009 #include <vtol/vtol_edge_2d.h>
00010 #include <sdet/sdet_fit_lines.h>
00011 
00012 vpro_line_fit_process::vpro_line_fit_process(sdet_fit_lines_params & flp)
00013   : sdet_fit_lines_params(flp)
00014 {
00015 }
00016 
00017 vpro_line_fit_process::~vpro_line_fit_process()
00018 {
00019 }
00020 
00021 bool vpro_line_fit_process::execute()
00022 {
00023   vul_timer t;
00024 
00025   if (!get_N_input_topo_objs())
00026   {
00027     vcl_cout << "In vpro_line_fit_process::execute() - no input edges\n";
00028     return false;
00029   }
00030   this->clear_output();
00031   //initialize the line fitter
00032   sdet_fit_lines fitter(*((sdet_fit_lines_params*)this));
00033   vcl_vector<vtol_edge_2d_sptr> edges;
00034   for (vcl_vector<vtol_topology_object_sptr>::iterator eit = input_topo_objs_.begin();
00035        eit != input_topo_objs_.end(); eit++)
00036   {
00037     vtol_edge_2d_sptr e = (*eit)->cast_to_edge()->cast_to_edge_2d();
00038     if (e)
00039       edges.push_back(e);
00040   }
00041   fitter.set_edges(edges);
00042   if (!fitter.fit_lines())
00043     return false;
00044   vcl_vector<vsol_line_2d_sptr> lines = fitter.get_line_segs();
00045   for (vcl_vector<vsol_line_2d_sptr>::iterator lit = lines.begin();
00046        lit != lines.end(); lit++)
00047     output_spat_objs_.push_back((*lit)->cast_to_spatial_object());
00048 
00049   vcl_cout << "process " << lines.size()
00050            << " line segments in " << t.real() << " msecs.\n";
00051   return true;
00052 }