MCPcopy Create free account
hub / github.com/ceres-solver/ceres-solver / SetOrdering

Function SetOrdering

examples/bundle_adjuster.cc:181–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179}
180
181void SetOrdering(BALProblem* bal_problem, Solver::Options* options) {
182 const int num_points = bal_problem->num_points();
183 const int point_block_size = bal_problem->point_block_size();
184 double* points = bal_problem->mutable_points();
185
186 const int num_cameras = bal_problem->num_cameras();
187 const int camera_block_size = bal_problem->camera_block_size();
188 double* cameras = bal_problem->mutable_cameras();
189
190 if (options->use_inner_iterations) {
191 if (CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations) == "cameras") {
192 LOG(INFO) << "Camera blocks for inner iterations";
193 options->inner_iteration_ordering =
194 std::make_shared<ParameterBlockOrdering>();
195 for (int i = 0; i < num_cameras; ++i) {
196 options->inner_iteration_ordering->AddElementToGroup(
197 cameras + camera_block_size * i, 0);
198 }
199 } else if (CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations) == "points") {
200 LOG(INFO) << "Point blocks for inner iterations";
201 options->inner_iteration_ordering =
202 std::make_shared<ParameterBlockOrdering>();
203 for (int i = 0; i < num_points; ++i) {
204 options->inner_iteration_ordering->AddElementToGroup(
205 points + point_block_size * i, 0);
206 }
207 } else if (CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations) ==
208 "cameras,points") {
209 LOG(INFO) << "Camera followed by point blocks for inner iterations";
210 options->inner_iteration_ordering =
211 std::make_shared<ParameterBlockOrdering>();
212 for (int i = 0; i < num_cameras; ++i) {
213 options->inner_iteration_ordering->AddElementToGroup(
214 cameras + camera_block_size * i, 0);
215 }
216 for (int i = 0; i < num_points; ++i) {
217 options->inner_iteration_ordering->AddElementToGroup(
218 points + point_block_size * i, 1);
219 }
220 } else if (CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations) ==
221 "points,cameras") {
222 LOG(INFO) << "Point followed by camera blocks for inner iterations";
223 options->inner_iteration_ordering =
224 std::make_shared<ParameterBlockOrdering>();
225 for (int i = 0; i < num_cameras; ++i) {
226 options->inner_iteration_ordering->AddElementToGroup(
227 cameras + camera_block_size * i, 1);
228 }
229 for (int i = 0; i < num_points; ++i) {
230 options->inner_iteration_ordering->AddElementToGroup(
231 points + point_block_size * i, 0);
232 }
233 } else if (CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations) ==
234 "automatic") {
235 LOG(INFO) << "Choosing automatic blocks for inner iterations";
236 } else {
237 LOG(FATAL) << "Unknown block type for inner iterations: "
238 << CERES_GET_FLAG(FLAGS_blocks_for_inner_iterations);

Callers 1

Calls 7

point_block_sizeMethod · 0.80
camera_block_sizeMethod · 0.80
AddElementToGroupMethod · 0.80
num_pointsMethod · 0.45
mutable_pointsMethod · 0.45
num_camerasMethod · 0.45
mutable_camerasMethod · 0.45

Tested by

no test coverage detected