Structure from motion¶
The structure from motion primitives used by Kontiki are perhaps a bit different from what you are used to. Instead of modelling landmarks as e.g. a 3D-point in world coordinates, we instead use a combination of a reference observation and an inverse depth.
This formulation is nice because it is simple to represent landmarks at infinity, and also only require us to optimize a single scalar (the inverse depth) instead of a full 3D-point. For a more detailed description see e.g. [Lovegrove2013].
Usage¶
To setup a structure from motion problem we create View and Landmark objects, and then add
Observation objects by calling View.create_observation().
Note that it is impossible to create Observation objects any other way.
Assume that we have a list of tracks that each contain a list of tuples (n, x), where n is a frame number, and y is an image point. Then creating the structure from motion objects looks like this:
landmarks = []
views = {} # frame number -> View
for track_data in tracks:
lm = Landmark()
for n, y in track_data:
view = views.get(n, View(n / frame_rate))
view.create_observation(lm, y)
To be usable, we also need to set the reference observation for each landmark. Easiest is to use the first one:
for lm in landmarks:
lm.reference = lm.observations[0]
Classes¶
-
class
kontiki.sfm.View¶ -
create_observation(self: kontiki.sfm.View, arg0: kontiki.sfm.Landmark, arg1: numpy.ndarray[float64[2, 1]]) → kontiki.sfm.Observation¶ Create a new observation
-
frame_nr¶ Frame number
-
observations¶ List of observations
-
remove_observation(self: kontiki.sfm.View, arg0: kontiki.sfm.Observation) → None¶ Remove an observation
-
t0¶ Start of frame time
-
-
class
kontiki.sfm.Landmark¶ A 3D landmark
Landmarks are represented by a reference observation, and an inverse depth.
-
id¶ Landmark ID
Warning
The landmark ID is only unique within a session. You can not trust an ID to be the same e.g. if loading the same problem from disk twice.
-
inverse_depth¶ The inverse depth, relative to the reference observation
-
locked¶ Lock landmark to not allow it to change during optimization. Defaults to False.
-
observations¶ List of all landmark observations
-
reference¶ Reference observation
-
-
class
kontiki.sfm.Observation¶ An observation of a landmark in a view
-
is_reference¶ True if this is the landmark reference observation
-
uv¶ The image measurement.
-
References
| [Lovegrove2013] | Lovegrove, S.; Patron-Perez, A.; and Sibley, G. Spline Fusion: A continuous-time representation for visual-inertial fusion with application to rolling shutter cameras In Procedings of the British Machine Vision Conference 2013 |