1 #ifndef boxm2_compute_normal_albedo_functor_h_ 2 #define boxm2_compute_normal_albedo_functor_h_ 3 //: 4 // \file 5 6 #include <iostream> 7 #include <vector> 8 #include <boxm2/boxm2_data_traits.h> 9 #include <boxm2/boxm2_data_base.h> 10 #include <boxm2/boxm2_data.h> 11 #include <boxm2/basic/boxm2_block_id.h> 12 #include <boxm2/io/boxm2_stream_cache.h> 13 #ifdef _MSC_VER 14 # include <vcl_msvc_warnings.h> 15 #endif 16 17 #include <brad/brad_image_metadata.h> 18 #include <brad/brad_atmospheric_parameters.h> 19 20 class boxm2_compute_normal_albedo_functor 21 { 22 public: 23 typedef boxm2_data_traits<BOXM2_NORMAL_ALBEDO_ARRAY>::datatype naa_datatype; 24 typedef boxm2_data_traits<BOXM2_ALPHA>::datatype alpha_datatype; 25 typedef boxm2_data_traits<BOXM2_AUX0>::datatype aux0_datatype; 26 typedef boxm2_data_traits<BOXM2_AUX1>::datatype aux1_datatype; 27 typedef boxm2_data_traits<BOXM2_AUX2>::datatype aux2_datatype; 28 typedef boxm2_data_traits<BOXM2_AUX3>::datatype aux3_datatype; 29 30 //: standard constructor boxm2_compute_normal_albedo_functor(bool update_alpha)31 boxm2_compute_normal_albedo_functor(bool update_alpha) : update_alpha_(update_alpha) {} 32 33 bool init_data(std::vector<brad_image_metadata> const& metadata, 34 std::vector<brad_atmospheric_parameters> const& atm_params, 35 const boxm2_stream_cache_sptr& str_cache, 36 boxm2_data_base * alpha_data, 37 boxm2_data_base * normal_albedo_model); 38 39 bool process_cell(unsigned int index, bool is_leaf = false, float side_len = 0.0); 40 41 private: 42 boxm2_data<BOXM2_NORMAL_ALBEDO_ARRAY>* naa_model_data_; 43 boxm2_data<BOXM2_ALPHA>* alpha_data_; 44 45 boxm2_stream_cache_sptr str_cache_; 46 boxm2_block_id id_; 47 std::vector<brad_image_metadata> metadata_; 48 std::vector<brad_atmospheric_parameters> atm_params_; 49 50 unsigned int num_normals_; 51 unsigned int num_images_; 52 bool update_alpha_; 53 54 // cache sun positions 55 std::vector<vgl_vector_3d<double> > sun_positions_; 56 // cache normal directions 57 std::vector<vgl_vector_3d<double> > normals_; 58 59 // cache scale and offset values for reflectance, expected radiance, and expected radiance variance 60 // reflectance = scale * radiance + offset 61 std::vector<std::vector<double> > reflectance_scales_; 62 std::vector<std::vector<double> > reflectance_offsets_; 63 // expected radiance = scale * reflectance + offset 64 std::vector<std::vector<double> > radiance_scales_; 65 std::vector<std::vector<double> > radiance_offsets_; 66 // radiance variance = scale*reflectance*reflectance + offset 67 std::vector<std::vector<double> > radiance_var_scales_; 68 std::vector<std::vector<double> > radiance_var_offsets_; 69 70 }; 71 72 #endif // boxm2_compute_normal_albedo_functor_h_ 73