00001 #ifndef vsrl_region_disparity_h_ 00002 #define vsrl_region_disparity_h_ 00003 //: 00004 // \file 00005 // 00006 // \brief Routines to calculate disparity based on regions rather than pixels. 00007 // 00008 // The routine takes a form of region segmentation as input. 00009 // The segmentation can be vtol_intensity_faces or vdgl_digital_regions. 00010 // A disparity map for the image is also taken as input. 00011 // The algorithm takes the average of the disparity in each region and 00012 // assigns it to each pixel in the region. 00013 // 00014 // \author G.W. Brooksby 00015 // \date 09/13/03, 9/17/03 00016 // Written at ORD on two LONG layovers... 00017 00018 #include <vil1/vil1_image.h> 00019 #include <vil1/vil1_memory_image_of.h> 00020 #include <vdgl/vdgl_digital_region.h> 00021 #include <vtol/vtol_intensity_face_sptr.h> 00022 00023 class vsrl_region_disparity 00024 { 00025 enum region_type{UNDEFINED=0, INTENSITY_FACE, DIGITAL_REGION}; 00026 public: 00027 vsrl_region_disparity(); 00028 vsrl_region_disparity(vil1_image* li, vil1_image* ri); 00029 ~vsrl_region_disparity(); 00030 00031 bool Execute(); 00032 void SetLeftImage(vil1_image* li){l_img_ = li;} 00033 void SetRightImage(vil1_image* ri) {r_img_ = ri;} 00034 void SetDisparityImage(vil1_memory_image_of<unsigned char>* di) {d_img_ = di;} 00035 vcl_vector<vtol_intensity_face_sptr>* GetIFRegions() {return if_regions_;} 00036 vcl_vector<vdgl_digital_region*>* GetDigitalRegions() {return digi_regions_;} 00037 void SetRegions(vcl_vector<vtol_intensity_face_sptr>* regs); 00038 void SetRegions(vcl_vector<vdgl_digital_region*>* regs); 00039 vil1_memory_image_of<double>* GetRegionDisparities() {return reg_disp_img_;} 00040 00041 private: 00042 void init(); 00043 vil1_image* l_img_; // Left image 00044 vil1_image* r_img_; // Right image 00045 vil1_memory_image_of<unsigned char>* d_img_; // Disparity image 00046 vil1_memory_image_of<double>* reg_disp_img_; // Newly calculated disparity image 00047 vcl_vector<vtol_intensity_face_sptr>* if_regions_; // Intensity Face Regions 00048 vcl_vector<vdgl_digital_region*>* digi_regions_; // Digital Regions 00049 bool run_digital_regions(); 00050 bool run_intensity_faces(); 00051 int region_type_; 00052 }; 00053 00054 #endif // vsrl_region_disparity_h_
1.4.4