openMVG / OpenMVG_SfMImageListing_Elphel_Camera

OpenMVG Scene initializer for Elphel non central camera.
5 stars 6 forks source link

using only some of the images from the Eyesis-4pi camera #1

Open polto opened 7 years ago

polto commented 7 years ago

Hi Pierre,

Could you please implement a filter to specify only some images from Eyesis-4pi to be used in the reconstruction (for example the two stereo-pairs) ?

Also, since all intrinsic & extrinsic parameters of the rig are known how to disallow OpenMVG to adjust them later during the pipeline ? Regards.

pmoulon commented 7 years ago

Hi @polto,

  1. implement a channel filter must be easy, I will consider this task when pushing a commit for the feature. Stay tuned ;-)
  2. In order to disable intrinsic parameter refinement you must use the option -f NONE on GlobalSfM πŸŽƒ
polto commented 7 years ago

thanks @pmoulon !

pmoulon commented 7 years ago

I let the task as open since I have not yet handle it

pmoulon commented 7 years ago

Feature ready to test. Please checkout the branch develop_channel_filter then you can use the option -c Use a list of ids you wanna keep. If you want to keep sensor 1,2,3,6 you can do -c "1;2;3;6"

polto commented 7 years ago

I have an error trying to build this branch.

root@d01:~/OpenMVG_SfMImageListing_Elphel_Camera_Build# make -j8
Scanning dependencies of target libfastcal
[ 33%] [ 66%] Building C object third_party/libfastcal/CMakeFiles/libfastcal.dir/src/fastcal-query.c.o
Building C object third_party/libfastcal/CMakeFiles/libfastcal.dir/src/fastcal-parser.c.o
Linking C static library liblibfastcal.a
[ 66%] Built target libfastcal
Scanning dependencies of target main_openMVG_SfMImageListing_Elphel_Camera
[100%] Building CXX object CMakeFiles/main_openMVG_SfMImageListing_Elphel_Camera.dir/main.cpp.o
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp: In function β€˜int main(int, char**)’:
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:85:41: error: parameter declared β€˜auto’
         [&channel_to_keep](const auto & val)
                                         ^
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp: In lambda function:
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:87:15: error: β€˜val’ was not declared in this scope
           if (val.empty()) // in order to handle input like ";" or ";;;"
               ^
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:90:32: error: β€˜val’ was not declared in this scope
           std::stringstream os(val);
                                ^
In file included from /usr/include/c++/4.8/algorithm:62:0,
                 from /usr/local/include/openMVG/third_party/eigen/Eigen/Core:160,
                 from /usr/local/include/openMVG/numeric/numeric.h:35,
                 from /root/OpenMVG_SfMImageListing_Elphel_Camera/elphel_utils.hpp:28,
                 from /root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:20:
/usr/include/c++/4.8/bits/stl_algo.h: In instantiation of β€˜_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >; _Funct = main(int, char**)::__lambda14]’:
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:94:7:   required from here
/usr/include/c++/4.8/bits/stl_algo.h:4417:14: error: no match for call to β€˜(main(int, char**)::__lambda14) (std::basic_string<char>&)’
  __f(*__first);
              ^
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:85:26: note: candidate is:
         [&channel_to_keep](const auto & val)
                          ^
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:85:44: note: main(int, char**)::__lambda14
         [&channel_to_keep](const auto & val)
                                            ^
/root/OpenMVG_SfMImageListing_Elphel_Camera/main.cpp:85:44: note:   candidate expects 0 arguments, 1 provided
lsmake[2]: *** [CMakeFiles/main_openMVG_SfMImageListing_Elphel_Camera.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/main_openMVG_SfMImageListing_Elphel_Camera.dir/all] Error 2
make: *** [all] Error 2
pmoulon commented 7 years ago

Does changing auto to std::string is working?

polto commented 7 years ago

oh yeah ! launching a long test. :)

pmoulon commented 7 years ago

Using auto as lambda parameter is authorized in C++14 or not C++11, that is explaining the error. πŸ‘

polto commented 7 years ago

it's working. Here is a small segment processed with channels 10;14;24;25 (both stereo pairs looking in opposite directions)

capture du 2016-11-09 18 19 57

this is the result of GlobalSfM. I am running now openMVG_main_ComputeStructureFromKnownPoses , but the last step "Per triplet tracks validation (discard spurious correspondences):" is really slow.

Could you please explain these parameters of openMVG_main_ComputeStructureFromKnownPoses :

[-f|--match_file] path to a matches file (loaded pair indexes will be used)
[-p|--pair_file] path to a pairs file (only those pairs will be considered to compute the structure)
[-b|--bundle_adjustment] (switch) perform a bundle adjustment on the scene (OFF by default)

I do not really understand why would you need to provide match_pairs file after you have done the SfM.

Now, once we are done with SfM using only several channels, how can I export all channels from the rigid rig to PMVS, OpenMVS or MVE ?

pmoulon commented 7 years ago

Happy to see that it worked! It's a promising results. Impatient to add the GPS prior in the loop to make the results even more robust!

Regarding the slowliness of openMVG_main_ComputeStructureFromKnownPoses The default algorithm use all the pair that are computed by frustum intersection, so it computes often too many. In order to make the process faster you can specify the geometric matches as input (only the pairs from this file will be used). It will make the process faster => just provide the matches.e.bin file with the -f option.

If you want to export all the channel, I have to write a new binary that will take as input the SfM result and the image file. So image will be listed again and linked to the right poses.

Then we will certainly need to compute some visility matches (using openMVG_main_ComputeStructureFromKnownPoses perhaps) and then export to PMVS, OpenMVS or MVE.

pmoulon commented 7 years ago

Modification was merged in master.

I will open a new issue in order to handle your request to add views to existing poses.