MCPcopy Create free account
hub / github.com/colmap/colmap / GetMaxOverlappingImages

Method GetMaxOverlappingImages

src/colmap/mvs/model.cc:119–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

117}
118
119std::vector<std::vector<int>> Model::GetMaxOverlappingImages(
120 const size_t num_images, const double min_triangulation_angle) const {
121 std::vector<std::vector<int>> overlapping_images(images.size());
122
123 const float min_triangulation_angle_rad = DegToRad(min_triangulation_angle);
124
125 const auto shared_num_points = ComputeSharedPoints();
126
127 const float kTriangulationAnglePercentile = 75;
128 const auto triangulation_angles =
129 ComputeTriangulationAngles(kTriangulationAnglePercentile);
130
131 for (size_t image_idx = 0; image_idx < images.size(); ++image_idx) {
132 const auto& shared_images = shared_num_points.at(image_idx);
133 const auto& overlapping_triangulation_angles =
134 triangulation_angles.at(image_idx);
135
136 std::vector<std::pair<int, int>> ordered_images;
137 ordered_images.reserve(shared_images.size());
138 for (const auto& [image_idx, count] : shared_images) {
139 if (overlapping_triangulation_angles.at(image_idx) >=
140 min_triangulation_angle_rad) {
141 ordered_images.emplace_back(image_idx, count);
142 }
143 }
144
145 const size_t eff_num_images = std::min(ordered_images.size(), num_images);
146 if (eff_num_images < shared_images.size()) {
147 std::partial_sort(ordered_images.begin(),
148 ordered_images.begin() + eff_num_images,
149 ordered_images.end(),
150 [](const std::pair<int, int> image1,
151 const std::pair<int, int> image2) {
152 return image1.second > image2.second;
153 });
154 } else {
155 std::sort(ordered_images.begin(),
156 ordered_images.end(),
157 [](const std::pair<int, int> image1,
158 const std::pair<int, int> image2) {
159 return image1.second > image2.second;
160 });
161 }
162
163 overlapping_images[image_idx].reserve(eff_num_images);
164 for (size_t i = 0; i < eff_num_images; ++i) {
165 overlapping_images[image_idx].push_back(ordered_images[i].first);
166 }
167 }
168
169 return overlapping_images;
170}
171
172const std::vector<std::vector<int>>& Model::GetMaxOverlappingImagesFromPMVS()
173 const {

Callers 2

TESTFunction · 0.80
RunMethod · 0.80

Calls 4

DegToRadFunction · 0.85
sizeMethod · 0.80
beginMethod · 0.45
endMethod · 0.45

Tested by 1

TESTFunction · 0.64