00001 #ifndef brip_para_cvrg_h
00002 #define brip_para_cvrg_h
00003
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
00030
00031
00032
00033 #include <brip/brip_para_cvrg_params.h>
00034 #include <vil1/vil1_rgb.h>
00035 #include <vil1/vil1_image.h>
00036 #include <vil1/vil1_memory_image_of.h>
00037 class brip_para_cvrg : public brip_para_cvrg_params
00038 {
00039
00040
00041 public:
00042
00043
00044 brip_para_cvrg(float sigma = 1.0, float low = 6,
00045 float gauss_tail = .05,
00046 int proj_width = 7, int proj_height=1,
00047 int sup_radius = 1,
00048 bool verbose = true);
00049
00050 brip_para_cvrg(brip_para_cvrg_params& pdp);
00051 ~brip_para_cvrg();
00052 void do_coverage(vil1_image const& image);
00053
00054
00055 vil1_memory_image_of<float> get_float_detection_image(const float max = 255);
00056 vil1_memory_image_of<unsigned char> get_detection_image();
00057 vil1_memory_image_of<unsigned char> get_dir_image();
00058 vil1_memory_image_of<vil1_rgb<unsigned char> > get_combined_image();
00059
00060 private:
00061 void init(vil1_image const& image);
00062 void init_variables();
00063 float **make_float_image(int m , int n);
00064 void free_float_image(float** image);
00065 float *make_float_vector(int size);
00066 void set_float_vector(float* vector, int size, float val);
00067 void set_float_image(float**,float);
00068 void copy_image(float**,float**);
00069 void set_kernel();
00070 void smooth_image();
00071 void avg(int x, int y, vil1_memory_image_of<float> const& smooth, float** avg);
00072 void grad0(int x, int y, vil1_memory_image_of<float> const& smooth, float** grad0);
00073 void grad45(int x, int y, vil1_memory_image_of<float> const& smooth, float** grad45);
00074 void grad90(int x, int y, vil1_memory_image_of<float> const& smooth, float** grad90);
00075 void grad135(int x, int y, vil1_memory_image_of<float> const& smooth, float** grad135);
00076 void compute_gradients();
00077 float project(int x, int y, int dir, float* projection);
00078 void remove_flat_peaks(int n, float* array);
00079 void non_maximum_supress(float* array, float* sup_array);
00080 float parallel_coverage(float* sup_array);
00081 void compute_parallel_coverage();
00082 void compute_image(float** data, vil1_memory_image_of<unsigned char>& image);
00083
00084
00085 int proj_n_;
00086 int width_;
00087 int k_size_;
00088 float *kernel_;
00089
00090 int xstart_, ystart_;
00091 int xsize_, ysize_;
00092 vil1_memory_image_of<float> smooth_;
00093 float **avg_;
00094 float **grad0_;
00095 float **grad45_;
00096 float **grad90_;
00097 float **grad135_;
00098 float **det_;
00099 float **dir_;
00100
00101 vil1_memory_image_of<unsigned char> det_image_;
00102
00103 vil1_memory_image_of<unsigned char> dir_image_;
00104 vil1_memory_image_of<float> image_;
00105 float* sup_proj_;
00106 float* proj_0_;
00107 float* proj_45_;
00108 float* proj_90_;
00109 float* proj_135_;
00110 };
00111
00112 #endif