Skip to content

Commit

Permalink
remove out of bounds access
Browse files Browse the repository at this point in the history
  • Loading branch information
servantftechnicolor committed Feb 12, 2025
1 parent eca0ba9 commit 2f889a9
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 18 deletions.
32 changes: 18 additions & 14 deletions src/aliceVision/localization/optimization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,8 @@ bool refineSequence(std::vector<LocalizationResult>& vec_localizationResult,
// just debugging stuff
if (allTheSameIntrinsics)
{
std::vector<double> params = tinyScene.getIntrinsics().at(0).get()->getParameters();
std::vector<double> params = tinyScene.getIntrinsics().at(0)->getParameters();
ALICEVISION_LOG_DEBUG("K before bundle: " << params[0] << " " << params[1] << " " << params[2]);
if (params.size() == 6)
ALICEVISION_LOG_DEBUG("Distortion before bundle: " << params[3] << " " << params[4] << " " << params[5]);
}
}

Expand Down Expand Up @@ -302,20 +300,19 @@ bool refineSequence(std::vector<LocalizationResult>& vec_localizationResult,
// if we used the same intrinsics for all the localization results we need to
// update the intrinsics of each localization result

// get its optimized parameters
std::vector<double> params = tinyScene.getIntrinsics().at(0).get()->getParameters();
ALICEVISION_LOG_DEBUG("Type of intrinsics " << tinyScene.getIntrinsics().at(0).get()->getType());
if (params.size() == 4)
auto intrinsic = tinyScene.getIntrinsics().at(0);
auto casted = camera::IntrinsicScaleOffsetDisto::cast(intrinsic);
std::shared_ptr<camera::Distortion> distortion;
if (casted)
{
// this means that the b_no_distortion has been passed
// set distortion to 0
params.push_back(0);
params.push_back(0);
params.push_back(0);
distortion = casted->getDistortion();
}
assert(params.size() == 6);

// get its optimized parameters
std::vector<double> params = intrinsic->getParameters();

ALICEVISION_LOG_DEBUG("Type of intrinsics " << intrinsic->getType());
ALICEVISION_LOG_DEBUG("K after bundle: " << params[0] << " " << params[1] << " " << params[2] << " " << params[3]);
ALICEVISION_LOG_DEBUG("Distortion after bundle " << params[4] << " " << params[5] << " " << params[6]);

// update the intrinsics of the each localization result
for (size_t viewID = 0; viewID < numViews; ++viewID)
Expand All @@ -327,6 +324,13 @@ bool refineSequence(std::vector<LocalizationResult>& vec_localizationResult,
}
currResult.updateIntrinsics(params);

auto curDistortion = currResult.getIntrinsics().getDistortion();
if (distortion && curDistortion)
{
curDistortion->setParameters(distortion->getParameters());
}


// just debugging -- print reprojection errors
const Mat2X residuals = currResult.computeInliersResiduals();

Expand Down
6 changes: 3 additions & 3 deletions src/aliceVision/rig/ResidualError.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,9 +260,9 @@ class ResidualErrorSecondaryCameraFixedRelativeFunctor
_K = intrinsics.K();

_params.reserve(3);
_params.push_back(intrinsics.getParameters()[3]);
_params.push_back(intrinsics.getParameters()[4]);
_params.push_back(intrinsics.getParameters()[5]);
_params.push_back(intrinsics.getDistortion()->getParameters()[0]);
_params.push_back(intrinsics.getDistortion()->getParameters()[1]);
_params.push_back(intrinsics.getDistortion()->getParameters()[2]);

// Set the observation
_observation[0] = pt2d[0];
Expand Down
2 changes: 1 addition & 1 deletion src/aliceVision/sfm/bundle/costfunctions/projection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ struct ProjectionErrorFunctor
transformedPoint[2] += cam_t[2];
}

const T * innerParameters[2];
const T * innerParameters[3];
innerParameters[0] = parameter_intrinsics;
innerParameters[1] = parameter_distortion;
innerParameters[2] = transformedPoint;
Expand Down

0 comments on commit 2f889a9

Please sign in to comment.