Go to the documentation of this file.00001 #ifndef mfpf_pose_predictor_h_
00002 #define mfpf_pose_predictor_h_
00003
00004
00005
00006
00007
00008 #include <mfpf/mfpf_pose.h>
00009 #include <mbl/mbl_chord.h>
00010 #include <vnl/vnl_matrix.h>
00011 #include <vnl/vnl_vector.h>
00012 #include <vimt/vimt_image_2d_of.h>
00013 #include <vgl/vgl_fwd.h>
00014 #include <vcl_iosfwd.h>
00015
00016
00017
00018
00019
00020 enum mfpf_pose_type { translation,rigid,zoom,similarity };
00021
00022 vcl_ostream& operator<<(vcl_ostream&,const mfpf_pose_type&);
00023
00024
00025
00026
00027
00028
00029 class mfpf_pose_predictor
00030 {
00031 private:
00032
00033 double step_size_;
00034
00035
00036 double ref_x_;
00037
00038 double ref_y_;
00039
00040
00041 vcl_vector<mbl_chord> roi_;
00042
00043
00044 unsigned roi_ni_;
00045
00046 unsigned roi_nj_;
00047
00048
00049 unsigned n_pixels_;
00050
00051
00052 mfpf_pose_type pose_type_;
00053
00054
00055 short norm_method_;
00056
00057
00058 double var_min_;
00059
00060
00061 vnl_matrix<double> R_;
00062
00063
00064 vnl_vector<double> dp0_;
00065
00066
00067 void set_defaults();
00068
00069 public:
00070
00071
00072 mfpf_pose_predictor();
00073
00074
00075 virtual ~mfpf_pose_predictor();
00076
00077
00078 void set_step_size(double);
00079
00080
00081 double step_size() const { return step_size_; }
00082
00083
00084 const mfpf_pose_type& pose_type() const
00085 { return pose_type_; }
00086
00087
00088 void set_pose_type(const mfpf_pose_type&);
00089
00090
00091 void set(const vcl_vector<mbl_chord>& roi,
00092 double ref_x, double ref_y,
00093 short norm_method=1);
00094
00095
00096 void set_as_box(unsigned ni, unsigned nj, short norm_method=1);
00097
00098
00099
00100 void set_as_ellipse(double ri, double rj,
00101 short norm_method=1);
00102
00103
00104 void set_predictor(const vnl_matrix<double>& R,
00105 const vnl_vector<double>& dp0);
00106
00107
00108 void set_var_min(double var_min) {var_min_=var_min;}
00109
00110
00111 double var_min() const {return var_min_;}
00112
00113
00114 virtual double radius() const;
00115
00116 unsigned n_pixels() const { return n_pixels_; }
00117
00118
00119 virtual void get_sample_vector(const vimt_image_2d_of<float>& image,
00120 const vgl_point_2d<double>& p,
00121 const vgl_vector_2d<double>& u,
00122 vnl_vector<double>& v);
00123
00124
00125 virtual void new_pose(const vimt_image_2d_of<float>& image,
00126 const mfpf_pose& pose0,
00127 mfpf_pose& new_pose);
00128
00129
00130
00131
00132
00133 virtual void get_outline(vcl_vector<vgl_point_2d<double> >& pts) const;
00134
00135
00136 short version_no() const;
00137
00138
00139 virtual vcl_string is_a() const;
00140
00141
00142 virtual mfpf_pose_predictor* clone() const;
00143
00144
00145 virtual void print_summary(vcl_ostream& os) const;
00146
00147
00148 void print_shape(vcl_ostream& os) const;
00149
00150
00151 virtual void b_write(vsl_b_ostream& bfs) const;
00152
00153
00154 virtual void b_read(vsl_b_istream& bfs);
00155
00156
00157 bool operator==(const mfpf_pose_predictor& nc) const;
00158 };
00159
00160
00161 void vsl_b_write(vsl_b_ostream& bfs, const mfpf_pose_predictor& b);
00162
00163
00164 void vsl_b_read(vsl_b_istream& bfs, mfpf_pose_predictor& b);
00165
00166
00167 vcl_ostream& operator<<(vcl_ostream& os,const mfpf_pose_predictor& b);
00168
00169
00170 #endif