Go to the documentation of this file.00001 #ifndef rgrl_mask_h_
00002 #define rgrl_mask_h_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <vcl_iosfwd.h>
00019 #include <vnl/vnl_vector.h>
00020 #include <vil/vil_image_view.h>
00021
00022 #include <rgrl/rgrl_object.h>
00023 #include <rgrl/rgrl_macros.h>
00024
00025
00026
00027
00028 class rgrl_mask_box;
00029
00030
00031 class rgrl_mask
00032 : public rgrl_object
00033 {
00034 public:
00035 rgrl_mask( unsigned dim=0 ) : x0_(dim, 0.0), x1_(dim, 0.0) { }
00036
00037 virtual ~rgrl_mask(){}
00038
00039
00040 virtual bool inside( vnl_vector<double> const& ) const = 0;
00041
00042
00043 rgrl_type_macro( rgrl_mask, rgrl_object );
00044
00045
00046 vnl_vector<double> const& x0() const
00047 { return x0_; }
00048
00049
00050 vnl_vector<double> const& x1() const
00051 { return x1_; }
00052
00053 rgrl_mask_box bounding_box() const;
00054
00055 protected:
00056 vnl_vector<double> x0_, x1_;
00057 };
00058
00059
00060
00061 class rgrl_mask_2d_image
00062 : public rgrl_mask
00063 {
00064 public:
00065 rgrl_mask_2d_image( const vil_image_view<vxl_byte>& in_mask,
00066 int org_x = 0, int org_y = 0);
00067
00068
00069 bool inside( vnl_vector<double> const& pt ) const;
00070
00071
00072 rgrl_type_macro( rgrl_mask_2d_image, rgrl_mask );
00073
00074 private:
00075 void update_bounding_box();
00076
00077 private:
00078 vil_image_view<vxl_byte> mask_image_;
00079 int org_x_, org_y_;
00080 };
00081
00082
00083 class rgrl_mask_sphere
00084 : public rgrl_mask
00085 {
00086 public:
00087
00088
00089
00090
00091
00092 rgrl_mask_sphere( unsigned dim );
00093
00094 rgrl_mask_sphere( const vnl_vector<double>& in_center,
00095 double in_radius );
00096
00097
00098 bool inside( vnl_vector<double> const& pt ) const;
00099
00100 void set_center( vnl_vector<double> const& pt );
00101
00102 void set_radius( double radius );
00103
00104
00105 rgrl_type_macro( rgrl_mask_sphere, rgrl_mask );
00106
00107 private:
00108 void update_bounding_box();
00109
00110 private:
00111 vnl_vector<double> center_;
00112 double radius_sqr_;
00113 };
00114
00115
00116
00117 class rgrl_mask_box
00118 : public rgrl_mask
00119 {
00120 public:
00121
00122
00123
00124
00125 rgrl_mask_box( unsigned dim );
00126
00127
00128 rgrl_mask_box( vnl_vector<double> const& x0, vnl_vector<double> const& x1 );
00129
00130
00131 bool inside( vnl_vector<double> const& pt ) const;
00132
00133
00134 void set_x0( vnl_vector<double> const& v );
00135
00136
00137 void set_x1( vnl_vector<double> const& v );
00138
00139
00140 bool operator==( const rgrl_mask_box& other ) const;
00141
00142
00143 bool operator!=( const rgrl_mask_box& other ) const;
00144
00145
00146 rgrl_type_macro( rgrl_mask_box, rgrl_mask );
00147 };
00148
00149
00150 vcl_ostream& operator<<(vcl_ostream& os, const rgrl_mask_box& box);
00151
00152
00153 vcl_istream& operator>>(vcl_istream& is, rgrl_mask_box& box);
00154
00155
00156
00157
00158
00159 rgrl_mask_box
00160 rgrl_mask_box_intersection( rgrl_mask_box const& a, rgrl_mask_box const& b );
00161
00162
00163 #endif