66
77#include < aliceVision/types.hpp>
88
9- #include < aliceVision/system/Timer.hpp>
109#include < aliceVision/system/Logger.hpp>
1110#include < aliceVision/system/main.hpp>
1211#include < aliceVision/cmdline/cmdline.hpp>
2322#include < aliceVision/track/TracksHandler.hpp>
2423#include < aliceVision/dataio/json.hpp>
2524
26-
2725#include < boost/program_options.hpp>
2826#include < filesystem>
2927
@@ -39,7 +37,7 @@ namespace fs = std::filesystem;
3937
4038int aliceVision_main (int argc, char ** argv)
4139{
42- // command -line parameters
40+ // Command -line parameters
4341 std::string sfmDataFilename;
4442 std::string sfmDataOutputFilename;
4543 std::string tracksFilename;
@@ -49,39 +47,49 @@ int aliceVision_main(int argc, char** argv)
4947 int randomSeed = std::mt19937::default_seed;
5048 double angularTolerance = 5.0 ;
5149
50+ // clang-format off
5251 po::options_description requiredParams (" Required parameters" );
5352 requiredParams.add_options ()
54- (" input,i" , po::value<std::string>(&sfmDataFilename)->required (), " SfMData file." )
55- (" output,o" , po::value<std::string>(&sfmDataOutputFilename)->required (), " SfMData output file." )
56- (" tracksFilename,t" , po::value<std::string>(&tracksFilename)->required (), " Tracks file." )
57- (" pairs,p" , po::value<std::string>(&pairsDirectory)->required (), " Path to the pairs directory." );
53+ (" input,i" , po::value<std::string>(&sfmDataFilename)->required (),
54+ " SfMData file." )
55+ (" output,o" , po::value<std::string>(&sfmDataOutputFilename)->required (),
56+ " SfMData output file." )
57+ (" tracksFilename,t" , po::value<std::string>(&tracksFilename)->required (),
58+ " Tracks file." )
59+ (" pairs,p" , po::value<std::string>(&pairsDirectory)->required (),
60+ " Path to the pairs directory." );
5861
5962 po::options_description optionalParams (" Optional parameters" );
6063 optionalParams.add_options ()
61- (" rotationAveragingMethod" , po::value<sfm::ERotationAveragingMethod>(&rotationAveragingMethod)->default_value (rotationAveragingMethod))
62- (" angularTolerance" , po::value<double >(&angularTolerance)->default_value (angularTolerance));
64+ (" rotationAveragingMethod" , po::value<sfm::ERotationAveragingMethod>(&rotationAveragingMethod)->default_value (rotationAveragingMethod),
65+ " Method for rotation averaging: \n "
66+ " - L1_minimization: Use L1 minimization\n "
67+ " - L2_minimization: Use L2 minimization" )
68+ (" angularTolerance" , po::value<double >(&angularTolerance)->default_value (angularTolerance),
69+ " Angular (in degrees) tolerance for a given triplet." );
70+ // clang-format on
6371
64- CmdLine cmdline (" AliceVision SfM Bootstraping " );
72+ CmdLine cmdline (" AliceVision Global Rotation Estimating " );
6573
6674 cmdline.add (requiredParams);
67- if (!cmdline.execute (argc, argv))
75+ cmdline.add (optionalParams);
76+ if (!cmdline.execute (argc, argv))
6877 {
6978 return EXIT_FAILURE;
7079 }
7180
72- // set maxThreads
81+ // Set maxThreads
7382 HardwareContext hwc = cmdline.getHardwareContext ();
7483 omp_set_num_threads (hwc.getMaxThreads ());
7584
76- // load input SfMData scene
85+ // Load input SfMData scene
7786 sfmData::SfMData sfmData;
7887 if (!sfmDataIO::load (sfmData, sfmDataFilename, sfmDataIO::ESfMData::ALL))
7988 {
8089 ALICEVISION_LOG_ERROR (" The input SfMData file '" + sfmDataFilename + " ' cannot be read." );
8190 return EXIT_FAILURE;
8291 }
8392
84-
8593 // Load tracks
8694 ALICEVISION_LOG_INFO (" Load tracks" );
8795 track::TracksHandler tracksHandler;
@@ -91,8 +99,7 @@ int aliceVision_main(int argc, char** argv)
9199 return EXIT_FAILURE;
92100 }
93101
94-
95- // Result of pair estimations are stored in multiple files
102+ // Result of pair estimations are stored in multiple files
96103 std::vector<sfm::ReconstructedPair> reconstructedPairs;
97104 const std::regex regex (" pairs\\ _[0-9]+\\ .json" );
98105 for (const fs::directory_entry & file : boost::make_iterator_range (fs::directory_iterator (pairsDirectory), {}))
@@ -102,11 +109,11 @@ int aliceVision_main(int argc, char** argv)
102109 continue ;
103110 }
104111
105- std::ifstream inputfile (file.path ().string ());
112+ std::ifstream inputfile (file.path ().string ());
106113
107114 boost::json::error_code ec;
108115 std::vector<boost::json::value> values = readJsons (inputfile, ec);
109- for (const boost::json::value & value : values)
116+ for (const boost::json::value& value : values)
110117 {
111118 std::vector<sfm::ReconstructedPair> localVector = boost::json::value_to<std::vector<sfm::ReconstructedPair>>(value);
112119 reconstructedPairs.insert (reconstructedPairs.end (), localVector.begin (), localVector.end ());
@@ -136,14 +143,13 @@ int aliceVision_main(int argc, char** argv)
136143 for (auto & item : globalRotations)
137144 {
138145 sfmData::CameraPose cp;
139- const geometry::Pose3 & p = cp.getTransform ();
146+ const geometry::Pose3& p = cp.getTransform ();
140147 p.rotation () = item.second ;
141148 cp.setRotationOnly (true );
142149
143150 sfmData.getPoses ()[item.first ] = cp;
144151 }
145152
146-
147153 sfmDataIO::save (sfmData, sfmDataOutputFilename, sfmDataIO::ESfMData::ALL);
148154
149155 return EXIT_SUCCESS;
0 commit comments