This is a compilation of answers to questions frequently asked by posest users.


  1. Q1 -- What is posest?
  2. Q2 -- What types of pose estimation problems can posest solve?
  3. Q3 -- What do I need to use posest?
  4. Q4 -- How can I compile posest?
  5. Q5 -- Why am I getting link errors for the f2c library?
  6. Q6 -- Where are the arguments of the various routines explained in detail?
  7. Q7 -- How are poses parameterized?
  8. Q8 -- What are the inputs required by posest?
  9. Q9 -- Why am I getting a link error for MAIN__?
  10. Q10 -- Can I use posest from matlab?
  11. Q11 -- How can I compile posest's MEX-file?
  12. Q12 -- How can I find out which points are inliers?
  13. Q13 -- Can I include posest in a commercial product?

  1. Q1 -- What is posest? -- [top]

    posest is a C/C++ computer vision library for 3D pose estimation that is distributed under the GNU General Public License.

  2. Q2 -- What types of pose estimation problems can posest solve? -- [top]

    posest can determine 3D pose from a set of single-view 3D-2D (i.e., world-image) point correspondences. Camera intrinsic parameters can be either known or the focal length is also estimated as part of the computation. posest can also compute 3D pose from a binocular set of 3D-2D point correspondences; no stereo correspondences are needed for the former.

  3. Q3 -- What do I need to use posest? -- [top]

    To be able to use posest, you should have installed the levmar optimization library. In turn, levmar requires LAPACK/BLAS or equivalent vendor libraries. Please refer to levmar's FAQ for further details. No other external libraries are needed to compile posest.

  4. Q4 -- How can I compile posest? -- [top]

    Platform-specific compilation files can be generated using the supplied CMakeLists.txt file with the CMake build system. Prior to building posest, levmar and LAPACK/BLAS should be installed. Precompiled LAPACK/BLAS binaries for Windows are available here and here.

  5. Q5 -- Why am I getting link errors for the f2c library? -- [top]

    The f2c library is needed for f2c'ed versions of LAPACK/BLAS. On some systems it is equivalent to the F77 and I77 libraries, whereas on others it is not needed at all. If your linker complains about a missing f2c library, edit CMakeLists.txt and try substituting it with F77 and I77 or remove it altogether.

  6. Q6 -- Where are the arguments of the various routines explained in detail? -- [top]

    The source code of each function is preceeded by detailed comments explaining the role of each argument. See also the working examples in posest_demo.c and binocposest_demo.c

  7. Q7 -- How are poses parameterized? -- [top]

    Rotations are parameterized with 3D vectors using Rodrigues' formula. Translations are simply represented with 3D vectors.

  8. Q8 -- What are the inputs required by posest? -- [top]

    posest needs sufficiently many 3D-2D correspondences. Whereas one cannot easily prescribe their exact number, they should be at least thirty and spread over the image plane as much as possible. In addition to point correspondences, the camera intrinsics for the monocular case and the relative camera placement for the binocular case are also necessary. posest is capable of estimating the camera focal length from the supplied points. However, for better accuracy it is recommended that this parameter is obtained via grid-based calibration.

  9. Q9 -- Why am I getting a link error for MAIN__? -- [top]

    When building lmdemo, certain LAPACK/BLAS libraries cause the linker to fail with an error like undefined reference to `MAIN__', or similar. This is due to these libraries superfluously calling a Fortran main() routine for initialization. There are several workarounds to this problem:

    • If using gcc, pass the option -u MAIN__ to the linker.
    • If compiling under Windows, link against these precompiled libraries.
    • Define a dummy MAIN__ function as int MAIN__(int argc, char **argv) { abort(); return 1; }

    See also the discussion here.

  10. Q10 -- Can I use posest from matlab? -- [top]

    Yes. Starting from version 1.1, posest includes a MEX-file that can be used to interface it with matlab. See posest.c in the matlab directory of posest's source distribution. Assuming that the MEX-file has been compiled (see also Q11), file posest_demo.m contains examples of its use with matlab.

  11. Q11 -- How can I compile posest's MEX-file? -- [top]

    The answer depends on your operating system/compiler. The Makefile in the matlab directory works with GCC under Linux, whereas Makefile.w32 works with MSVC under Windows. Matlab's frontend build script "mex" can also be invoked from within Matlab; in this case it might also be necessary to run "mex -setup" from the matlab or OS command prompt to configure your system to build MEX-files. In any case, the provided makefiles can be used as a starting point for compiling on your own system.

  12. Q12 -- How can I find out which points are inliers? -- [top]

    Inlying points can be printed to stdout by defining PRINT_INLIERS in posest_demo.c.

  13. Q13 -- Can I include posest in a commercial product? -- [top]

    posest is distributed under GPL, which allows you to modify the original code into a new program and then sell copies of the modified program commercially, but only under the terms of the GPL. Thus, you must make the source code available to the users of the program as described in the GPL, and they must be allowed to redistribute and modify it as described in the GPL. Such requirements are clearly in conflict with using posest as part of a proprietary application.
    However, it is possible to obtain a paid license for proprietary commercial use under terms different than those of GPL. Please contact the author for further information on such licensing. More answers to questions related to the GPL license can be found here.