1 // This is brl/bpro/core/vil_pro/processes/vil_mask_image_using_ids_process.cxx 2 #include <iostream> 3 #include <string> 4 #include <bprb/bprb_func_process.h> 5 //: 6 // \file Mask all ids except the given one in an image using another id image (should be exactly same size) 7 8 #include "../vil_math_functors.h" 9 #include "vil/vil_convert.h" 10 #include <bprb/bprb_parameters.h> 11 #ifdef _MSC_VER 12 # include "vcl_msvc_warnings.h" 13 #endif 14 #include "vil/vil_image_view_base.h" 15 #include "vil/vil_transform.h" 16 #include "vil/vil_math.h" 17 18 //: Constructor vil_mask_image_using_ids_process_cons(bprb_func_process & pro)19bool vil_mask_image_using_ids_process_cons(bprb_func_process& pro) 20 { 21 //input 22 bool ok=false; 23 std::vector<std::string> input_types; 24 input_types.emplace_back("vil_image_view_base_sptr"); // input 25 input_types.emplace_back("vil_image_view_base_sptr"); // mask image 26 input_types.emplace_back("unsigned"); // input id (all the other ids will be masked) 27 ok = pro.set_input_types(input_types); 28 if (!ok) return ok; 29 30 //output 31 std::vector<std::string> output_types; 32 output_types.emplace_back("vil_image_view_base_sptr"); // output 33 ok = pro.set_output_types(output_types); 34 if (!ok) return ok; 35 return true; 36 } 37 38 39 //: Execute the process vil_mask_image_using_ids_process(bprb_func_process & pro)40bool vil_mask_image_using_ids_process(bprb_func_process& pro) 41 { 42 // Sanity check 43 if (pro.n_inputs()< 3) { 44 std::cout << "vil_map_image_binary_process: The input number should be 3" << std::endl; 45 return false; 46 } 47 48 unsigned i=0; 49 vil_image_view_base_sptr image_sptr = pro.get_input<vil_image_view_base_sptr>(i++); 50 vil_image_view_base_sptr mask_image_sptr = pro.get_input<vil_image_view_base_sptr>(i++); 51 auto idi = pro.get_input<unsigned>(i++); 52 auto id = (unsigned char)idi; 53 54 unsigned ni = image_sptr->ni(); 55 unsigned nj = image_sptr->nj(); 56 if (ni != mask_image_sptr->ni() || nj != mask_image_sptr->nj()) { 57 std::cerr << "In vil_mask_image_using_ids_process() - incompatible input images!\n"; 58 return false; 59 } 60 61 vil_image_view<float> image(image_sptr); 62 vil_image_view<vxl_byte> mask_image(mask_image_sptr); 63 vil_image_view<float> out_image(ni, nj); 64 out_image.fill(-100000); 65 66 vil_image_view<float> dest(ni, nj); 67 for (unsigned i = 0; i < ni; i++) 68 for (unsigned j = 0; j < nj; j++) { 69 if (id == mask_image(i,j)) 70 out_image(i,j) = image(i,j); 71 } 72 73 vil_image_view_base_sptr out_image_sptr = new vil_image_view<float>(out_image); 74 pro.set_output_val<vil_image_view_base_sptr>(0, out_image_sptr); 75 return true; 76 } 77