1 // This is brl/bseg/bvxm/bvxm_mog_grey_processor.h 2 #ifndef bvxm_mog_grey_processor_h_ 3 #define bvxm_mog_grey_processor_h_ 4 //: 5 // \file 6 // \brief A class for a grey-scale-mixture-of-gaussian processor 7 // 8 // \author Isabel Restrepo 9 // \date Jan. 14, 2008 10 // \verbatim 11 // Modifications 12 // 02/11/2008 DEC Changed prob() to prob_density(), added prob_range 13 // 04/17/2008 Ozge C. Ozcanli added most_probable_mode_color() method 14 // 12/10/2008 Ozge C. Ozcanli added sample() method 15 // Added the get_light_bin() virtual function which is useful in multiple mixture of gaussian case 16 // to return the appropriate bin number from the lighting direction 17 // \endverbatim 18 19 #include "grid/bvxm_voxel_slab.h" 20 21 #include <bsta/algo/bsta_adaptive_updater.h> 22 #include <bsta/bsta_distribution.h> 23 #include <bsta/bsta_gauss_sf1.h> 24 #include <bsta/bsta_attributes.h> 25 #include <bsta/bsta_mixture_fixed.h> 26 #include <bsta/bsta_gaussian_indep.h> 27 28 29 // The mix_gauss_type contains the same data as mix_gauss plus an 30 // extra attribute that indicate the number of observations 31 32 class bvxm_mog_grey_processor 33 { 34 protected: 35 static const unsigned n_gaussian_modes_ = 3; 36 37 typedef bsta_num_obs<bsta_gauss_sf1> gauss_type; 38 typedef bsta_mixture_fixed<gauss_type, n_gaussian_modes_> mix_gauss; 39 typedef bsta_num_obs<mix_gauss> mix_gauss_type; 40 public: 41 42 typedef mix_gauss_type apm_datatype; 43 typedef float obs_datatype; 44 typedef float obs_mathtype; 45 46 bvxm_mog_grey_processor() = default; 47 virtual ~bvxm_mog_grey_processor() = default; 48 49 bvxm_voxel_slab<float> prob_density(bvxm_voxel_slab<mix_gauss_type> const& appear, 50 bvxm_voxel_slab<float> const& obs); 51 52 bool region_prob_density(bvxm_voxel_slab<float> &probabilities, 53 bvxm_voxel_slab<mix_gauss_type> const& appear, 54 bvxm_voxel_slab<float> const& obs, 55 bvxm_voxel_slab<float> const& mask); 56 57 bvxm_voxel_slab<float> prob_range(bvxm_voxel_slab<mix_gauss_type> const& appear, 58 bvxm_voxel_slab<float> const& obs_min, 59 bvxm_voxel_slab<float> const& obs_max); 60 61 bool update( bvxm_voxel_slab<mix_gauss_type> &appear, 62 bvxm_voxel_slab<float> const& obs, 63 bvxm_voxel_slab<float> const& weight); 64 65 bvxm_voxel_slab<float> expected_color( bvxm_voxel_slab<mix_gauss_type> const& appear); 66 bvxm_voxel_slab<float> most_probable_mode_color(bvxm_voxel_slab<mix_gauss_type > const& appear); 67 68 bvxm_voxel_slab<float> sample(bvxm_voxel_slab<mix_gauss_type > const& appear); 69 70 71 // bin number is always 0 for the simple mixture of gaussian case get_light_bin(unsigned int,const vnl_vector<float> &)72 virtual unsigned int get_light_bin(unsigned int /*num_light_bins*/, const vnl_vector<float>& /*light*/) { return 0; } 73 }; 74 75 #endif // bvxm_mog_grey_processor_h_ 76