Skip to content

Commit 5cf45cc

Browse files
author
Fabien Servant
committed
remove out of bounds access
1 parent 5270c66 commit 5cf45cc

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

src/aliceVision/localization/optimization.cpp

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,8 @@ bool refineSequence(std::vector<LocalizationResult>& vec_localizationResult,
236236
// just debugging stuff
237237
if (allTheSameIntrinsics)
238238
{
239-
std::vector<double> params = tinyScene.getIntrinsics().at(0).get()->getParameters();
239+
std::vector<double> params = tinyScene.getIntrinsics().at(0)->getParameters();
240240
ALICEVISION_LOG_DEBUG("K before bundle: " << params[0] << " " << params[1] << " " << params[2]);
241-
if (params.size() == 6)
242-
ALICEVISION_LOG_DEBUG("Distortion before bundle: " << params[3] << " " << params[4] << " " << params[5]);
243241
}
244242
}
245243

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

305-
// get its optimized parameters
306-
std::vector<double> params = tinyScene.getIntrinsics().at(0).get()->getParameters();
307-
ALICEVISION_LOG_DEBUG("Type of intrinsics " << tinyScene.getIntrinsics().at(0).get()->getType());
308-
if (params.size() == 4)
303+
auto intrinsic = tinyScene.getIntrinsics().at(0);
304+
auto casted = camera::IntrinsicScaleOffsetDisto::cast(intrinsic);
305+
std::shared_ptr<camera::Distortion> distortion;
306+
if (casted)
309307
{
310-
// this means that the b_no_distortion has been passed
311-
// set distortion to 0
312-
params.push_back(0);
313-
params.push_back(0);
314-
params.push_back(0);
308+
distortion = casted->getDistortion();
315309
}
316-
assert(params.size() == 6);
310+
311+
// get its optimized parameters
312+
std::vector<double> params = intrinsic->getParameters();
313+
314+
ALICEVISION_LOG_DEBUG("Type of intrinsics " << intrinsic->getType());
317315
ALICEVISION_LOG_DEBUG("K after bundle: " << params[0] << " " << params[1] << " " << params[2] << " " << params[3]);
318-
ALICEVISION_LOG_DEBUG("Distortion after bundle " << params[4] << " " << params[5] << " " << params[6]);
319316

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

327+
auto curDistortion = currResult.getIntrinsics().getDistortion();
328+
if (distortion && curDistortion)
329+
{
330+
curDistortion->setParameters(distortion->getParameters());
331+
}
332+
333+
330334
// just debugging -- print reprojection errors
331335
const Mat2X residuals = currResult.computeInliersResiduals();
332336

src/aliceVision/rig/ResidualError.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,9 @@ class ResidualErrorSecondaryCameraFixedRelativeFunctor
260260
_K = intrinsics.K();
261261

262262
_params.reserve(3);
263-
_params.push_back(intrinsics.getParameters()[3]);
264-
_params.push_back(intrinsics.getParameters()[4]);
265-
_params.push_back(intrinsics.getParameters()[5]);
263+
_params.push_back(intrinsics.getDistortion()->getParameters()[0]);
264+
_params.push_back(intrinsics.getDistortion()->getParameters()[1]);
265+
_params.push_back(intrinsics.getDistortion()->getParameters()[2]);
266266

267267
// Set the observation
268268
_observation[0] = pt2d[0];

src/aliceVision/sfm/bundle/costfunctions/projection.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct ProjectionErrorFunctor
105105
transformedPoint[2] += cam_t[2];
106106
}
107107

108-
const T * innerParameters[2];
108+
const T * innerParameters[3];
109109
innerParameters[0] = parameter_intrinsics;
110110
innerParameters[1] = parameter_distortion;
111111
innerParameters[2] = transformedPoint;

0 commit comments

Comments
 (0)