1 #ifndef gevd_region_proc_h_
2 #define gevd_region_proc_h_
3 //---------------------------------------------------------------------
4 //:
5 // \file
6 // \brief a processor for extracting expanded resolution regions
7 //
8 // edgel_regions uses a flood fill algorithm and is thus
9 // region labeling is only as localized as one pixel.
10 // In the CAD application, we need sub-pixel details. So
11 // In this algorithm the original image resolution is
12 // expanded using Gaussian interpolation, typically by
13 // a factor of two. Then the resulting regions are
14 // transformed back to original image coordinates.
15 //
16 // \author
17 //  J.L. Mundy - April 11, 2001
18 //
19 // \verbatim
20 // Modifications
21 //  8 May 2002 - Peter Vanroose - class name changed from region_proc to gevd_region_proc
22 // \endverbatim
23 //
24 //-------------------------------------------------------------------------
25 #include <iostream>
26 #include <vector>
27 #ifdef _MSC_VER
28 #  include <vcl_msvc_warnings.h>
29 #endif
30 #include <gevd/gevd_bufferxy.h>
31 #include <vil1/vil1_image.h>
32 #include <vdgl/vdgl_digital_region.h>
33 #include <gevd/gevd_region_proc_params.h>
34 
35 class gevd_region_proc : public gevd_region_proc_params
36 {
37 public:
38   //Constructors/destructor
39   gevd_region_proc();
40 
41   ~gevd_region_proc() override;
42   //Accessors
43   void set_image(vil1_image& image);
44 //  void set_roi_proc(lung_roi_proc_ref& roi_proc){roi_proc_ = roi_proc;}
45 
46   // vector<gevd_poly_intensity_face_sptr>& get_regions(){return regions_;}
get_regions()47   std::vector<vdgl_digital_region *>& get_regions(){return regions_;}
48 
49   //Utility Methods
50   void extract_regions();
51   void clear();
52 
set_expand_scale(float scale)53   void set_expand_scale(float scale){expand_scale_=scale;}
54 
55   //Debug methods
set_debug()56   void set_debug(){debug_ = true;}
clear_debug()57   void clear_debug(){debug_ = false;}
58 
59 protected:
60   //protected methods
61   gevd_bufferxy* get_image_buffer(vil1_image& image);
62   gevd_bufferxy* get_float_buffer(gevd_bufferxy* b);
63   gevd_bufferxy* put_float_buffer(gevd_bufferxy* fbuf);
64   vil1_image buffer_to_image(gevd_bufferxy* buf);
65   void restore_image_rois();
66   //members
67   bool debug_;//debug flag
68   bool regions_valid_;      //process state flag
69   float expand_scale_;
70   float burt_adelson_factor_;
71   vil1_image image_;  //input image
72   gevd_bufferxy* buf_;
73   //lung_roi_proc_ref roi_proc_; //Lung roi processor
74   //vector<gevd_poly_intensity_face_ref> regions_; //resulting intensity faces
75   std::vector<vdgl_digital_region *> regions_; //resulting digital regions
76 };
77 #endif // gevd_region_proc_h_
78