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

Method ComputeModelOriginAndScale

src/colmap/ui/model_viewer_widget.cc:978–1025  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

976}
977
978void ModelViewerWidget::ComputeModelOriginAndScale() {
979 std::vector<double> x_coords;
980 std::vector<double> y_coords;
981 std::vector<double> z_coords;
982
983 if (!reg_image_ids.empty()) {
984 x_coords.resize(reg_image_ids.size());
985 y_coords.resize(reg_image_ids.size());
986 z_coords.resize(reg_image_ids.size());
987 for (size_t i = 0; i < reg_image_ids.size(); ++i) {
988 const Image& image = images[reg_image_ids[i]];
989 const Eigen::Vector3d proj_center = image.ProjectionCenter();
990 x_coords[i] = proj_center.x();
991 y_coords[i] = proj_center.y();
992 z_coords[i] = proj_center.z();
993 }
994 } else if (point_cloud.has_value() && !point_cloud->empty()) {
995 x_coords.reserve(point_cloud->size());
996 y_coords.reserve(point_cloud->size());
997 z_coords.reserve(point_cloud->size());
998 for (const auto& point : *point_cloud) {
999 x_coords.push_back(point.x);
1000 y_coords.push_back(point.y);
1001 z_coords.push_back(point.z);
1002 }
1003 } else if (surface_mesh.has_value() && !surface_mesh->mesh.vertices.empty()) {
1004 x_coords.reserve(surface_mesh->mesh.vertices.size());
1005 y_coords.reserve(surface_mesh->mesh.vertices.size());
1006 z_coords.reserve(surface_mesh->mesh.vertices.size());
1007 for (const auto& vertex : surface_mesh->mesh.vertices) {
1008 x_coords.push_back(vertex.x);
1009 y_coords.push_back(vertex.y);
1010 z_coords.push_back(vertex.z);
1011 }
1012 } else {
1013 model_origin_.setZero();
1014 model_scale_ = 1;
1015 return;
1016 }
1017
1018 model_origin_ =
1019 -Eigen::Vector3d(Median(x_coords), Median(y_coords), Median(z_coords));
1020 model_scale_ =
1021 1. / std::max({Percentile(x_coords, 95) - Percentile(x_coords, 5),
1022 Percentile(y_coords, 95) - Percentile(y_coords, 5),
1023 Percentile(z_coords, 95) - Percentile(z_coords, 5),
1024 1e-6});
1025}
1026
1027void ModelViewerWidget::Upload() {
1028 point_colormap_->Prepare(cameras, images, points3D, reg_image_ids);

Callers

nothing calls this directly

Calls 5

MedianFunction · 0.85
PercentileFunction · 0.85
emptyMethod · 0.80
sizeMethod · 0.80
ProjectionCenterMethod · 0.80

Tested by

no test coverage detected