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)11 bool 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)30 bool 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