Go to the documentation of this file.00001 #include "msm_aligner.h"
00002 
00003 
00004 
00005 
00006 
00007 #include <vsl/vsl_indent.h>
00008 #include <vsl/vsl_binary_loader.h>
00009 #include <mbl/mbl_cloneables_factory.h>
00010 #include <mbl/mbl_parse_block.h>
00011 #include <mbl/mbl_exception.h>
00012 
00013 
00014 void msm_aligner::mean_of_transformed(
00015                          const vcl_vector<msm_points>& points,
00016                          const vcl_vector<vnl_vector<double> >& pose,
00017                          msm_points& mean) const
00018 {
00019   mean.vector().set_size(points[0].vector().size());
00020   mean.vector().fill(0.0);
00021   msm_points posed_points;
00022   for (unsigned i=0;i<points.size();++i)
00023   {
00024     apply_transform(points[i],pose[i],posed_points);
00025     mean.vector()+=posed_points.vector();
00026   }
00027   mean.vector()/=points.size();
00028 }
00029 
00030 
00031 void msm_aligner::print_summary(vcl_ostream& os) const
00032 {
00033   os<<" { } ";
00034 }
00035 
00036 const static short version_no = 1;
00037 
00038 
00039 void msm_aligner::b_write(vsl_b_ostream& bfs) const
00040 {
00041   vsl_b_write(bfs,version_no);
00042 }
00043 
00044 
00045 
00046 void msm_aligner::b_read(vsl_b_istream& bfs)
00047 {
00048   short version;
00049   vsl_b_read(bfs,version);
00050 }
00051 
00052 
00053 
00054 void vsl_add_to_binary_loader(const msm_aligner& b)
00055 {
00056   vsl_binary_loader<msm_aligner>::instance().add(b);
00057 }
00058 
00059 
00060 
00061 void vsl_b_write(vsl_b_ostream& bfs, const msm_aligner& b)
00062 {
00063   b.b_write(bfs);
00064 }
00065 
00066 
00067 
00068 
00069 
00070 void msm_aligner::config_from_stream(vcl_istream &is)
00071 {
00072   vcl_string s = mbl_parse_block(is);
00073   if (s.empty() || s=="{}") return;
00074 
00075   mbl_exception_parse_error x(
00076     this->is_a() + " expects no properties in initialisation,\n"
00077     "But the following properties were given:\n" + s);
00078   mbl_exception_error(x);
00079 }
00080 
00081 
00082 
00083 
00084 vcl_auto_ptr<msm_aligner> msm_aligner::create_from_stream(vcl_istream &is)
00085 {
00086   vcl_string name;
00087   is >> name;
00088 
00089   vcl_auto_ptr<msm_aligner> ps =
00090     mbl_cloneables_factory<msm_aligner>::get_clone(name);
00091 
00092   ps -> config_from_stream(is);
00093   return ps;
00094 }
00095 
00096 
00097 
00098 void vsl_b_read(vsl_b_istream& bfs, msm_aligner& b)
00099 {
00100   b.b_read(bfs);
00101 }
00102 
00103 
00104 
00105 vcl_ostream& operator<<(vcl_ostream& os,const msm_aligner& b)
00106 {
00107   os << b.is_a() << ": ";
00108   vsl_indent_inc(os);
00109   b.print_summary(os);
00110   vsl_indent_dec(os);
00111   return os;
00112 }
00113 
00114 
00115 
00116 vcl_ostream& operator<<(vcl_ostream& os,const msm_aligner* b)
00117 {
00118   if (b)
00119     return os << *b;
00120   else
00121     return os << "No msm_aligner defined.";
00122 }
00123 
00124 
00125 
00126 void vsl_print_summary(vcl_ostream& os,const msm_aligner& b)
00127 {
00128   os << b;
00129 }
00130 
00131 
00132 
00133 void vsl_print_summary(vcl_ostream& os,const msm_aligner* b)
00134 {
00135   if (b)
00136     os << *b;
00137   else
00138     os << vsl_indent() << "No msm_aligner defined.";
00139 }