ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
colormaps.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <Eigen/Core>
11 
12 #include "base/reconstruction.h"
13 #include "util/alignment.h"
14 #include "util/types.h"
15 
16 namespace colmap {
17 
18 // Base class for 3D point color mapping.
20 public:
22  virtual ~PointColormapBase() = default;
23 
24  virtual void Prepare(std::unordered_map<camera_t, Camera>& cameras,
25  std::unordered_map<image_t, Image>& images,
26  std::unordered_map<point3D_t, Point3D>& points3D,
27  std::vector<image_t>& reg_image_ids) = 0;
28 
29  virtual Eigen::Vector4f ComputeColor(const point3D_t point3D_id,
30  const Point3D& point3D) = 0;
31 
32  void UpdateScale(std::vector<float>* values);
33  float AdjustScale(const float gray);
34 
35  float scale;
36  float min;
37  float max;
38  float range;
39  float min_q;
40  float max_q;
41 };
42 
43 // Map color according to RGB value from image.
45 public:
46  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
47  std::unordered_map<image_t, Image>& images,
48  std::unordered_map<point3D_t, Point3D>& points3D,
49  std::vector<image_t>& reg_image_ids) override;
50 
51  Eigen::Vector4f ComputeColor(const point3D_t point3D_id,
52  const Point3D& point3D) override;
53 };
54 
55 // Map color according to error.
57 public:
58  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
59  std::unordered_map<image_t, Image>& images,
60  std::unordered_map<point3D_t, Point3D>& points3D,
61  std::vector<image_t>& reg_image_ids) override;
62 
63  Eigen::Vector4f ComputeColor(const point3D_t point3D_id,
64  const Point3D& point3D) override;
65 };
66 
67 // Map color according to track length.
69 public:
70  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
71  std::unordered_map<image_t, Image>& images,
72  std::unordered_map<point3D_t, Point3D>& points3D,
73  std::vector<image_t>& reg_image_ids) override;
74 
75  Eigen::Vector4f ComputeColor(const point3D_t point3D_id,
76  const Point3D& point3D) override;
77 };
78 
79 // Map color according to ground-resolution.
81 public:
82  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
83  std::unordered_map<image_t, Image>& images,
84  std::unordered_map<point3D_t, Point3D>& points3D,
85  std::vector<image_t>& reg_image_ids) override;
86 
87  Eigen::Vector4f ComputeColor(const point3D_t point3D_id,
88  const Point3D& point3D) override;
89 
90 private:
91  std::unordered_map<point3D_t, float> resolutions_;
92 };
93 
94 // Base class for image color mapping.
96 public:
98  virtual ~ImageColormapBase() = default;
99 
100  virtual void Prepare(std::unordered_map<camera_t, Camera>& cameras,
101  std::unordered_map<image_t, Image>& images,
102  std::unordered_map<point3D_t, Point3D>& points3D,
103  std::vector<image_t>& reg_image_ids) = 0;
104 
105  virtual void ComputeColor(const Image& image,
106  Eigen::Vector4f* plane_color,
107  Eigen::Vector4f* frame_color) = 0;
108 
109  const static Eigen::Vector4f kDefaultPlaneColor;
110  const static Eigen::Vector4f kDefaultFrameColor;
111 };
112 
113 // Use uniform color for all images.
115 public:
116  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
117  std::unordered_map<image_t, Image>& images,
118  std::unordered_map<point3D_t, Point3D>& points3D,
119  std::vector<image_t>& reg_image_ids) override;
120 
121  void ComputeColor(const Image& image,
122  Eigen::Vector4f* plane_color,
123  Eigen::Vector4f* frame_color) override;
124 
127 };
128 
129 // Use color for images with specific words in their name.
131 public:
132  void Prepare(std::unordered_map<camera_t, Camera>& cameras,
133  std::unordered_map<image_t, Image>& images,
134  std::unordered_map<point3D_t, Point3D>& points3D,
135  std::vector<image_t>& reg_image_ids) override;
136 
137  void AddColorForWord(const std::string& word,
138  const Eigen::Vector4f& plane_color,
139  const Eigen::Vector4f& frame_color);
140 
141  void ComputeColor(const Image& image,
142  Eigen::Vector4f* plane_color,
143  Eigen::Vector4f* frame_color) override;
144 
145 private:
146  // The plane and frame colors for different words.
147  std::vector<
148  std::pair<std::string, std::pair<Eigen::Vector4f, Eigen::Vector4f>>>
149  image_name_colors_;
150 };
151 
152 } // namespace colmap
std::shared_ptr< core::Tensor > image
static const Eigen::Vector4f kDefaultPlaneColor
Definition: colormaps.h:109
virtual ~ImageColormapBase()=default
virtual void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids)=0
static const Eigen::Vector4f kDefaultFrameColor
Definition: colormaps.h:110
virtual void ComputeColor(const Image &image, Eigen::Vector4f *plane_color, Eigen::Vector4f *frame_color)=0
void AddColorForWord(const std::string &word, const Eigen::Vector4f &plane_color, const Eigen::Vector4f &frame_color)
Definition: colormaps.cc:233
void ComputeColor(const Image &image, Eigen::Vector4f *plane_color, Eigen::Vector4f *frame_color) override
Definition: colormaps.cc:240
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:226
Eigen::Vector4f uniform_frame_color
Definition: colormaps.h:126
Eigen::Vector4f uniform_plane_color
Definition: colormaps.h:125
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:213
void ComputeColor(const Image &image, Eigen::Vector4f *plane_color, Eigen::Vector4f *frame_color) override
Definition: colormaps.cc:219
virtual void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids)=0
virtual Eigen::Vector4f ComputeColor(const point3D_t point3D_id, const Point3D &point3D)=0
float AdjustScale(const float gray)
Definition: colormaps.cc:59
virtual ~PointColormapBase()=default
void UpdateScale(std::vector< float > *values)
Definition: colormaps.cc:46
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:82
Eigen::Vector4f ComputeColor(const point3D_t point3D_id, const Point3D &point3D) override
Definition: colormaps.cc:96
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:125
Eigen::Vector4f ComputeColor(const point3D_t point3D_id, const Point3D &point3D) override
Definition: colormaps.cc:199
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:69
Eigen::Vector4f ComputeColor(const point3D_t point3D_id, const Point3D &point3D) override
Definition: colormaps.cc:76
Eigen::Vector4f ComputeColor(const point3D_t point3D_id, const Point3D &point3D) override
Definition: colormaps.cc:118
void Prepare(std::unordered_map< camera_t, Camera > &cameras, std::unordered_map< image_t, Image > &images, std::unordered_map< point3D_t, Point3D > &points3D, std::vector< image_t > &reg_image_ids) override
Definition: colormaps.cc:103
uint64_t point3D_t
Definition: types.h:72