licornea_tools
cg_cors_viewer_f.cc
Go to the documentation of this file.
1 #include "../lib/args.h"
2 #include "../lib/opencv.h"
3 #include "../lib/intrinsics.h"
4 #include "../lib/dataset.h"
5 #include "../lib/misc.h"
6 #include "../lib/image_io.h"
7 #include "../lib/viewer.h"
8 #include "../lib/string.h"
9 #include "../lib/random_color.h"
10 #include "../lib/filesystem.h"
11 #include "../lib/image_io.h"
13 #include "lib/feature_points.h"
14 #include <cstdlib>
15 #include <iostream>
16 #include <string>
17 
18 using namespace tlz;
19 
20 const real max_viz_depth = 6000;
21 
22 int main(int argc, const char* argv[]) {
23  get_args(argc, argv, "dataset_parameters.json cors.json closeup? [dataset_group]");
24  dataset datas = dataset_arg();
26  bool closeup = bool_opt_arg("closeup");
27  std::string dataset_group_name = string_opt_arg(cors.dataset_group);
28 
29  dataset_group datag = datas.group(dataset_group_name);
30 
31  cv::Size sz = datag.image_size_with_border();
32  sz.height += 20;
33  viewer view("Image Correspondences Viewer", sz, true);
34 
35  auto feature_names_s = get_feature_names(cors);
36  std::vector<std::string> feature_names(feature_names_s.begin(), feature_names_s.end());
37 
38  auto& feature_slider = view.add_int_slider("feature", 0, 0, feature_names.size()-1);
39  auto& x_slider = view.add_int_slider("X", datas.x_mid(), datas.x_min(), datas.x_max(), datas.x_step());
40  auto& y_slider = view.add_int_slider("Y", datas.y_mid(), datas.y_min(), datas.y_max(), datas.y_step());
41  auto& depth_opacity_slider = view.add_real_slider("depth op", 0.0, 0.0, 1.0);
42  auto& d_min_slider = view.add_real_slider("d min", 0, 0, max_viz_depth);
43  auto& d_max_slider = view.add_real_slider("d max", max_viz_depth, 0, max_viz_depth);
44  auto& dots_opacity_slider = view.add_real_slider("dots op", 0.5, 0, 1.0);
45 
46 
47  view.update_callback = [&]() {
48  view_index idx(x_slider, y_slider);
49  if(! datas.valid(idx)) return;
50 
51  const std::string& feature_name = feature_names.at(feature_slider);
52  const image_correspondence_feature& feature = cors.features.at(feature_name);
53 
54  view.clear();
55 
56  cv::Mat_<cv::Vec3b> img;
57  {
58  std::string image_filename = datag.view(idx).image_filename();
59  std::string depth_filename = datag.view(idx).depth_filename();
60 
61  cv::Mat_<uchar> gray_img = cv::imread(image_filename, CV_LOAD_IMAGE_GRAYSCALE);
62  if(gray_img.empty()) {
63  gray_img = cv::Mat_<uchar>(datag.image_size_with_border());
64  gray_img.setTo(0);
65  }
66 
67  if(depth_opacity_slider > 0.0 && file_exists(depth_filename)) {
68  cv::Mat_<ushort> depth_img = load_depth(depth_filename);
69  cv::Mat_<uchar> viz_depth_img = viewer::visualize_depth(depth_img, d_min_slider, d_max_slider);
70  cv::addWeighted(gray_img, 1.0-depth_opacity_slider, viz_depth_img, depth_opacity_slider, 0.0, gray_img);
71  }
72 
73  cv::cvtColor(gray_img, img, CV_GRAY2BGR);
74  }
75 
76  cv::Vec3b col = random_color(string_hash(feature_name));
77 
78  try {
79  if(closeup) {
80  img = visualize_view_points_closeup(feature, img, col, idx, dots_opacity_slider, datag.image_border());
81  view.draw(cv::Rect(0, 0, sz.width, sz.height), img);
82  } else {
83  img = visualize_view_points(feature, img, col, 1, datag.image_border());
84  view.draw(cv::Point(0, 0), img);
85  }
86  } catch(const std::exception&) { return; }
87 
88  view.draw_text(cv::Rect(10, sz.height-20, sz.width-20, 20), "feature: " + feature_name + ", view: " + std::to_string(idx.x) + ", " + std::to_string(idx.y));
89  };
90 
91  view.show_modal();
92 }
real_slider & add_real_slider(const std::string &caption, real default_val, real min_val, real max_val, int steps=100)
Definition: viewer.cc:273
cv::Mat_< cv::Vec3b > visualize_view_points(const image_correspondence_feature &feature, const cv::Mat_< cv::Vec3b > &back_img, const cv::Vec3b &col, int dot_radius, const border &bord)
cv::Size image_size_with_border() const
Definition: dataset.cc:101
bool file_exists(const std::string &filename)
int x_step() const
Definition: dataset.cc:173
static cv::Mat_< uchar > visualize_depth(const cv::Mat &, float min_d, float max_d)
Definition: viewer.cc:95
std::string image_filename() const
Definition: dataset.cc:64
cv::Mat_< cv::Vec3b > visualize_view_points_closeup(const image_correspondence_feature &feature, const cv::Mat_< cv::Vec3b > &img, const cv::Vec3b &col, const view_index &ref_idx, real dots_opacity, const border &bord)
void draw(const cv::Mat_< cv::Vec3b > &, real blend=1.0)
Definition: viewer.cc:119
border image_border() const
Definition: dataset.cc:96
int x_max() const
Definition: dataset.cc:169
int x_min() const
Definition: dataset.cc:165
void show_modal()
Definition: viewer.cc:230
Set of features, each on set of views.
cv::Mat_< ushort > load_depth(const std::string &filename)
Definition: image_io.cc:35
dataset_view view(int x) const
Definition: dataset.cc:105
cv::Vec3b random_color(int i)
Definition: random_color.cc:8
int x_mid() const
Definition: dataset.cc:186
const real max_viz_depth
bool valid(view_index) const
Definition: dataset.cc:231
std::string depth_filename() const
Definition: dataset.cc:68
std::map< std::string, image_correspondence_feature > features
dataset dataset_arg()
Definition: dataset.cc:297
std::vector< std::string > get_feature_names(const image_correspondences &cors)
double real
Definition: common.h:16
int y_step() const
Definition: dataset.cc:206
image_correspondences image_correspondences_arg()
int string_hash(const std::string &str)
Definition: string.cc:75
std::string to_string(const T &)
Feature on set of views. Optionally one view is "reference".
int y_max() const
Definition: dataset.cc:201
void draw_text(cv::Rect rect, const std::string &text, text_alignment=left)
Definition: viewer.cc:182
int_slider & add_int_slider(const std::string &caption, int default_val, int min_val, int max_val, int step=1)
Definition: viewer.cc:263
bool bool_opt_arg(const std::string &expected, bool def=false)
Definition: args.h:62
void clear(int width, int height)
Definition: viewer.cc:76
int main(int argc, const char *argv[])
int y_min() const
Definition: dataset.cc:196
dataset_group group(const std::string &grp) const
Definition: dataset.cc:265
std::function< void()> update_callback
Definition: viewer.h:40
int y_mid() const
Definition: dataset.cc:226
std::string string_opt_arg(const std::string &def="")
Definition: args.h:36
void get_args(int argc, const char *argv[], const std::string &usage)
Definition: args.cc:49