licornea_tools
depth_remapping.cc
Go to the documentation of this file.
1 #include "../lib/args.h"
2 #include "../lib/point.h"
3 #include "../lib/ply_exporter.h"
4 #include "../lib/image_io.h"
5 #include "../lib/opencv.h"
8 #include "lib/kinect_remapping.h"
9 #include "lib/common.h"
10 #include <cstdlib>
11 #include <iostream>
12 #include <vector>
13 #include <stdexcept>
14 #include <fstream>
15 #include <string>
16 
17 using namespace tlz;
18 
19 
20 void do_depth_remapping(const cv::Mat_<ushort>& in, cv::Mat_<ushort>& out, cv::Mat_<uchar>& out_mask, const kinect_remapping& remap, const std::string& method) {
21  cv::Mat_<real> in_float = in;
22  auto samples = remap.remap_ir_to_color_samples(in_float, in_float);
23  cv::Mat_<real> out_float(texture_height, texture_width);
24  make_depth_densify(method)->densify(samples, out_float, out_mask);
25  out = out_float;
26 }
27 
28 
29 int main(int argc, const char* argv[]) {
30  get_args(argc, argv, "input.png output.png output_mask.png internal_parameters.json method [=was_flipped]");
31  std::string input_filename = in_filename_arg();
32  std::string output_filename = out_filename_opt_arg();
33  std::string output_mask_filename = out_filename_opt_arg();
34  std::string internal_parameters_filename = in_filename_arg();
35  std::string method = string_arg();
36  bool was_flipped = bool_opt_arg("was_flipped", true);
37 
38  std::cout << "reading parameters" << std::endl;
39  kinect_internal_parameters internal_parameters = decode_kinect_internal_parameters(import_json_file(internal_parameters_filename));
40  kinect_remapping remap(internal_parameters);
41 
42  std::cout << "reading input depth map" << std::endl;
43  cv::Mat_<ushort> in_depth = load_depth(input_filename.c_str());
44  if(was_flipped) cv::flip(in_depth, in_depth, 1);
45 
46  std::cout << "doing depth densification" << std::endl;
47  cv::Mat_<ushort> out_depth(texture_height, texture_width);
48  cv::Mat_<uchar> out_mask(texture_height, texture_width);
49  do_depth_remapping(in_depth, out_depth, out_mask, remap, method);
50 
51  std::cout << "saving output depth map+mask" << std::endl;
52  if(was_flipped) {
53  cv::flip(out_depth, out_depth, 1);
54  cv::flip(out_mask, out_mask, 1);
55  }
56  if(!output_filename.empty()) save_depth(output_filename.c_str(), out_depth);
57  if(!output_mask_filename.empty()) cv::imwrite(output_mask_filename.c_str(), out_mask);
58 
59  std::cout << "done" << std::endl;
60 }
void save_depth(const std::string &filename, const cv::Mat_< ushort > &depth)
Definition: image_io.cc:43
std::unique_ptr< depth_densify_base > make_depth_densify(const std::string &method)
constexpr std::size_t texture_height
Definition: common.h:13
int main(int argc, const char *argv[])
std::string in_filename_arg()
Definition: args.cc:98
cv::Mat_< ushort > load_depth(const std::string &filename)
Definition: image_io.cc:35
std::vector< sample< Value > > remap_ir_to_color_samples(const cv::Mat_< Value > &distorted_ir_values, const cv::Mat_< Depth > &distorted_ir_z) const
kinect_internal_parameters decode_kinect_internal_parameters(const json &j)
constexpr std::size_t texture_width
Definition: common.h:12
std::string out_filename_opt_arg(const std::string &def)
Definition: args.cc:110
void do_depth_remapping(const cv::Mat_< ushort > &in, cv::Mat_< ushort > &out, cv::Mat_< uchar > &out_mask, const kinect_remapping &remap, const std::string &method)
std::string string_arg()
Definition: args.cc:94
bool bool_opt_arg(const std::string &expected, bool def=false)
Definition: args.h:62
json import_json_file(const std::string &filename)
Definition: json.cc:24
void get_args(int argc, const char *argv[], const std::string &usage)
Definition: args.cc:49