Go to the documentation of this file.00001
00002 #ifndef vpgl_fundamental_matrix_h_
00003 #define vpgl_fundamental_matrix_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <vnl/vnl_fwd.h>
00030 #include <vgl/vgl_fwd.h>
00031 #include <vcl_iosfwd.h>
00032
00033 #include "vpgl_proj_camera.h"
00034
00035 template <class T> class vpgl_essential_matrix;
00036 template <class T> class vpgl_calibration_matrix;
00037
00038 template <class T>
00039 class vpgl_fundamental_matrix
00040 {
00041 public:
00042
00043
00044
00045 vpgl_fundamental_matrix();
00046
00047
00048
00049 vpgl_fundamental_matrix( const vpgl_proj_camera<T>& cr,
00050 const vpgl_proj_camera<T>& cl ) : cached_svd_(NULL)
00051 { set_matrix( cr, cl ); }
00052
00053
00054 vpgl_fundamental_matrix( const vnl_matrix_fixed<T,3,3>& F ) : cached_svd_(NULL)
00055 { set_matrix( F ); }
00056
00057
00058 vpgl_fundamental_matrix(const vpgl_fundamental_matrix<T>& other);
00059
00060
00061
00062
00063 vpgl_fundamental_matrix(const vpgl_calibration_matrix<T> &kr,
00064 const vpgl_calibration_matrix<T> &kl,
00065 const vpgl_essential_matrix<T> &em);
00066
00067 const vpgl_fundamental_matrix<T>& operator=( const vpgl_fundamental_matrix<T>& fm );
00068
00069
00070 virtual ~vpgl_fundamental_matrix();
00071
00072
00073
00074
00075 void get_epipoles( vgl_homg_point_2d<T>& er, vgl_homg_point_2d<T>& el ) const;
00076
00077
00078 vgl_homg_line_2d<T> r_epipolar_line( const vgl_homg_point_2d<T>& pl ) const;
00079 vgl_homg_line_2d<T> l_epipolar_line( const vgl_homg_point_2d<T>& pr ) const;
00080
00081
00082
00083 vgl_homg_line_2d<T> r_epipolar_line(const vgl_homg_line_2d<T> &epiline_l) const;
00084 vgl_homg_line_2d<T> l_epipolar_line(const vgl_homg_line_2d<T> &epiline_r) const;
00085
00086
00087
00088
00089 vpgl_proj_camera<T> extract_left_camera(
00090 const vnl_vector_fixed<T,3>& v, T lambda ) const;
00091
00092
00093
00094
00095
00096
00097 vpgl_proj_camera<T> extract_left_camera(
00098 const vcl_vector< vgl_point_3d<T> >& world_points,
00099 const vcl_vector< vgl_point_2d<T> >& image_points ) const;
00100
00101
00102
00103
00104 const vnl_matrix_fixed<T,3,3>& get_matrix() const { return F_; }
00105
00106
00107
00108 const vnl_svd<T>& svd() const{ return *cached_svd_; }
00109
00110 void set_matrix( const vpgl_proj_camera<T>& cr,
00111 const vpgl_proj_camera<T>& cl );
00112
00113 void set_matrix( const vnl_matrix_fixed<T,3,3>& F );
00114
00115 protected:
00116
00117 vnl_matrix_fixed<T,3,3> F_;
00118
00119
00120 mutable vnl_svd<T>* cached_svd_;
00121 };
00122
00123
00124 template <class T>
00125 vcl_ostream& operator<<(vcl_ostream& s, vpgl_fundamental_matrix<T> const& p);
00126
00127
00128 template <class T>
00129 vcl_istream& operator>>(vcl_istream& s, vpgl_fundamental_matrix<T>& p);
00130
00131 #endif // vpgl_fundamental_matrix_h_