Releases: Kitware/TeleSculptor
v0.7.1
MAPTK v0.7.1 Release Notes
This release provides patches to the MAPTK v0.7.0 release to add CPack
packaging support. MAPTK v0.7.1 provides only CMake improvements and
installer support files to help build distributable packages and installers.
Updates since v0.7.0
Build System
- Added support for packaging with CPack. On Windows this will build an
installer executable (using NSIS). On Mac OS X it will build a disk image
containing an application bundle. On Linux it will create a self extracting
TGZ file. The focus in this release is on packaging the graphical
application; however, command line utilities and headers are included as
well.
Visualization Application
- Added larger versions of the application icon and specialized icon formats
for Windows (.ico) and Mac (.icns).
v0.7.0
MAP-Tk v0.7.0 Release Notes
This is a minor release of MAP-Tk that provides both new functionality and
fixes over the previous v0.6.1 release. The highlights of this release are
a new Ceres Solver plugin, support for lens distortion modeling, match
matrix computation and visualization, and a prototype for a new graphical
visualization application. This is the last minor release of MAP-Tk that
does not depend on the Vital project. Starting with MAP-Tk v0.8.0 a large
amount of MAP-Tk code will migrate to Vital to be shared across Kwiver
projects and provide better MAP-Tk integration with Kwiver. MAP-Tk will
then depend on Vital.
Ceres provides a much improved bundle adjustment backend. It is an order
of magnitude faster than the VXL backend while also being more flexible
and configurable. For example, it handles radial distortion parameters
and sharing of camera intrinsics between any subsets of cameras. Ceres
will be the default bundle adjustment backend going forward. The VXL
backend will still be supported, but with a subset of capabilities.
The lens distortion model added to the camera class follows the same
model used by OpenCV with up to eight radial and tangential parameters.
Additional distortion models may be added in the future. Sharing the
OpenCV model means that parameters estimated using OpenCV can be plugged
directly into MAP-Tk without conversion. Note that the OpenCV code for lens
distortion is not actually required in MAP-Tk and lens distortion is supported
even without the OpenCV plugin enabled.
The match matrix provides a useful way to analyze and visualize the statistics
of the feature tracking results. The match matrix contains the number of
features that correspond between any two images. It is useful for guiding
structure from motion algorithms and also provides a good visual summary
of image connectivity and loop closure when rendered as an image. This
release provides tools for writing out the matrix and a Python script for
plotting it. Future release will add visualization directly into the GUI.
The visualization application is graphical user interface (GUI) for
visualizing MAP-Tk output. It renders the 3D pose of cameras and
landmarks and also shows how the landmarks project into the images and
draws the residual vector between landmarks and corresponding feature points.
In this release the GUI is just a preview of what is to come. In future
releases, the GUI will provided capabilities for running the algorithms
directly as well as visualizing the results.
Additional notes about the release are provided below.
Updates since v0.6.1
Main Library
- Added a metric in metrics.h to compute the median reprojection error.
The median provides a more robust alternative to RMSE and is more useful
for characterizing error when using robust loss functions. - Added lens distortion to the camera_intrinsics class. The model uses the
same conventions that OpenCV uses. The distortion parameter vector
is compatible between OpenCV and MAP-Tk. - Added lens undistortion functions to camera_intrinsics which use the
Gauss-Newton method to iteratively solve for the inverse of distortion.
Convergence is fast and more accurate than the implementation in OpenCV. - Added reading and writing of lens distortion parameters to the camera
stream operators and, as a result, to the KRTD file io. - Added 3D triangulation algorithms using Eigen to triangulate.h
- Added a constructor from the base class for camera_
- Added a function to camera_ to compute depth of a 3D point to the
image plane. This can also be used to check if a point is behind
the camera by checking the sign of the depth. - Added a new essential matrix data structure, including abstract
base class, and switched the essential matrix estimation algorithm
to use this class instead of a 3x3 matrix. - Added a function in match_matrix.h to compute the symmetric match matrix
corresponding to a track set for all or a subset of the frames. - Renamed the algorithm base class clone() method to base_clone() and added
a new clone() method at the algorithm_impl level. These functions are
identical except the base_clone() method returns a base class algorithm
shared pointer and the clone() method returns a shared pointer to the
specific algorithm intermediate base class. - Added a Necker reverse transformation to transform.h to help get out
of a common local minima during bundle adjustment. - Moved some common camera parameter collection code for camera optimization
into the base class algorithm and changed the API such that the pure
virtual function operates on a single camera with vectors of corresponding
features and landmarks.
Ceres Plugin
- Added a new plugin which uses Google Ceres Solver as a back end for
optimizations. - Added an implementation of the bundle_adjust algorithm using Ceres to
solve the optimization problem. This supports access to Ceres options
via the configuration block and currently supports selection of various
different solver algorithms and robust loss functions. - Added unit tests for the Ceres implementation of bundle_adjust that
duplicates the same tests used for the VXL back end plus a few additional
tests focusing on robust estimation. - Added support to both use and estimate lens distortion parameters in the
bundle_adjust algorithm using Ceres. Three different distortion models
can be selected, each adding additional parameters to the previous model.
Furthermore, many parameters can be locked in the optimization allowing
for even more fine-grained selection of model parameter subsets. - Added unit tests for Ceres bundle adjustment covering the use and estimation
of lens distortion parameters.
Core Plugin
- Added a core plugin implementation of triangulate_landmarks using the
triangulation functions added to the main library. - Moved the implementation of initialize_cameras_landmarks from the VXL
plugin into core and updated it to use the new triangulation and essential
matrix functionality of the main library to remove dependence on VXL. - Updated the initialize_cameras_landmarks algorithm with many improvements
including optional optimization of newly added cameras, optional
initialization of new cameras from the last camera position, and using
the match matrix to guide which cameras are added next.
OpenCV Plugin
- Added unit tests to verify that the lens distortion functions in MAP-Tk
produce equal results to those routines in OpenCV.
VXL Plugin
- Moved the initialize_cameras_landmarks implementation to the core plugin.
- Updated the VXL camera optimization algorithm to use the new abstract API.
Code for camera parameter collection has moved to the base class to be
shared.
Visualization Application
- Added a new graphical application that can be used to visualize input data
and computed results. A 3D "world view" shows the cameras and computed
landmarks. A "camera view" shows the source imagery with feature points and
projected landmarks for a selected camera. A "slideshow" mode allows
automatic switching between cameras at regular intervals and can emulate
video playback. - Added a new icon/logo for MAP-Tk to use as the icon for the GUI application.
C Interface
- Updated algorithm related code to use new functions in algorithm C++ base
class.
Python Interface
- Updated algorithm related code to use new algorithm C-interface functions.
Tools
- Added a new tool to read in a track file and compute the match matrix.
The match matrix can be written out to a matrix in ASCII form. - Added an option to the bundle adjust tool to write out an updated track
file corresponding to the filtered tracks used in bundle adjustment. - Added an option to the bundle adjust tool to apply a Necker reversal
to the input cameras and points before continuing to apply bundle
adjustment. This allows an inverted solution from a previous run to
be restarted to find the correct solution. - Change bundle adjustment tool to allow frame subsampling to occur before
camera initialization. This way one can limited the entire pipeline,
not just bundle adjustment, to a subset of frames. - Added an option to the bundle adjust tool to allow initialization of
additional cameras beyond those that were loaded from disk. If you have
a solution on a subset of frames you may wish to further optimize just
that subset or your may wish to use that subset to bootstrap to a
larger set of frames.
Scripts
- Added a Python script to read the ASCII match matrix file produced by
the match matrix tool and plot it. - Added Python modules to read and write KRTD, PLY, and homography files.
- Added a Python script to read an NVM file from VisualSfM and write out
KRTD camera files - Added a Python script to read in a PLY file and set of KRTD camera files
and write out a homography files. This script fits a ground plane to
the points in the PLY and then uses the cameras to derive homographies
from each frame back to the first frame as induced by the plane. - Added a Python script to compute the extents of the output space of
a sequence of homographies applied to video of fixed size. - Added a Python script to transform homographies by translating and
scaling the output space.
Tests
- Moved test code from vxl::triangulate_landmarks to a common header to also
share with tests for core::triangulate_landmarks and any other future
implementations of triangulate_landmarks.
Fixes since v0.6.1
OpenCV Plugin
- Fixed error where the size of OCV image memory was incorrectly calculated.
Tests
- Renamed the tests for the main library from "test_core" to "test_maptk"
to differentiate between tests for the "core" plugin.
v0.6.1
MAPTK v0.6.1 Release Notes
This release provides patches to the MAPTK v0.6.0 release to address issues.
MAPTK v0.6.1 is a bug fix release with no new functionality.
Fixes since v0.6.0
Build System
- Properly honor EIGEN3_ROOT if set when finding the Eigen package.
This allows CMake super builds to specify which Eigen MAP-Tk should build
against. - Fixed some issues with the default Visual Studio compiler flags that were
causing CMake to hang during VS2013 compiler tests.
MAP-Tk Library
- Fixed a bug in the camera_ type casting constructor that was causing some
member variables to not be copied and cast. Added a regression test to
catch this issue.
Tools
- Fixed a compile failure on some systems due to passing the base camera by
value in the pos2krtd tool. - Fixed an issue in the track_feature tool where, when using a mask file, it
was throwing an error if the file exists, not when it was missing.
Tests
- Fixed a bug in the noisy_landmarks helper function, which adds random noise
to landmark locations for use in unit tests. The function previously had a
side effect of modifying the source landmarks in place. This has been
corrected by cloning landmarks before modification.
v0.6.0
MAP-Tk v0.6.0 Release Notes
This is a major release of MAP-Tk that provides both new functionality and
fixes over the previous v0.5.1 release. Although the API has changed
significantly, we still consider MAP-Tk to be in "pre-release" and are
not yet ready to increase the major version number and mark this release as
v1.0.0. Additional major restructuring is planned before we release v1.0.0
with a "stable" API.
The primary changes in this release are a major restructuring to provide
true dynamically loaded plugins instead of the previous module framework,
and a switch to Eigen3 to provide the core linear algebra data structure
and algorithms (e.g. matrix and vector). This release also adds a few
new algorithms and provides a preview of new C and Python bindings, which
are still under development.
The new plugin framework allows new algorithms to be loaded at runtime
without needing to recompile MAP-Tk or any tools built on top of MAP-Tk.
The previous modules (vxl, ocv, proj, vcl) have been converted to plugins,
and a new core plugin has been added for core algorithm implementations that
were previously in the maptk library. Abstract algorithm declarations are
still the main maptk library, but concrete implementations of those algorithms
are now all loaded through plugins. This means you can write your own plugin,
drop it into the plugins directory, and insert your algorithm implementations
into a MAP-Tk pipeline with just a configuration file change.
Eigen3 joins Boost as one of the few required dependencies in MAP-Tk v0.6.0.
Previously MAP-Tk had its own matrix and vector classes to reduce third party
dependencies in the main library. As development progressed, we found
ourselves adding more and more basic linear algebra code and reinventing what
is already available, and done very well, in Eigen. We decided to switch
to Eigen rather than waste time reinventing it. Eigen is a header-only library
and should be easy to obtain and use across platforms.
This release of MAP-Tk provides options for a new two-pass feature matching
approach, a feature filter algorithm, and a geometrically constrained feature
matcher. The intended use case for these is to first match a "strong" subset
of features, estimate a homography from these matches, and use the homography
to predict the approximate motion of the remaining features, then search in a
local neighborhood to quickly find weaker or more ambiguous matches that
otherwise would have been missed.
Language bindings for C and Python are also new in MAP-Tk v0.6.0. These
bindings are not yet complete, but offer a preview of what is to come.
Producing Python bindings for a C++ API is challenging for a variety of
reasons, but Python bindings for C are comparatively easy to produce. Our
approach is to produce C bindings for the C++ API and then build Python
bindings on the C API. This will also allow other language bindings to be
built in the future more easily by using the C API. The current set of
bindings allows a subset of algorithms to be run, but does not allow
introspection of the data objects.
Additional details about changes in this release are found below.
Updates since v0.5.1
Build System
- Revised modules into plugins for dynamic loading. Each plugin provides a
library for static linking and a light weight wrapper to produce a plugin
that is loaded at run-time. - Provided CMake tools to make it easy to construct the plugins with minimal
boilerplate code. - Added install rules for CMake utilities for MAP-Tk users to create MAP-Tk
compliant plugin interface libraries. - Added FindEigen3 CMake module and call it to find Eigen, which is now a
required dependency. - Added private header CMake variables for add_library call, allowing
visibility of file in IDEs. - Separated out plugin management into separate library in order to allow for
static plugin library linking for static builds, preventing a non-
deterministic issue with dynamically loading static libraries causing
duplicated symbols. - Simplified string logic for finding compiler flags file.
- Added Eigen3 include directory path to include directories exported by
MAP-Tk. - Added support for LIB_SUFFIX. This supersedes MAPTK_LIB_SUFFIX; if the old
variable is set, it will be used as the default value for LIB_SUFFIX, but a
warning will be issued.
MAP-Tk Library
- Added plugin support for loading externally defined algorithm
implementations. - Refactored source file layout.
- Separated out algorithm implementations that used to be in the main MAP-Tk
library into a core library with a plugin interface. - Added required dependency on the Eigen3 header-only library. Going forward
Eigen will provide standardized linear algebra functionality so we do not
waste effort duplicating linear algebra code in MAP-Tk. - Replaced maptk::matrix_<M,N,T> with Eigen::Matrix<T,M,N>
- Replaced maptk::vector_<N,T> with Eigen::Matrix<T,N,1>
- Removed vector_2_, vector_3_, and vector_4_ sub-classes
- Added missing operator>> for Eigen::Matrix<T,M,N>
- Changed internal quaternion vector in maptk::rotation_ to use
Eigen::Quaternion and replaced most of the calculations with those
provided by Eigen::Quaternion member functions. - Removed use of logging helper macros from header files as logging macro
header is not a public header. - Added optional mask image input to track features algorithm definition and
core implementation. - Added transform_image function to efficiently transform in-place an image
given a unary function that is operated on every pixel. - Revised homography structures into objects that contain, rather than
subclass, Eigen::Matrix. - Revised import/export logic in auto-generated plugin library code.
- Redefined algorithm registration to allow for overwriting by label.
- Added informative debugging messages to allow for plugin implementation
tracing. - Added constructor from base class for feature_.
- Added abstract base class for algorithm to filter a set of features
(filter_features). - Added verbose output during configuration check failure to make it easy
to track down errors in configuration files. - Moved several member functions from algorithm_def up to the algorithm
base class. This provides a better polymorphic design, allowing algorithms
to be manipulated without knowing the algorithm type. Functions moved up
include "clone" and "create" (each now returns algorithm_sptr);
"registered_names" and "has_impl_name" (each now takes a type_name string);
and the "*_nested_algo_configuration" helpers (each now takes a type_name
string).
Core Plugin
- Separated out algorithm implementations that used to be in the main MAP-Tk
library to create this core plugin. - Updated compute_ref_homog algorithm to allow additional constraints
(minimum inliers, reference frame [non]regression) - Added concrete algorithm to filter a feature set by magnitude of detector
response (filter_features_magnitude). - Updated match_features_homography to allow two-pass feature matching with
(potentially) different matchers, a feature filter applied during the
first pass, and homography warping applied between the matchers.
OCV Plugin
- Converted module library into a library-plugin pair.
PROJ Plugin
- Converted module library into a library-plugin pair.
VisCL Plugin
- Converted module library into a library-plugin pair.
- Renamed viscl_image_container to vcl::image_container for consistency.
- Added missing Doxygen page for this plugin.
VXL Plugin
- Converted module library into a library-plugin pair.
- Added a geometrically constrained feature matcher
(match_features_constrained) that uses a search radius on feature location
(and optionally scale and orientation) to limit search for matches. - Added parameters to the image_io load function to allow stretching of the
image intensity range, either automatically or with a manually specified
range. This is useful for handling 12-bit or 16-bit images, for example.
C/Python API
- Added C and Python interfaces. These wrappers are currently incomplete but
offer an introduction into what they will look like and how they will
function.
Test System / Tests
- Refactored test code to reference correct libraries and use new plugin
loading and management where required. - Added automatic message generation to test executables to inform the caller
of available test names in that executable.
Tools
- In track features tool, Added ability to specify paired mask image files.
Fixes since v0.5.1
Build System
- Fixed addition of library to global maptk_libraries property to only happen
if that library is being exported. - Removed target generation for doxygen template file configuration which had
caused race-conditions in parallel builds that included documentation
generation. - Changed target property getter function to one that is not currently subject
to a CMake regression bug.
Core Plugin
- Added missing header to source list
- Fixed import/export macro definition variable spelling.
Test System / Tests
- Fixed CMake-side parsing of test source files during discovery mode to allow
extra white-space in IMPLEMENT_TEST() and TEST_PROPERTY() parameter areas.
v0.5.1
MAPTK v0.5.1 Release Notes
This release provides patches to the MAPTK v0.5.0 release to address issues.
MAPTK v0.5.1 is primarily a bug fix release with very minimal new functionality.
Updates since v0.5.0
Tests
- Enabled Travis CI integration by adding a .travis.yml file. This provides
continuous integration testing on topic branches. Travis CI only tests
on a single platform (currently Ubuntu 12.04), so it does not replace
nightly CDash testing across multiple platforms. However, it does
automatically build topic branches and pull requests that would not be
tested by CDash. CDash only tests builds of the master and release
branches, but does so over a wide array of platforms and build
configurations. Thus, Travis CI and CDash are complementary testing
tools. Travis CI can help catch some build failures before branches
are merged.
Tools
- Added more verbose output in the feature_tracker tool when configuration
checks fail. Adopts the same reporting technique used in the
maptk_bundle_adjust_tracks tool.
Fixes since v0.5.0
Build System
- Fixed some CMake configuration warnings.
Documentation
- Added missing algorithms on the MAP-Tk core Doxygen main page and sorted
existing algorithms. - Added missing documentation on the VXL module Doxygen main page for recently
added algorithms and containers and sorted the lists. - Added missing algorithms on the OCV module Doxygen main page and sorted.
- Boost chrono is required by Boost timer on all platforms when linking a
static Boost.
OCV Module
- Swapped respective returns from width/height getter methods as they were
previously returning the incorrect values. - Draw tracks algorithm would not write images into a directory that did not
exist and would fail silently. Now it creates the directory first if
missing.
VXL Module
- Fixed a camera conversion test that was failing on some platforms. Compare
the camera parameters directly instead of computing a 3x4 projection matrix
for each and comparing that. Computing the matrix introduces additional
floating point precision error which should not be a part of this test. - Loosened some tolerances on tests that were failing on some dashboard builds
with errors just slightly over the test tolerance.
Scripts
- Fixed Blender import KRTD script to handle image aspect ratios where the
height is larger than width. Focal length was being interpreted
incorrectly. Also set the rendering image resolution based on the principal
point to get proper aspect ratio in the camera view.
Tools
- Avoid a segfault in maptk_bundle_adjust_tracks by checking that there are
tracks remaining after filtering by minimum length. Provide an informative
message and exit cleanly if no tracks remain.
v0.5.0
MAPTK v0.5.0 Release Notes
This is a minor release of MAPTK that provides both new functionality and fixes
over the previous v0.4.2 release. This release adds preliminary support for
camera initialization algorithms in the bundle adjustment tool. It also adds
support for image masks to suppress unwanted features in the feature tracking
tool. These and various other enhancements are described below.
Updates since v0.4.2
Build System
- Added option for library suffix string, allowing for installation under
platform specific subdirectories (i.e. .../lib64/ vs .../lib/). - Export a maptk_libs CMake variable containing all maptk compiled libraries.
This makes it easier for 3rd parties to link against all maptk libraries. - Added additional dependency specification options for file configuration.
- Updated minimum Boost version from 1.48 to 1.50 to support use of
boost::program_options::typed_value::value_name, introduced in Boost 1.50.
Core Library
- Added abstract algorithm for essential matrix estimation from feature matches
and known camera intrinsics. - Added a function to create a cross-product matrix (3x3, skew symmetric) from
a 3D vector. - Added a function, canonical_tranform(), to estimate a canonical similarity
transformation given a collection of cameras and landmarks. The
transformation aligns the mean of landmarks with the origin, scales to give
the landmark distribution unit variance, and aligns the orientation with the
average camera look direction. - Added abstract algorithm for camera and landmark initialization from tracks.
- Added optional image masking support in feature detection algorithm API.
- Added description field for algorithm implementations that also get passed
through into generated configuration files.
VXL Library
- Added concrete implementation of essential matrix estimation using the
vpgl_em_compute_5_point_ransac class in VXL. - Refactored maptk <--> VXL camera conversion functions to expose conversion
functions for the camera calibration matrices (camera intrinsics). - Added concrete implementation of camera and landmark initialization using
the essential matrix estimation algorithm and additional VXL functions
for extracting camera information from essential matrices
OCV Library
- Added image masking support in feature detection algorithm.
Tests
- Added various unit tests for VXL estimate_essential_matrix.
- Added various unit tests for VXL initialize_cameras_landmarks.
Tools
- Updated the bundle adjustment tool to apply the canonical similarity
transform in the absence of any other global coordinate constraints.
This fixes the coordinates after gauge-free optimization to allow results
to be more easily compared. - Updated the bundle adjustment tool to optionally accept KRTD files as input.
- Updated the bundle adjustment tool to apply a camera and landmark
initialization algorithm before running bundle adjustment. - Added an "estimate_homography" tool to compute the homography for a pair
of images. This is useful for testing pairwise image registration using
algorithms in MAPTK. Supports image masking for input images. - Added source-to-reference homography file generation to the top level of the
feature tracker tool.
Fixes since v0.4.2
Build system
- Fixed race condition during Doxygen documentation generation when built in a
parallel mode.
v0.4.2
MAPTK v0.4.2 Release Notes
This release provides patches to the MAPTK v0.4.1 release to address issues.
MAPTK v0.4.2 is a bug fix release with no new functionality.
Fixes since v0.4.1
Core Library
- Fixed VS2013 compiler error resulting from implicit cast from shared_ptr
to bool. The cast is now explicit.
OpenCV Library
- Fixed memory and run-time issue with using the draw_tracks tool on color
imagery with the OpenCV draw_tracks implementation.
v0.4.1
MAPTK v0.4.1 Release Notes
This release provides patches to the MAPTK v0.4.0 release to address issues.
MAPTK v0.4.1 is primarily a bug fix release with very minimal new functionality.
Updates since v0.4.0
Documentation
- Renamed README to README.md to allow GitHub to pick up on markdown formatting
- Added acknowledgements section to README.md thanking AFRL for their support
- Added a more detailed project description to README.md
- Added a class index to the Doxygen output
- Added more detail to inline Doxygen documentation, fixed some
control words
Build System
- Updated the dashboard_git_url in the dashboard scripts to point to the
new public Git URL on GitHub - Updated CTEST_DROP_SITE to support both a public dashboard and a private
dashboard at Kitware for testing unreleased changes
Core Library
- Added a log message for an error condition in track_features_default.cxx
where dependent algorithms were not all initialized - Added "virtual" keyword to algo type_name() and impl_name() methods in
derived classes. The keyword is not required here, but makes it more
apparent that these are virtual methods. - Made destructor for compute_ref_homography_default class virtual
Fixes since v0.4.0
Build System
- Added missing include directory path in CMake for PROJ
- Fixed the find module procedure for PROJ to work with
newer versions of CMake - Fixed the issue with building statically on Windows by applying
__declspec(dllimport) only in the shared build case - Fixed CMake config file configuration. Added missing build directory
reference in build config, and fixed pathing in install config
Core Library
- Call loop closure on the first frame in the default tracker to fix
off-by-one bug in the loop closure reference frame and resulting
homography file
OpenCV Library
- Fixed crash caused by a NULL info structure returned by
cv::Algorithm::info(). Must check that the info object is not NULL
before calling its name() method. - Fixed compatibility with OpenCV when compiled without the nonfree module.
If nonfree is available, SURF is used by default. If nonfree is not
available, ORB is used by default.
v0.4.0
MAPTK v0.4.0 Release Notes
This is a minor release of MAPTK that provides both new functionality and fixes
over the previous v0.3.1 release. The primary contributions of this release
are an implementation of homography-guided loop closure for closing long-term
loops, handling of reference point files to provide geographic localization
in the absence of POS file input, and implementation of hierarchical SBA to
bootstrap large SBA problems by first running SBA over subsampled cameras
then interpolating and running a larger SBA problem.
The other key change in this release is that MAPTK has been re-licensed
to a 3-clause BSD license.
Updates since v0.3.1
Core Library
- Added interpolation functions for rotations and for cameras.
- Added camera optimization algorithm definition.
- Added hierarchical SBA algorithm definition and generic implementation.
- Added method for loading landmark and track structures from a geographic
reference point file. - Added a few homography classes for storing transformations between
two frames or two arbitrary coordinate systems. - Added a class to estimate an arbitrary current to reference frame
homography for a given sequence of input data. - Modified the match_features_homography class to optionally not output
any matches if certain criteria are met. This is disabled by default. - Added new math exceptions for matrix related operations.
- Added a loop closure implementation which allows the execution of
multiple close loops methods with different settings at the same time.
VXL Library
- Added VXL implementation of camera optimization
- Added a VXL loop closure implementation based around using reference
frame homographies to estimate when we have reached the same location
again, and to additionally determine the most optimal frames to perform
feature matching between. - Optimized data organization and manipulation in SBA algorithm
implementation to make to make code surrounding underlying VXL
vpgl_bundle_adjust call faster.
OpenCV Library
- Added more options to the draw_track class, including the ability
to compare computed features tracks and landmarks projected onto
the image using camera krtd files.
Tools
- Added reference point file input option and functionality to bundle adjust
tool. This allows a user-generated 3D-2D point correlation list to drive
post-SBA world coordinate transformation instead of, or in the absence of
input POS camera files.
Tests
- Added tests for VXL camera optimization implementation
- Added methods for vector and matrix approximate equality
Fixes since v0.3.1
Core Library
- Added constraint to rotation object's angle function so it returns the
smallest angle between the rotation origin and the rotation position being
represented. - Fixed a bug in the interpretation of yaw-pitch-roll in POS files. The pitch
angle was negated.
VXL Library
- Changed underlying VXL function used in similarity transformation
estimation algorithm to improve algorithm accuracy. - Remove landmarks that triangulate behind any of the cameras.
These erroneous triangulations were causing large SBA errors.
v0.3.1
MAPTK v0.3.1 Release Notes
Minor patch release since v0.3.0 containing bug fixes as described below.
Fixes since v0.3.0
Core Library
- Added feet-meter conversions in camera and INS data update functions.
Tools
- Fixed erronious reporting of an out-of-date usage message. Now reports
currect current usage.