Skip to main content

Python Bundle Adjustment Routines

Project description

Python Bundle Adjustment

  • Load the data.
from pyba.CameraNetwork import CameraNetwork
import pickle
import glob
import numpy as np

image_path = './data/test/camera_{cam_id}_img_00000{img_id}.jpg'
pr_path = './data/test/df3d_2/pose_result*.pkl'

d = pickle.load(open(glob.glob(pr_path)[0], 'rb'))
camNet = CameraNetwork(points2d=d['points2d'], calib=d, image_path=image_path)

points2d is a numpy array with shape T x J x 2. All units are in pixels. calib is a nested dictionary where keys are camera id's, indexed starting from 0 up to n_cameras-1. values are another sets of dictionaries with keys "R", "tvec", "intr", "distort"

calib = {0: {'R': array([[ 0.90885957,  0.006461  , -0.41705219],
         [ 0.01010426,  0.99924554,  0.03750006],
         [ 0.41697983, -0.0382963 ,  0.90810859]]),
  'tvec': array([1.65191596e+00, 2.22582670e-02, 1.18353733e+02]),
  'intr': array([[1.60410e+04, 0.00000e+00, 2.40000e+02],
         [0.00000e+00, 1.59717e+04, 4.80000e+02],
         [0.00000e+00, 0.00000e+00, 1.00000e+00]]),
  'distort': array([0., 0., 0., 0., 0.])},
 1: {'R': array([[ 0.59137248,  0.02689833, -0.80594979],
         [-0.00894927,  0.9996009 ,  0.02679478],
         [ 0.80634887, -0.00863303,  0.59137718]]),
  'tvec': array([ 1.02706542e+00, -9.25820468e-02,  1.18251732e+02]),
  'intr': array([[1.60410e+04, 0.00000e+00, 2.40000e+02],
         [0.00000e+00, 1.59717e+04, 4.80000e+02],
         [0.00000e+00, 0.00000e+00, 1.00000e+00]]),
  'distort': array([0., 0., 0., 0., 0.])},
}
  • Visualize the 2d pose.
import matplotlib.pyplot as plt
img = camNet.plot_2d(0, points='points2d')
plt.figure(figsize=(20,20))
plt.imshow(img, cmap='gray')
plt.axis('off')

image

  • Do the bundle adjustment.
from pyba.pyba import bundle_adjust 
bundle_adjust(camNet)
   Iteration     Total nfev        Cost      Cost reduction    Step norm     Optimality   
       0              1         7.1659e+05                                    7.27e+05    
       1              2         2.9376e+05      4.23e+05       1.08e+01       3.12e+05    
       2              4         2.6084e+05      3.29e+04       2.39e+00       1.85e+05    
       3              5         2.4676e+05      1.41e+04       3.04e+00       2.20e+04    
       4              7         2.4604e+05      7.20e+02       1.32e+00       1.75e+04    
       5              8         2.4579e+05      2.53e+02       2.67e+00       2.86e+04    
       6              9         2.4487e+05      9.20e+02       2.53e+00       2.18e+04    
       7             10         2.4472e+05      1.43e+02       2.48e+00       2.02e+04    
       8             11         2.4441e+05      3.18e+02       6.71e-01       1.77e+03    
       9             12         2.4440e+05      9.43e+00       6.78e-01       2.13e+03    
`ftol` termination condition is satisfied.
Function evaluations 12, initial cost 7.1659e+05, final cost 2.4440e+05, first-order optimality 2.13e+03.
  • Visualize the resulting camera rig.
fig = plt.figure(figsize=(10,10))
ax3d = fig.add_subplot(111, projection='3d')

camNet.draw(ax3d, size=20)
camNet.plot_3d(ax3d, img_id=0, size=10)

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

pyba-0.12.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

pyba-0.12-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file pyba-0.12.tar.gz.

File metadata

  • Download URL: pyba-0.12.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.13

File hashes

Hashes for pyba-0.12.tar.gz
Algorithm Hash digest
SHA256 c9a2fcef80c6272d8368fd480a318739fc2a2a24eb7b7adbabfe740da41705fd
MD5 48f0cfe9db2b297b3b6a5e21cb6739f5
BLAKE2b-256 0697a7360eeca6f8eb5b5ea3255ec1ff9fa06ade34b6863abfddb4d8b23d1a8b

See more details on using hashes here.

File details

Details for the file pyba-0.12-py3-none-any.whl.

File metadata

  • Download URL: pyba-0.12-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.13

File hashes

Hashes for pyba-0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 3f03a0256ecd537ebd0306b817b551c15a95b756e4fdb315e3f430e8cc137dee
MD5 491dde85426c5919041dd37f3499ffec
BLAKE2b-256 5045b30ca1462599d6618c5078eadca5711cedcbab71e22e8d235e726b67f2e8

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