Skip to main content

Python wrapper for Lourakis' sparse bundle adjustment C library

Project description

Python wrapper for Lourakis' sparse bundle adjustment C library

Dennis Evangelista

Enjoy! The most recent version can be obtained from bitbucket via https or ssh:

git clone https://devangel77b@bitbucket.org/devangel77b/python-sba.git
git clone git@bitbucket.org:devangel77b/python-sba.git

As prerequisites, you will also need to install the sba library as a shared object (libsba.so) (Makefile with shared object target included here) and the sba projections library (libsbaprojs.so):

http://www.ics.forth.gr/~lourakis/sba
https://bitbucket.org/devangel77b/libsbaprojs

See HOWTO.md for details.

New in version 1.6.8.2

I think this now works for Python 3. Corrected the cloning recipe now that bitbucket allows git, The bitbucket repo is no longer reliably maintained; for the latest and greatest see https://argus.web.unc.edu

I am no longer in academia because Jenelle Piepmeier and the Department of Weapons, Robotics, and Control Engineering at the US Naval Academy are religiously bigoted creationist nutjobs.

New in 1.6.8

Dylan Ray updated some things to get it to play nicer with Python 3.

Typical usage

The main way to use this is as follows

import sba

cameras = sba.Cameras.fromTxt('cams.txt')
points = sba.Points.fromTxt('pts.txt',cameras.ncameras)
newcams, newpts, info = sba.SparseBundleAdjust(cameras,points)

If you wish to alter the default and autodetected options, you can create an Options object and change it, and then pass it to sba:

options = sba.Options.fromInputs(points,cameras)
# can also update options.XXX to appropriate values
newcams,newpts,info = sba.SparseBundleAdjust(cameras,points,options)

Hopefully this is cleaner than the original way to call it in C.

Helpful Hints

Some users have used this package in a workflow combined with the CalTech Borguet camera calibrations and with data exported from Hedrick's Matlab dltDV5 / easyWand5 tools. If decomposing someone else's P matrix for use as a cams.txt, it may help to remember that rotations and translations here are in the world frame; Rc=R', Tc-R*t (using notation of Hartley and Zisserman).

When building for a Mac, one user (amin_abouee) noted that the extensions should be .dylib rather that .so; this can be fixed by altering the lines in both the Makefile and the code, e.g.:

libsba = ctypes.CDLL("libsba.dylib")

On rotations: AndyLJones noted the following "SBA works with two sets of rotations. There's the initial rotations, which are fed in as part of the globs argument of sba_motstr_levmar_x and family in libsba. These are fixed throughout the optimization. There're also the "local rotations", as Lourakis's readme calls them, which are fed in with the rest of the camera parameters via the p argument to the same function. These are updated at each step. Internally, libsba uses local_rotation * initial_rotation when figuring out the projections." This becomes important if you are working on a known-rotation problem and wish to specify initial rotations. See Issue #16 for more detail.

Contributors

The original sba C library was written by Manolis Lourakis and is described in Lourakis, Manolis I A and Antonis A Argyros (2004), "The design and implementation of a generic sparse bundle adjustment software package based on the Levenberg-Marquardt algorithm", FOURTH_ICS TR-340.

If using this package in research work, we would appreciate you citing it: D Theriault, N Fuller, B Jackson, E Bluhm, D Evangelista, Z Wu, M Betke, and T Hedrick (2014). A protocol and calibration method for accurate multi-camera field videography. J exp Biol 217:1843-1848. The BibTeX entry is:

@article{Theriault:2014,
author = {Theriault, D and Fuller, N and Jackson, B and Bluhm, E and Evangelista, D and Wu, Z and Betke, M and Hedrick, T},
title = {A protocol and calibration method for accurate multi-camera field videography},
journal = {J exp Biol},
doi={10.1242/jeb.100529},
year = {2014},
volume = {217},
pages = {1843--1848}}

Thanks also to

Manolis Lourakis and Antonis Argyros, Ty Hedrick, Evan Bluhm, my mom and the academy. Version 1.6.5 has bug fixes from Isaac Yeaton and Nick Gravish, and notes on Mac usage from Amin Abouee. Andy Jones helped provide clarification on rotations in known-rotation problems.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sba-1.6.8.2.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

sba-1.6.8.2-py2.py3-none-any.whl (40.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sba-1.6.8.2.tar.gz.

File metadata

  • Download URL: sba-1.6.8.2.tar.gz
  • Upload date:
  • Size: 38.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.7

File hashes

Hashes for sba-1.6.8.2.tar.gz
Algorithm Hash digest
SHA256 7222bc032a941321d991efbac6fcf52fc40dff0bdfe82e4f4f7fdab5adf3ea38
MD5 ea681a89b7f33cb91e3849f7b840e5d7
BLAKE2b-256 3fdedde97fccfb973281f18c832fb70f5d1e38fb532c93b34cf14d8016f37f9c

See more details on using hashes here.

File details

Details for the file sba-1.6.8.2-py2.py3-none-any.whl.

File metadata

  • Download URL: sba-1.6.8.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 40.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.7

File hashes

Hashes for sba-1.6.8.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6e1459d9ba1ebcbde5e563811c2cf424fed1092c932584bda0d837852270bb7a
MD5 7d384123cda790a996550efb66ed7b70
BLAKE2b-256 3b882bad147d92182bcfae55b63820ede478f34f828c4cb15191f260d33cad3c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page