ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
extraction.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 "base/database.h"
11 #include "base/image_reader.h"
12 #include "feature/sift.h"
13 #include "util/opengl_utils.h"
14 #include "util/threading.h"
15 
16 namespace colmap {
17 
18 namespace internal {
19 
20 struct ImageData;
21 
22 } // namespace internal
23 
24 // Feature extraction class to extract features for all images in a directory.
25 class SiftFeatureExtractor : public Thread {
26 public:
27  SiftFeatureExtractor(const ImageReaderOptions& reader_options,
28  const SiftExtractionOptions& sift_options);
29 
30 private:
31  void Run();
32 
33  const ImageReaderOptions reader_options_;
34  const SiftExtractionOptions sift_options_;
35 
36  Database database_;
37  ImageReader image_reader_;
38 
39  std::vector<std::unique_ptr<Thread>> resizers_;
40  std::vector<std::unique_ptr<Thread>> extractors_;
41  std::unique_ptr<Thread> writer_;
42 
43  std::unique_ptr<JobQueue<internal::ImageData>> resizer_queue_;
44  std::unique_ptr<JobQueue<internal::ImageData>> extractor_queue_;
45  std::unique_ptr<JobQueue<internal::ImageData>> writer_queue_;
46 };
47 
48 // Import features from text files. Each image must have a corresponding text
49 // file with the same name and an additional ".txt" suffix.
50 class FeatureImporter : public Thread {
51 public:
52  FeatureImporter(const ImageReaderOptions& reader_options,
53  const std::string& import_path);
54 
55 private:
56  void Run();
57 
58  const ImageReaderOptions reader_options_;
59  const std::string import_path_;
60 };
61 
63 // Implementation
65 
66 namespace internal {
67 
68 struct ImageData {
70 
75 
78 };
79 
80 class ImageResizerThread : public Thread {
81 public:
82  ImageResizerThread(const int max_image_size,
83  JobQueue<ImageData>* input_queue,
84  JobQueue<ImageData>* output_queue);
85 
86 private:
87  void Run();
88 
89  const int max_image_size_;
90 
91  JobQueue<ImageData>* input_queue_;
92  JobQueue<ImageData>* output_queue_;
93 };
94 
96 public:
98  const std::shared_ptr<Bitmap>& camera_mask,
99  JobQueue<ImageData>* input_queue,
100  JobQueue<ImageData>* output_queue);
101 
102 private:
103  void Run();
104 
105  const SiftExtractionOptions sift_options_;
106  std::shared_ptr<Bitmap> camera_mask_;
107 
108  std::unique_ptr<OpenGLContextManager> opengl_context_;
109 
110  JobQueue<ImageData>* input_queue_;
111  JobQueue<ImageData>* output_queue_;
112 };
113 
114 class FeatureWriterThread : public Thread {
115 public:
116  FeatureWriterThread(const size_t num_images,
117  Database* database,
118  JobQueue<ImageData>* input_queue);
119 
120 private:
121  void Run();
122 
123  const size_t num_images_;
124  Database* database_;
125  JobQueue<ImageData>* input_queue_;
126 };
127 
128 } // namespace internal
129 
130 } // namespace colmap
FeatureImporter(const ImageReaderOptions &reader_options, const std::string &import_path)
Definition: extraction.cc:237
SiftFeatureExtractor(const ImageReaderOptions &reader_options, const SiftExtractionOptions &sift_options)
Definition: extraction.cc:84
FeatureWriterThread(const size_t num_images, Database *database, JobQueue< ImageData > *input_queue)
Definition: extraction.cc:428
ImageResizerThread(const int max_image_size, JobQueue< ImageData > *input_queue, JobQueue< ImageData > *output_queue)
Definition: extraction.cc:303
SiftFeatureExtractorThread(const SiftExtractionOptions &sift_options, const std::shared_ptr< Bitmap > &camera_mask, JobQueue< ImageData > *input_queue, JobQueue< ImageData > *output_queue)
Definition: extraction.cc:343
Eigen::Matrix< uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > FeatureDescriptors
Definition: types.h:79
std::vector< FeatureKeypoint > FeatureKeypoints
Definition: types.h:77
FeatureKeypoints keypoints
Definition: extraction.h:76
ImageReader::Status status
Definition: extraction.h:69
FeatureDescriptors descriptors
Definition: extraction.h:77