12 #include <unordered_set>
73 Eigen::Vector3f(FLT_MAX, FLT_MAX, FLT_MAX));
85 const std::string& workspace_path,
86 const std::string& workspace_format,
87 const std::string& pmvs_option_name,
88 const std::string& input_type);
95 void InitFusedPixelMask(
int image_idx,
size_t width,
size_t height);
96 void Fuse(
const int thread_id,
102 const std::string workspace_path_;
103 const std::string workspace_format_;
104 const std::string pmvs_option_name_;
105 const std::string input_type_;
106 const float max_squared_reproj_error_;
107 const float min_cos_normal_error_;
109 std::unique_ptr<Workspace> workspace_;
110 std::vector<char> used_images_;
111 std::vector<char> fused_images_;
112 std::vector<std::vector<int>> overlapping_images_;
115 std::vector<Mat<char>> fused_pixel_masks_;
116 std::vector<std::pair<int, int>> depth_map_sizes_;
117 std::vector<std::pair<float, float>> bitmap_scales_;
118 std::vector<Eigen::Matrix<float, 3, 4, Eigen::RowMajor>> P_;
119 std::vector<Eigen::Matrix<float, 3, 4, Eigen::RowMajor>> inv_P_;
120 std::vector<Eigen::Matrix<float, 3, 3, Eigen::RowMajor>> inv_R_;
126 int traversal_depth = -1;
127 FusionData(
int image_idx,
int row,
int col,
int traversal_depth)
128 : image_idx(image_idx),
131 traversal_depth(traversal_depth) {}
132 bool operator()(
const FusionData& data1,
const FusionData& data2) {
133 return data1.image_idx > data2.image_idx;
138 std::vector<PlyPoint> fused_points_;
139 std::vector<std::vector<int>> fused_points_visibility_;
141 std::vector<std::vector<PlyPoint>> task_fused_points_;
142 std::vector<std::vector<std::vector<int>>> task_fused_points_visibility_;
158 const std::string&
path,
159 const std::vector<std::vector<int>>& points_visibility);
const std::vector< std::vector< int > > & GetFusedPointsVisibility() const
const std::vector< PlyPoint > & GetFusedPoints() const
StereoFusion(const StereoFusionOptions &options, const std::string &workspace_path, const std::string &workspace_format, const std::string &pmvs_option_name, const std::string &input_type)
CLOUDVIEWER_HOST_DEVICE Pair< First, Second > make_pair(const First &_first, const Second &_second)
static const std::string path
void WritePointsVisibility(const std::string &path, const std::vector< std::vector< int >> &points_visibility)
const image_t kInvalidImageId
std::pair< Eigen::Vector3f, Eigen::Vector3f > bounding_box