Skip to content

Commit 060649b

Browse files
authored
Merge pull request #1963 from alicevision/dev/cameraPosePtr
Moving poses to shared pointers
2 parents 5a77873 + 8eead3a commit 060649b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+153
-674
lines changed

meshroom/aliceVision/ImportKnownPoses.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/aliceVision/keyframe/KeyframeSelector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1303,7 +1303,7 @@ bool KeyframeSelector::writeSfMDataFromSfMData(const std::string& mediaPath)
13031303
_selectedFrames[i] = '1';
13041304

13051305
//Make sure to keep the pose
1306-
keyframesPoses.emplace(poseId, inputSfm.getPoses().at(poseId));
1306+
keyframesPoses.assign(poseId, inputSfm.getAbsolutePose(poseId));
13071307
}
13081308

13091309
if (_selectedFrames[i] == '1')

src/aliceVision/localization/optimization.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,9 @@ bool refineSequence(std::vector<LocalizationResult>& vec_localizationResult,
281281
if (b_BA_Status)
282282
{
283283
// get back the results and update the localization result with the refined pose
284-
for (const auto& pose : tinyScene.getPoses())
284+
for (const auto& [poseId, pose] : tinyScene.getPoses().valueRange())
285285
{
286-
const IndexT idPose = pose.first;
287-
vec_localizationResult[idPose].setPose(pose.second.getTransform());
286+
vec_localizationResult[poseId].setPose(pose.getTransform());
288287
}
289288

290289
if (!outputFilename.empty())

src/aliceVision/photometricStereo/normalIntegration.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ void normalIntegration(const sfmData::SfMData& sfmData,
9595

9696
if (sfmData.getPoses().size() > 0)
9797
{
98-
for (auto& poseIt : sfmData.getPoses())
98+
for (auto& [idPose, cameraPose] : sfmData.getPoses().valueRange())
9999
{
100100
// Read associated normal map :
101-
image::readImage(inputPath + "/" + std::to_string(poseIt.first) + "_normals.png", normalsImPNG, image::EImageColorSpace::NO_CONVERSION);
101+
image::readImage(inputPath + "/" + std::to_string(idPose) + "_normals.png", normalsImPNG, image::EImageColorSpace::NO_CONVERSION);
102102

103103
int nbCols = normalsImPNG.cols();
104104
int nbRows = normalsImPNG.rows();
@@ -107,7 +107,7 @@ void normalIntegration(const sfmData::SfMData& sfmData,
107107
for (auto& viewIt : sfmData.getViews())
108108
{
109109
poseId = viewIt.second->getPoseId();
110-
if (poseId == poseIt.first)
110+
if (poseId == idPose)
111111
{
112112
viewId = viewIt.first;
113113
// Get intrinsics associated with this view :
@@ -184,10 +184,10 @@ void normalIntegration(const sfmData::SfMData& sfmData,
184184
// AliceVision uses distance-to-origin convention
185185
convertZtoDistance(depthMap, distanceMap, K);
186186

187-
std::string pathToDM = outputFolder + "/" + std::to_string(poseIt.first) + "_depthMap.exr";
187+
std::string pathToDM = outputFolder + "/" + std::to_string(idPose) + "_depthMap.exr";
188188

189189
// Create pose for metadata
190-
const geometry::Pose3 pose = poseIt.second.getTransform();
190+
const geometry::Pose3 pose = cameraPose.getTransform();
191191
std::shared_ptr<camera::IntrinsicBase> cam = sfmData.getIntrinsics().at(intrinsicId);
192192
std::shared_ptr<camera::Pinhole> camPinHole = std::dynamic_pointer_cast<camera::Pinhole>(cam);
193193
Mat34 P = camPinHole->getProjectiveEquivalent(pose);

src/aliceVision/sfm/LocalBundleAdjustmentGraph.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ void LocalBundleAdjustmentGraph::setAllParametersToRefine(const sfmData::SfMData
6060
_statePerLandmarkId.clear();
6161

6262
// poses
63-
for (sfmData::Poses::const_iterator itPose = sfmData.getPoses().begin(); itPose != sfmData.getPoses().end(); ++itPose)
64-
_statePerPoseId[itPose->first] = EEstimatorParameterState::REFINED;
63+
for (const auto & [poseId, _] : sfmData.getPoses())
64+
{
65+
_statePerPoseId[poseId] = EEstimatorParameterState::REFINED;
66+
}
6567

6668
// intrinsics
6769
for (const auto& itIntrinsic : sfmData.getIntrinsics())
@@ -383,13 +385,12 @@ void LocalBundleAdjustmentGraph::convertDistancesToStates(sfmData::SfMData& sfmD
383385
// - Refined <=> its connected to a refined camera
384386

385387
// poses
386-
for (auto& posePair : sfmData.getPoses())
388+
for (auto& [poseId, pose] : sfmData.getPoses().valueRange())
387389
{
388-
const IndexT poseId = posePair.first;
389390
const int distance = getPoseDistance(poseId);
390391
const EEstimatorParameterState state = getStateFromDistance(distance);
391392

392-
posePair.second.setState(state);
393+
pose.setState(state);
393394

394395
_statePerPoseId[poseId] = state;
395396
}

src/aliceVision/sfm/bundle/BundleAdjustmentCeres.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,8 @@ void BundleAdjustmentCeres::addExtrinsicsToProblem(const sfmData::SfMData& sfmDa
278278
};
279279

280280
// setup poses data
281-
for (const auto& posePair : sfmData.getPoses())
281+
for (const auto& [poseId, pose] : sfmData.getPoses().valueRange())
282282
{
283-
const IndexT poseId = posePair.first;
284-
const sfmData::CameraPose& pose = posePair.second;
285-
286283
// skip camera pose set as Ignored in the Local strategy
287284
if (pose.getState() == EEstimatorParameterState::IGNORED)
288285
{
@@ -834,8 +831,9 @@ void BundleAdjustmentCeres::updateFromSolution(sfmData::SfMData& sfmData, ERefin
834831
if (refinePoses)
835832
{
836833
// absolute poses
837-
for (auto& [poseId, pose] : sfmData.getPoses())
834+
for (auto & [poseId, pose] : sfmData.getPoses().valueRange())
838835
{
836+
// do not update a camera pose set as Ignored or Constant in the Local strategy
839837
if (pose.getState() != EEstimatorParameterState::REFINED)
840838
{
841839
continue;

src/aliceVision/sfm/bundle/bundleAdjustment_Enhanced_test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void createScene(sfmData::SfMData& sfmData, const camera::IntrinsicBase& intrins
9898

9999
geometry::Pose3 pose(T);
100100

101-
sfmData.getPoses().emplace(idview, sfmData::CameraPose(pose));
101+
sfmData.getPoses().assign(idview, sfmData::CameraPose(pose));
102102
sfmData.getViews().emplace(idview, std::make_shared<sfmData::View>("", idview, 0, idview, intrinsic.w(), intrinsic.h()));
103103

104104
Vec3 origin = pose(Vec3(0, 0, 0));
@@ -244,9 +244,9 @@ BOOST_AUTO_TEST_CASE(test_poses)
244244
createScene(sfmData, *pairIntrinsics.first);
245245

246246
srand(0);
247-
for (auto& lps : sfmData.getPoses())
247+
for (auto& [_, pose] : sfmData.getPoses().valueRange())
248248
{
249-
geometry::Pose3 pose3 = lps.second.getTransform();
249+
geometry::Pose3 pose3 = pose.getTransform();
250250
Eigen::Matrix4d T = pose3.getHomogeneous();
251251

252252
Eigen::Vector3d nt = Eigen::Vector3d::Random() * 0.1 + Eigen::Vector3d::UnitZ() * 0.1;
@@ -256,7 +256,7 @@ BOOST_AUTO_TEST_CASE(test_poses)
256256
U.block<3, 3>(0, 0) = nR;
257257
U.block<3, 1>(0, 3) = nt;
258258

259-
lps.second.setTransform(geometry::Pose3(U * T));
259+
pose.setTransform(geometry::Pose3(U * T));
260260
}
261261

262262
sfm::BundleAdjustmentCeres::CeresOptions options;

src/aliceVision/sfm/pipeline/RigSequence.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ void RigSequence::setupRelativePoses()
233233
SubPoseInfo& subPoseInfo = _rigInfoPerSubPose.at(subPoseId);
234234

235235
const View& bestIndependantView = _sfmData.getView(_rigInfoPerFrame.at(subPoseInfo.maxFrameId).at(subPoseId).viewId);
236-
const geometry::Pose3& bestIndependantPose = _sfmData.getPoses().at(bestIndependantView.getPoseId()).getTransform();
236+
const geometry::Pose3& bestIndependantPose = _sfmData.getAbsolutePose(bestIndependantView.getPoseId()).getTransform();
237237

238238
RigSubPose& newSubPose = _rig.getSubPose(subPoseId);
239239
newSubPose.status = ERigSubPoseStatus::ESTIMATED;
@@ -242,7 +242,7 @@ void RigSequence::setupRelativePoses()
242242

243243
if (rigInitialized)
244244
{
245-
const geometry::Pose3& rigPose = _sfmData.getPoses().at(getRigPoseId(_rigId, subPoseInfo.maxFrameId)).getTransform();
245+
const geometry::Pose3& rigPose = _sfmData.getAbsolutePose(getRigPoseId(_rigId, subPoseInfo.maxFrameId)).getTransform();
246246
newSubPose.pose = bestIndependantPose * rigPose.inverse();
247247
} // else pose is Identity
248248
}
@@ -287,13 +287,13 @@ void RigSequence::rigResection(std::set<IndexT>& updatedViews)
287287
const RigSubPose& subPose = _rig.getSubPose(bestSubPoseId);
288288
const View& view = _sfmData.getView(rigFrame.at(bestSubPoseId).viewId);
289289
const IndexT independantPoseId = view.getPoseId();
290-
const CameraPose independantPose = _sfmData.getPoses().at(independantPoseId);
290+
const CameraPose independantPose = _sfmData.getAbsolutePose(independantPoseId);
291291
const CameraPose rigPose(independantPose.getTransform() * subPose.pose.inverse());
292292

293293
ALICEVISION_LOG_DEBUG("Add rig pose:"
294294
<< "\n\t- rig pose id: " << rigPoseId << "\n\t- frame id: " << frameId << "\n\t- sub-pose id: " << bestSubPoseId);
295295

296-
_sfmData.getPoses()[rigPoseId] = rigPose;
296+
_sfmData.getPoses().assign(rigPoseId, rigPose);
297297
}
298298

299299
// remove independent poses and replace with rig pose

src/aliceVision/sfm/pipeline/bootstrapping/Bootstrap.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ bool bootstrapBase(sfmData::SfMData & sfmData,
2828
std::shared_ptr<camera::IntrinsicBase> nextIntrinsics = sfmData.getIntrinsicSharedPtr(nextView.getIntrinsicId());
2929

3030
sfmData::CameraPose cposeNext(otherTreference, false);
31-
sfmData.getPoses()[refView.getPoseId()] = sfmData::CameraPose();
32-
sfmData.getPoses()[nextView.getPoseId()] = cposeNext;
31+
sfmData.getPoses().assign(refView.getPoseId(), sfmData::CameraPose());
32+
sfmData.getPoses().assign(nextView.getPoseId(), cposeNext);
3333

3434
const Mat4 T1 = Eigen::Matrix4d::Identity();
3535
Mat4 T2 = otherTreference.getHomogeneous();
@@ -122,7 +122,7 @@ bool bootstrapMesh(sfmData::SfMData & sfmData,
122122

123123
geometry::Pose3 pose3(pose);
124124
sfmData::CameraPose cpose(pose3, false);
125-
sfmData.getPoses()[viewId] = cpose;
125+
sfmData.getPoses().assign(viewId, cpose);
126126

127127
// Cleanup output
128128
sfmData::Landmarks & outLandmarks = sfmData.getLandmarks();

src/aliceVision/sfm/pipeline/expanding/LbaPolicyConnexity.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,27 @@ void LbaPolicyConnexity::upgradeSfmData(sfmData::SfMData & sfmData, const Connex
3232
/**
3333
* Propagate states to views in sfmData
3434
*/
35-
for (auto & pp : sfmData.getPoses())
35+
for (auto & [poseId, pose] : sfmData.getPoses().valueRange())
3636
{
37-
int d = graph.getDistance(pp.first);
37+
int d = graph.getDistance(poseId);
3838
if (d <= _distanceLimit)
3939
{
40-
if (pp.second.isLocked())
40+
if (pose.isLocked())
4141
{
42-
pp.second.setState(EEstimatorParameterState::CONSTANT);
42+
pose.setState(EEstimatorParameterState::CONSTANT);
4343
}
4444
else
4545
{
46-
pp.second.setState(EEstimatorParameterState::REFINED);
46+
pose.setState(EEstimatorParameterState::REFINED);
4747
}
4848
}
4949
else if (d == (_distanceLimit + 1))
5050
{
51-
pp.second.setState(EEstimatorParameterState::CONSTANT);
51+
pose.setState(EEstimatorParameterState::CONSTANT);
5252
}
5353
else
5454
{
55-
pp.second.setState(EEstimatorParameterState::IGNORED);
55+
pose.setState(EEstimatorParameterState::IGNORED);
5656
}
5757
}
5858

0 commit comments

Comments
 (0)