00001 00004 #ifndef __BORDER_DATA_DERICHE_HH__ 00005 #define __BORDER_DATA_DERICHE_HH__ 00006 00007 #include <tab_sym_ptr.hh> 00008 #include <string.h> 00009 #include "border_data.hh" 00010 #include "deriche.hh" 00011 00013 class border_data_deriche: public border_data 00014 { 00015 private: 00016 // Array of pointor on the border value 00017 tab_sym_ptr data; 00018 // Picture array of the x-gradient 00019 float *grad_x; 00020 // Picture array of the y-gradient 00021 float *grad_y; 00022 // Width of the gradient picture 00023 int dim_x; 00024 // Height of the gradient picture 00025 int dim_y; 00026 // The maximum value of the gradient 00027 float max; 00028 // The alpha parmeter used for the deriche 00029 double alpha; 00030 00031 public: 00033 border_data_deriche(image &I,double &d); 00035 border_data_deriche(const border_data_deriche &); 00037 virtual ~border_data_deriche(); 00039 border_data_deriche & operator=(const border_data_deriche &); 00040 00041 00043 class border_value 00044 { 00045 private: 00046 // Gradient of the edge 00047 float grad; 00048 // Number of edges that are merged to the border 00049 int cardinal; 00050 00051 public: 00053 border_value(); 00055 border_value(const border_value &); 00057 border_value(float); 00059 ~border_value() 00060 {} 00061 00063 border_value & operator=(const border_value &); 00065 void reinit(float,int); 00066 00068 float give_gradient(); 00070 int give_cardinal(); 00071 }; 00072 00074 border_value &operator() (long) const; 00076 void del(dart); 00077 00079 void init(combi_map_base &,dart); 00081 void merge(int,dart,dart); 00083 float give_max_gradient(); 00084 }; 00085 00086 #endif // __BORDER_DATA_DERICHE_HH__