1 // This is brl/bpro/core/vil_pro/processes/vil_filter_image_process.cxx 2 #include <bprb/bprb_func_process.h> 3 //: 4 // \file 5 6 #include <bprb/bprb_parameters.h> 7 #include "vil/vil_image_view.h" 8 #include <vil/algo/vil_threshold.h> 9 10 //: Constructor vil_filter_image_process_cons(bprb_func_process & pro)11bool vil_filter_image_process_cons(bprb_func_process& pro) 12 { 13 //input 14 bool ok=false; 15 std::vector<std::string> input_types; 16 input_types.emplace_back("vil_image_view_base_sptr"); //: original image 17 input_types.emplace_back("vil_image_view_base_sptr"); //: filtering mask (will make all pixels with mask=false zero 18 ok = pro.set_input_types(input_types); 19 if (!ok) return ok; 20 21 //output 22 std::vector<std::string> output_types; 23 output_types.emplace_back("vil_image_view_base_sptr"); 24 ok = pro.set_output_types(output_types); 25 if (!ok) return ok; 26 return true; 27 } 28 29 //: Execute the process vil_filter_image_process(bprb_func_process & pro)30bool vil_filter_image_process(bprb_func_process& pro) 31 { 32 // Sanity check 33 if (pro.n_inputs()< 2) { 34 std::cout << "vil_filter_image_process: The input number should be 3" << std::endl; 35 return false; 36 } 37 38 unsigned i=0; 39 //Retrieve image from input 40 vil_image_view_base_sptr image = pro.get_input<vil_image_view_base_sptr>(i++); 41 vil_image_view_base_sptr mask_inp = pro.get_input<vil_image_view_base_sptr>(i++); 42 43 if (mask_inp->pixel_format() != VIL_PIXEL_FORMAT_BOOL) { 44 std::cout << "ERROR in vil_filter_image_process() -- input mask format is not BOOL!\n"; 45 return false; 46 } 47 vil_image_view<bool> mask(mask_inp); 48 vil_image_view<vxl_byte> out_img(image); 49 50 for (unsigned i = 0; i < image->ni(); i++) 51 for (unsigned j = 0; j < image->nj(); j++) 52 if (!mask(i,j)) 53 out_img(i, j) = 0; 54 55 pro.set_output_val<vil_image_view_base_sptr>(0, new vil_image_view<vxl_byte>(out_img)); 56 return true; 57 } 58