licornea_tools
relative_camera_positions.cc
Go to the documentation of this file.
2 #include "../../../lib/string.h"
3 #include <set>
4 
5 namespace tlz {
6 
7 
8 namespace {
9 
10 std::string encode_key_(const relative_camera_positions::key_type& key) {
11  return encode_view_index(key.first) + ";" + encode_view_index(key.second);
12 }
13 
14 relative_camera_positions::key_type decode_key_(const std::string& encoded_key) {
15  auto arr = explode(';', encoded_key);
16  view_index ref_idx = decode_view_index(arr[0]);
17  view_index target_idx = decode_view_index(arr[1]);
18  return { ref_idx, target_idx };
19 }
20 
21 }
22 
25  for(const auto& kv : positions) {
26  const view_index& ref_idx = kv.first.first;
27  const view_index& target_idx = kv.first.second;
28  const vec2& pos = kv.second;
29  map[ref_idx].emplace_back(target_idx, pos);
30  }
31  return map;
32 }
33 
34 
37  for(const auto& kv : positions) {
38  const view_index& ref_idx = kv.first.first;
39  const view_index& target_idx = kv.first.second;
40  const vec2& pos = kv.second;
41  map[target_idx].emplace_back(ref_idx, pos);
42  }
43  return map;
44 
45 }
46 
47 
48 std::vector<view_index> get_reference_views(const relative_camera_positions& rcpos) {
49  std::set<view_index> set;
50  for(const auto& kv : rcpos.positions) set.insert(kv.first.first);
51  return std::vector<view_index>(set.begin(), set.end());
52 }
53 
54 
55 std::vector<view_index> get_target_views(const relative_camera_positions& rcpos) {
56  std::set<view_index> set;
57  for(const auto& kv : rcpos.positions) set.insert(kv.first.second);
58  return std::vector<view_index>(set.begin(), set.end());
59 }
60 
61 
63  json j_rcpos = json::object();
64  for(const auto& kv : rcpos.positions) {
65  const auto& key = kv.first;
66  const vec2& pos = kv.second;
67  j_rcpos[encode_key_(key)] = encode_mat(pos);
68  }
69  return j_rcpos;
70 }
71 
72 
75  for(auto it = j_rcpos.begin(); it != j_rcpos.end(); ++it) {
76  auto key = decode_key_(it.key());
77  vec2 pos = decode_mat(it.value());
78  rcpos.positions[key] = pos;
79  }
80  return rcpos;
81 }
82 
85 }
86 
87 }
target_reference_positions_type to_target_reference_positions() const
std::vector< view_index > get_target_views(const relative_camera_positions &rcpos)
std::string encode_view_index(view_index idx)
Definition: dataset.cc:275
std::pair< reference_view_index, target_view_index > key_type
cv::Vec< real, 2 > vec2
Definition: common.h:22
cv::Mat_< real > decode_mat(const json &j)
Definition: json.cc:32
std::map< target_view_index, std::vector< std::pair< reference_view_index, vec2 >>> target_reference_positions_type
json json_arg()
Definition: json.h:34
relative_camera_positions relative_camera_positions_arg()
std::vector< view_index > get_reference_views(const relative_camera_positions &rcpos)
json encode_mat(const Mat &mat)
Definition: json.h:19
std::map< reference_view_index, std::vector< std::pair< target_view_index, vec2 >>> reference_target_positions_type
view_index decode_view_index(const std::string &key)
Definition: dataset.cc:281
std::map< key_type, vec2 > positions
relative_camera_positions decode_relative_camera_positions(const json &j_rcpos)
reference_target_positions_type to_reference_target_positions() const
nlohmann::json json
Definition: json.h:11
std::vector< std::string > explode(char separator, const std::string &str)
Definition: string.cc:15
json encode_relative_camera_positions(const relative_camera_positions &rcpos)