1 #include <iostream>
2 #include <cstdlib>
3 #include <boxm2/class/boxm2_class_generate_samples.h>
4
5 //executable args
6 #include "vul/vul_arg.h"
7 #include "vul/vul_file.h"
8
9 //boxm2 scene stuff
10 #include <boxm2/io/boxm2_dumb_cache.h>
11 #include <boxm2/boxm2_scene.h>
12 #include <boxm2/boxm2_util.h>
13
14 #ifdef _MSC_VER
15 # include "vcl_msvc_warnings.h"
16 #endif
17
18 //check dirs, exit if not exist
check_dir(std::string & dir)19 void check_dir(std::string& dir)
20 {
21 if (!vul_file::exists(dir)) {
22 std::cout<<"Directory of file does not exist: "<<dir<<std::endl;
23 std::exit(-1);
24 }
25 }
26
27 //push back vector onto vector
28 template <class T>
push_back(std::vector<T> & dest,std::vector<T> & src)29 void push_back(std::vector<T>& dest, std::vector<T>& src)
30 {
31 for (unsigned int i=0; i<src.size(); ++i)
32 dest.push_back(src[i]);
33 }
34
35
main(int argc,char ** argv)36 int main(int argc, char ** argv)
37 {
38 vul_arg<std::string> eoDir("-eoImgs", "EO Image input directory", "");
39 vul_arg<std::string> irDir("-irImgs", "IR Image input directory", "");
40 vul_arg<std::string> xmlDir("-a", "Annotations directory (label me xml files per image)");
41 vul_arg<bool> sparse("-sparse", "Make the sampling of pixels sparse", false);
42 vul_arg_parse(argc, argv);
43
44 //check diarectories
45 check_dir(eoDir());
46 check_dir(irDir());
47 check_dir(xmlDir());
48
49 //grab images and xml files from directory
50 std::vector<std::string> eoImgs;
51 std::vector<std::string> irImgs;
52 std::vector<std::string> xmlFiles;
53 if (vul_file::is_directory(eoDir())) {
54 eoImgs = boxm2_util::images_from_directory(eoDir());
55 irImgs = boxm2_util::images_from_directory(irDir());
56 xmlFiles = boxm2_util::files_from_dir(xmlDir(), "xml");
57 }
58 else {
59 eoImgs.push_back(eoDir());
60 irImgs.push_back(irDir());
61 xmlFiles.push_back(xmlDir());
62 }
63 std::cout<<"Generating samples for "<<eoDir()<<','<<irDir()<<','<<" using "<<xmlDir()<<'\n'
64 <<" num images: "<<xmlFiles.size()<<'\n'
65 <<" num eo: "<<eoImgs.size()<<'\n'
66 <<" num ir: "<<irImgs.size()<<std::endl;
67
68 //set the number of samples K to take from each image
69 auto K = std::size_t(sparse() ? 10000 : 0x7fffffff);
70
71 //boxm2_class_generate_samples sampler(;a
72 std::vector<vnl_vector_fixed<float,4> > allInts;
73 std::vector<std::string> allClasses;
74 for (unsigned int i=0; i<xmlFiles.size(); ++i) {
75 //generate IR samples
76 boxm2_class_generate_samples sampler(xmlFiles[i], eoImgs[i], irImgs[i], K);
77 std::vector<std::string> classes = sampler.classes();
78 std::vector<float> ints = sampler.intensities();
79 std::vector<float> r = sampler.r();
80 std::vector<float> g = sampler.g();
81 std::vector<float> b = sampler.b();
82
83 std::vector<vnl_vector_fixed<float,4> > feats;
84 for (unsigned int i=0; i<r.size(); ++i)
85 feats.emplace_back(ints[i],r[i],g[i],b[i] );
86
87 //stack
88 push_back(allInts, feats);
89 push_back(allClasses, classes);
90 }
91
92 //print samples/write to file
93 for (unsigned int i=0; i<allInts.size(); ++i) {
94 std::cout<<allClasses[i]<<" "<<allInts[i]<<std::endl;
95 }
96 }
97