Releases: Kitware/TeleSculptor
TeleSculptor v1.2.0
TeleSculptor v1.2.0 Release Notes
This is a minor release of TeleSculptor that provides both new functionality
and fixes over the previous v1.1.0 release.
The biggest changes in this release are the transition to a new Sphinx-based
user manual at https://telesculptor.readthedocs.io, the removal of deprecated
MAP-Tk command line tools, improved handling of mesh coloring from the video,
and an interface for manual camera calibration by manually placing camera
registration points on frames.
TeleSculptor v1.2.0 also builds on updated KWIVER v1.6.0 and Fletch v1.5.0,
which provide upgraded third-party packages and improvements to algorithms.
For example, TeleSculptor now uses VTK 9.0, OpenCV 4.5, and Qt 5.12.
KWIVER now supports both CPU and GPU (CUDA) implementations for depth map
fusion, and an option has been added to TeleSculptor to enable GPU use.
While command line tools have been removed from TeleSculptor, it is now
possible to reproduce the entire TeleSculptor processing chain from the
command line using the kwiver command. The command line workflow uses
KWIVER v1.6 directly and does not require the TeleSculptor GUI.
Additional details about TeleSculptor changes in this release are provided
in the detailed release notes below.
Updates since v1.1.2
TeleSculptor Application
-
Move computation of mesh coloring to a separate thread to prevent it from
blocking GUI interaction while running. -
Display a progress bar when coloring the mesh using more than just the
current frame. -
Added an option to mesh coloring that excludes coloring surfaces that are
occluded from the camera's viewpoint. This prevent colors on closer
surfaces from also spilling onto the hidden surfaces behind them. -
Added an option to mesh coloring that excludes coloring surfaces using
pixels masked out by the loaded mask image sequence. -
Added an option to export the fused mesh as a VTP file including the colors
projected from all frames instead of only the mean or median color. -
Updated depth computation tools to return uncertainty images to be displayed
and saved. -
Update Depth Map and Batch Depth Map estimation tools to select the
support frames based on a new angle_span parameter rather than
sequential frames. This allows more consistent angular sampling
of frames. -
Added support for building against VTK 9.0.
-
Added an option to import PLY mesh files like those exported from
TeleSculptor -
Added support for opening .ts (MPEG transport stream) video files.
-
Added interfaces to the GCP and Camera View panels to allow the placement
of Camera Registration Points (CRPs). These are manual feature tracks
placed on multiple images and associated to a GCP. -
Added an interface to estimate a camera from manually placed CRPs.
-
Added keyboard shortcuts to change frames and to change the selected ground
control point. -
Added an option to enable use of the GPU. This specifically supports depth
map fusion for which both GPU and CPU implementations exist. For the first
time, it is now possible to run TeleSculptor end-to-end without a
CUDA-enabled GPU.
Tools
- Removed deprecated command line maptk tools. All the underlying kwiver
algorithms can be accessed via the 'kwiver' command line tool.
Build System
-
The superbuild now allows using system packages for many dependencies.
-
Updated OpenCV version to 4.5.1
-
Updated Qt version to 5.12.8
-
Updated VTK Version to 9.0
Documentation
- Replaced the PDF user guide and the basic HTML help page with a better
formatted and more maintainable manual using Sphinx. The same user manual
is now available at https://telesculptor.readthedocs.io and offline in the
TeleSculptor help menu.
Fixes since v1.1.2
TeleSculptor Application
- Fixed a bug in which the "zoom to landmarks" option would make the World
View projections permanently invalid if there were no landmarks to zoom to.
TeleSculptor v1.1.2
TeleSculptor v1.1.2 Release Notes
This release provides patches to the TeleSculptor v1.1.1 release to address
issues. TeleSculptor v1.1.2 is a bug fix release with no new functionality.
TeleSculptor v1.1.2 also updates from KWIVER v1.5.0 to v1.5.1. Many of these
KWIVER bug fixes also resolve TeleSculptor issues. Please also refer to the
release notes for KWIVER v1.5.1.
https://github.com/Kitware/kwiver/releases/tag/v1.5.1
Fixes since v1.1.1
TeleSculptor Application
-
Coloring landmarks by height previously set the automatic range for the
colormap to the entire height range, which is not very useful since
most data sets have outliers. This has been corrected such that the
auto range of the colormap spans the middle 90% of the height values. -
Fixed an issue with not saving project state after loading a video.
If TeleSculptor was closed after loading a video but before other
processing, the project would not remember which video was loaded. -
Fixed Batch Compute Depth Maps tool to only save final depth maps and not
intermediate results. This prevents intermediate results from accidentally
overwriting final results. -
Fixed Run End-to-End tool to properly save depth maps after disabling the
writing of intermediate results. -
Fixed the display of color mapped data when non-finite values are present
in the data. The data range is now set using only the finite values. -
Fixed warning in new versions of CMake about conversion of TYPE to STRING.
-
Fixed an issue with the Camera View not properly updating the visualization
of landmarks when landmarks change during tool updates. -
Fixed an issue in which std::isfinite is not resolved with some compilers
due to the missing cmath header.
Packaging
- Fix bug in creating TeleSculptor package on Windows with vc16. The search
path for OpenCV DLLs included only vc14 and vc15. It now will look for any
vc version.
TeleSculptor v1.1.1
TeleSculptor v1.1.1 Release Notes
This release provides patches to the TeleSculptor v1.1.0 release to address
issues. TeleSculptor v1.1.1 is a bug fix release with no new functionality.
Fixes since v1.1.0
Documentation
- Removed the old, outdated examples for MAP-Tk command line tools and
replaced them with link to videos that are good examples for processing
with TeleSculptor.
Packaging
- Fixed the Dockerfile used for building installer packages for Ubuntu.
The Ubuntu build needs "patchelf" to properly package libraries. This
is now added to the Dockerfile.
TeleSculptor Application
-
Fixed a crash that occured when opening a bad video file.
TeleSculptor now handles the failure to load without crashing. -
Fixed a crash that happens when running end-to-end immediately after
feature tracking completes. -
Fixed an issue where cameras and depth maps in a project file were
not loaded when opening a project that uses an image list instead of
a video file. This was because the metadata scan needs to complete
first to index the image file names for each frame. Cameras and depth
maps are now loaded after the metadata scan is complete if not already
loaded earlier.
Testing
- Updated Travis CI scripts to use the same KWIVER hash as specified in
the TeleSculptor superbuild. Previously it was building the KWIVER master
branch, which might not have been compatible with the TeleSculptor branch
being tested.
TeleSculptor v1.1.0
TeleSculptor v1.1.0 Release Notes
This is a minor release of TeleSculptor that provides both new functionality
and fixes over the previous v1.0.0 release. The most prominant features of
this new release are improved robustness in struture from motion, an option
to use ground control points to georegister a solution, a logger panel to
show log messages from the algorithms, improved spatial distribution of
tracked features, improved video loading, and a "Run End-to-End" compute
option. Many more improvements have also been made, and these are documented
in detail below.
TeleSculptor v1.1.0 builds against KWIVER v1.5.0 and Fletch v1.4.0.
Updates since v1.0.0
Configuration
- Default configuration files for algorithms have been moved into KWIVER.
TeleSculptor GUI-specific configuration files remain here. TeleSculptor
will now search for configuration files in both TeleSculptor and KWIVER
configuration directories.
TeleSculptor Application
-
Updated the code to work with API changes to kwiver::vital::geo_point.
-
Added a logger panel to show log messages.
-
Added logging to a text file in the project folder.
-
Added an option to the Ground Control Points panel to apply the GCP
constraints to correct for georegistration. The apply button estimates
a 3D similarity transform that best aligns the GCPs with their specified
geodetic locations (latitude, longitude, elevation). The estimated
transform is then applied to all the data to georegister. -
When selecting a subset of video frames in the track features tool the
algorithm now considers modifying each selection slightly to give
priority to picking nearby frames which have camera metadata. -
Changed feature tracking configuration to use non-maximum suppression to
achieve a better spatial distribution of features when contrast is unevenly
distributed across the image. -
Switched from homography to fundamental matrix as the default geometric
filter in feature matching. The fundamental matrix supports more general
scenes and does not require a planar scene or small motion assumption. -
Improved speed of metadata access and loading.
-
Estimate focal length during structure from motion. This option was
previously disabled by default. -
TeleSculptor now loads all video frames and metadata by default instead
of sampling every 10th frame as in the past. This is feasible because
the feature tracking now down samples frames to a reasonable amount instead. -
Added support for bundle adjustment callbacks that do not update the GUI
state. This allows the initializer tool to support early termination
without making it run slower. -
Added new option "ignore_metadata" to force the camera estimation
algorithms to ignore the KLV metadata. This is useful if the metadata is
known to be incorrect. -
Added a new option to keep the origin of the geospatial coordinate system
fixed, rather than re-estimate it when the data changes. -
Added an option to write out the fused mesh as OBJ. Currently this option
supports only the mesh and does not write color per vertex. -
The ruler tool now supports constrained measurements on the vertical (Z)
axis by holding the "z" key or in the horizontal (X-Y) plane by holding
either the "x" or "y" keys. -
The ruler tool now behaves like a ruler with a fixed tick unit distance.
Dragging the ruler progressively increases the number of ruler ticks. -
The user can set the ruler tick distance and color via a popup menu next to
the ruler measurement button. -
Improve responsiveness and information in progress bar for Compute Depth
tool. -
Improved the information in the progress bar for Initialize Cameras and
Landmarks tool. -
TeleSculptor now uses image masks in the depth estimation tools if image
masks have been loaded. Masks indicate which pixels to ignore in depth
estimation. -
TeleSculptor now uses image masks in the depth fusion tool if image masks
have been loaded. -
The tool to batch compute depth maps now provides more frequent status
updates and intermediate results. The cancel option is also more
responsive. -
The auxiliary data fields provided along with depth maps and shown in the
depth map viewer have been renamed. "Best Cost" and "UniquenessRatio" have
been replaced with "Weight" and "Uncertainty". The previous names were
specific to an older algorithm that is no longer used. Weight is an image
of zero to one values indicating how much each pixel contributes to the
final fused model. One use case for weight is the use of masks to disable
contribution for some pixels. Uncertainty is not used yet but is a place
holder for measurements of how uncertain the depth estimate is each pixel. -
Added a menu for compute options including the option to specify whether
or not to use metadata as constraints in computations and an option to
specify whether or not to allow variable (e.g. zooming, swapping) lens. -
Added a special "Run End-to-End" tool to the compute menu that runs a
pipeline of all main tools in order to start from a video and end with
a fused 3D surface mesh without any user interaction. -
Improved video loading to not require an entire scan of the video upon each
open. The scan is still needed to collect metadata, but this can now be
canceled if metadata is not required.
Fixes since v1.0.0
Build System
- Fixed broken PDAL support. PDAL was disabled regardless of the CMake
setting due to a mis-named variable.
TeleSculptor Application
-
Fixed a divide-by-zero bug caused by computing the mean landmark location
when there are zero landmarks. This happened when recomputing the local
coordinate system without landmarks. -
Improved placement of ground control points and ruler tool based on picking
the closest cell or point in the scene along the camera direction. -
Fixed a crash that occurred when applying a color gradient to data with all
the same value. This occurred when selecting to visualize Uncertainty of
depth maps which is currently unused and all zeros. Likewise with Weights
of depth maps when no mask is used. -
Fixed a rendering issue in which cameras were invisible on some platforms.
This bug was caused by setting the line width to 2. Reverting this change
fixed the issue. -
Improved video playback speed by avoiding excessive seeking.
-
Updated "About" dialog github URL from maptk to TeleSculptor.
-
Fixed a bug in translating the ROI when shifting the geo-origin point.
Previously the ROI was collapsing because both the min and max point were
set to the translated min point. -
Fixed a bug in which GCPs or ruler end points would render in random
locations in the camera view if the world location was behind the
camera. The GCPs or ruler for invalid projections are no longer drawn. -
Fixed a bug in which GCPs imported from a file after a camera was loaded
were imported twice. -
Fixed an issue with location precision of landmarks in the Camera View that
occurred when some points project very far from the image. These points are
now filtered out.
Packaging
- The packaging for Linux has been corrected so that setting LD_LIBRARY_PATH
is no longer needed to run executables after unpacking. Libraries in the
package now have RPATH set relative to $ORIGIN.
v1.0.0
TeleSculptor v1.0.0 Release Notes
This is the first major release of TeleSculptor. TeleSculptor was previously
developed as beta software under the name MAP-Tk. TeleSculptor is a graphical
application for aerial photogrammetry that builds on KWIVER. All algorithms
have been moved into KWIVER and this project now focuses on the user interface.
Some command line utilities remain in this release, but these will move into
KWIVER in the future as well.
This is the first release in which TeleSculptor provides an end-to-end pipeline
for building a dense 3D model from a video in the graphical application without
the need for any command line tools. This release has been well tested on a
particular type of aerial video that uses an orbital flight pattern and
encodes metadata in a KLV stream. In future releases we will generalize the
algorithms to work more reliably on a wider range of aerial video, both with
and without metadata.
There is a very large set of changes since the last beta release. These
changes are documented below in detail. At a high level, these changes are
all focused around transforming MAP-Tk, a developer focused toolkit, into
TeleSculptor, an end-user focused application. In support of this transition,
TeleSculptor can now configure and build itself with a CMake superbuild.
That is, building TeleSculptor can now automatically download and build
Fletch and KWIVER before building itself to provide all dependencies in a
single build. The superbuild will also package up the binaries into an
installer.
Known Issues in this Release
-
On MacOS, the color selection buttons function correctly but always show
the color as white in the button. -
Default colors used during the first run of the application are incorrectly
set to white or black. However, once the colors are changed these settings
are cached and reloaded correctly. -
The libraries in the Linux installer package do not properly set the runpath
so it is required to set LD_LIBRARY_PATH to point to the "lib" directory of
the package before running the executables. -
A user interface is provided for setting ground control points to constrain
georegistration of the 3D model, but this release is missing the function
to apply these constraints to improve the georegistration.
Updates since MAP-Tk v0.10.0
Overall
-
TeleSculptor now enforces the use of Python 3 when Python is enabled.
-
Added a Dockerfile to aid with generating Linux packages in a clean
environment. -
Removed all uses of VITAL_FOREACH, which has been removed from KWIVER,
and replace with standard C++11 range-based for loops. -
Updated everything to use the new feature_track_set class and
feature_track_state class from KWIVER. The previous data structure,
track_set is now a base class and is generalized to support other types of
tracks, like moving object tracks. -
Replaced use of the geo_map vital algorithm with the new geodetic conversion
functions and data structures provided in KWIVER. The new approach still
uses plugins (e.g. PROJ4) but only supports one backend at a time that is
globally accessible throughout KWIVER. There is no more need to explicitly
pass a geo_map object around. New data structures, like geo_point, know
how to convert themselves into different coordinate systems.
MAP-Tk Library
-
modified extract_feature_colors API to accept a feature_track_set by
shared_ptr, modify to tracks in-place, and return the same modified
feature_track_set. It also uses the new track_set API to more quickly
find track state on a frame and avoids destroying the frame index if
one is used in the track_set. -
Moved local_geo_cs class into KWIVER and updated TeleSculptor to used the
KWIVER version.
Plugins
-
Moved the Blender and SketchUp plugins out of the scripts directory and
into a top-level plugins directory, added a README, and configured these
files to be installed. -
The SketchUp plugin now supports older version of SketchUp
(back to version 8) and only attempts to load frames which have both an
image file and camera file available in the project.
TeleSculptor
-
Updated the TeleSculptor application to build against VTK 8.0 instead of
VTK 6.2. This upgrade provides substantial improvements to rendering
speed of large data sets. -
Changed frame indexing to be one-based rather than zero-based. This change
was needed since the new streaming video API used in the tracking tools now
produces frames with one-based indexing. Track files produced with older
versions that had zero-based indexing are detected and frame numbers are
shifted by one. -
Video files can now be open directly or via a config file into TeleSculptor
for viewing and processing. -
Added the concept of a "Project", which is essentially a configuration file
in a working directory in which algorithms can write results. The user
must now create or open a project before running an algorithms. -
TeleSculptor now depends on Sprokit from KWIVER and adds a new Sprokit
powered compute tool to compute feature tracks using the new KLT feature
tracker in KWIVER. The tool also detects key frames in video and uses
ORB feature detection and matching on the keyframes with bag of words
frame matching for loop closure. -
A new tool is available in the compute menu to compute a dense depth
map on the current frame. This uses the new Super3D algorithms in KWIVER. -
TeleSculptor now supports logging with log4cplus.
-
If an input video has KLV metadata (0601 or 0104) TeleSculptor will now
parse that metadata and use it to construct initial camera models. It will
also use the metadata to set a geographic origin for the project, which is
written to the project directory. -
TeleSculptor now has a pair of new tools in the Compute menu to save out
either keyframes or all frames of video to image files. -
TeleSculptor now uses a common convention for naming all output files
supporting a frame of video. If the input is an image list it uses the
source image names, if a video it uses video name plus frame number. -
TeleSculptor now has a new tool for triangulating landmarks. This is
useful when cameras are provided (e.g. from metadata), but landmarks are
not. -
TeleSculptor now supports loading and processing videos with increasing
but non contiguous frame numbers. This may occur when loading a video
at a reduced frame rate. -
TeleSculptor now has an option to display only keyframes when playing
back a video. -
The compute menu has been rearranged and now has an "Advanced" submenu
containing tool that are less stable or less commonly used. -
The loop over video frames to extract metadata for camera initialization now
occurs in a separate thread. This allows the user to interact with the GUI
and view the video while the camera initialization occurs. -
The slideshow delay slider has been replaced by a speed slider that controls
the slideshow playback speed. When the slider is to the far left, slideshow
speed is 0.25Hz and when to the far right, the slideshow plays without any
delay between frames. -
Added separate visibility and color options for display of feature tracks
that have descriptors and those that do not have descriptors. This allows
for visual distinction between KLT tracks (without descriptors) on each
frame of video and ORB, or similar, tracks (with descriptors) on keyframes. -
Added a progress bar that appears below the World View to show progress when
tools are running. It can also display a status message. -
Added CMake superbuild to automatically pull and build a specified version
of all the necessary libraries from Fletch and KWIVER. This allows
TeleSculptor to be fully built from a single build, rather than having to
manually build and connect multiple builds. The superbuild does still allow
using a manually built KWIVER/Fletch if so desired. -
Updated TeleSculptor to use Qt version 5.11 instead of 4.8. This also
enables the OpenGL2 backend in VTK 8.0 which provides faster rendering.
Qt5 now requires Python to build, so we are also requiring Python for
the superbuild, which enables Python in KWIVER. We are not yet taking
advantage of KWIVER Python bindings in TeleSculptor, but may in the future. -
Added ability to interactively add and edit a region of interest in the
world view. -
Added ability to specify image masks. Currently these are supported by
dense feature tracking. -
Added ability to place and edit ground control points that are synchronized
across the world and camera views. The points can be exported to a geojson
file and get imported using the standard import project infrastructure. -
Double-clicking the mouse pointer in the WorldView allows to set the center
of rotation of the view camera about the nearest picked point in the view. -
Refactored the code to remove the ReconstructionData class that was left
over from when surface extraction was part of a separate repository. -
Added metrics for RMS error by camera and a check that the rays meeting at a
point have some minimum angle. -
Switched the iso-surfacing algorithm to
flying edges. -
Rebranded "MAP-Tk TeleSculptor" to simply "TeleSculptor".
The name "maptk" is still used in parts of the source code. -
Combined the "Mesh" and "Colored Mesh" export options into a single option
named "Fused Mesh". This will save the mesh with or without color depending
on whether color i...
v0.10.0
MAP-Tk v0.10.0 Release Notes
This is a minor release of MAP-Tk that provides both new functionality and
fixes over the previous v0.9.0 release. This release introduces another big
refactoring of the MAP-Tk code base. MAP-Tk now builds against KWIVER instead
of the stand-alone Vital repository. Vital has moved into KWIVER and the stand
alone Vital repository is discontinued. All of the plugins previously located
in MAP-Tk have also moved into KWIVER. The plugins are now called "arrows".
That leaves this project, MAP-Tk, with a collection of tools and scripts for
photogrammetry. MAP-Tk is no longer a software development kit. The SDK has
become KWIVER. MAP-Tk is now the collection of end user photogrammetry tools
built on top of KWIVER.
The GUI application is now the central part of the MAP-Tk project, and this
release of MAP-Tk gives the MAP-Tk GUI a new name. It was previously
just called MAP-Tk GUI or MapGUI. We are now calling it "TeleSculptor".
TeleSculptor has become more than just a tool for visualization of results.
Starting in this release you can now run all the steps of an end-to-end
structure-from-motion pipeline directly in the GUI and get live visualization
of the results as they are computed. This release also has experimental
support for extracting, coloring, and rendering iso-surfaces from volumetric
data. The use case is depth map fusion using a trucated signed distance
function. This currently requires external tools (CudaDepthMapIntegration)
but we will integrate those algorithm into the GUI in a future release.
The command line tools in MAP-Tk now use a video_input API from KWIVER to allow
direct processing of video files without needing to first decode the video into
a list of images. This feature has not yet come to TeleSculptor, but will
in a future release. Image lists are still handled by the video_input API
through an image list reader backend.
There are two new command line tools in this release of MAP-Tk:
maptk_detect_and_describe and maptk_apply_gcp. The first tool allows you to
pre-compute feature detections and descriptors for each frame of video and
cache them on disk. The same algorithms are already run in
maptk_track_features but the detect_and_describe tool runs them faster by
processing each frame in parallel using a thread pool. The second tool allows
you to post process a bundle adjustment solution to apply or re-apply ground
control points (GCPs) for geo-registration. The same algorithms are already
run at the end of maptk_bundle_adjust_tracks, but maptk_apply_gcp allows you to
easily reapply GCPs without re-running bundle adjustment.
For additional details about the changes in this release, see the detailed
notes below as well as the release notes of the corresponding KWIVER v1.1.0
release.
Updates since v0.9.0
Core Plugin
- Added an option to the PCA canonical transform estimator to shift the ground
plane vertically to place a configurable percentile of the landmarks above
the ground.
Examples/Configs
-
Updated the example tool configuration files to account for tool changes
to use the video_input API. -
Added default config files for video_input algorithms that load from image
lists, with and without POS files. -
Refactored core_track_features.conf to make the feature detector,
descriptor, and matcher reusable across other configs. Also refactored
the loop closure configs to reuse a common feature matcher config. -
Update core_track_features.conf to include configuration for writing
features and descriptors to disk with the core feature_descriptor_io
algorithm.
Main Library
-
Removed the ins_data structure for holding POS file data as well as all
functions for reading and writing POS files. This is now covered by
the more general video_metadata structure in KWIVER. -
Updated all the local_geo_cs functions that used ins_data to use
video_metadata instead.
Scripts
-
In the SketchUp import plugin allow the user to select how many frames to
use if there are more than 10 available. -
Added options in the krtd_and_ply_to_homogs.py script to estimate a ground
plane from the PLY data or use the Z=0 plane when computing homographies. -
Added an option in the mosaic_images.py script to scale the output image and
another option to estimate the scale of the output to match the scale of the
input images on average. -
Improved memory efficiency of mosaic_images.py by avoiding preloading of
all images. -
Added a script to convert Novatel IMU data from the SUSSEX datasets to the
POS file format used by MAP-Tk.
Tools
-
Updated all tools to use the new plugin loading framework from KWIVER.
-
Added python version of track features tool.
-
The maptk_bundle_adjust_tracks tool now has a configuration option to write
out the geographic coordinates of the local coordinate system origin. Also
this same option can be used to read an origin location in to specify the
origin point manually. -
Added a tool to apply ground control points to transform the coordinate system
without running bundle adjustment. -
Updated the maptk_bundle_adjust tool to use the filter_tracks algorithm from
KWIVER instead of directly applying filters. -
Added a new detect_and_describe tool that runs feature detection and
descriptor extraction on each frame and writes the outputs to files
using the feature_descriptor_io algorithm. This tool uses the thread pool
to process frames in parallel. -
Updated all tools to use the video_input API from KWIVER to read both
images and metadata. This replaces the custom loops over files in an image
list. This change allows tools to run directly on video files (e.g. AVI,
MPEG) with optional KLV metadata as well as lists of images with optional
lists of POS metadata files.
TeleSculptor Application
-
Updated the GUI to use the new plugin loading framework from KWIVER.
-
Extended the tool framework in the GUI to handle callbacks from the tools
to allow some tools to provide updated visualization of intermediate results
while they are still running. Also extended the tool framework to allow
creation of new cameras and landmarks, not just update existing ones. -
Added a cancel option for GUI computation tools which run for a long time
and use callbacks to provide updates. The cancel button allows for early
termination of those tools. -
Add visualization of intermediate results of the bundle adjustment tool
using a callback. -
Added a camera and landmark initialization tool that creates cameras
and landmarks starting with just tracks. It uses callbacks to show
intermediate results. -
Added an icon in the GUI for the depth map.
-
Added specialized vtk filters for efficiently processing the depth map for
display in both the WorldView and DepthMapView. -
Switched DepthMapView display representation to points instead of polygons;
it renders much faster and is indistinguishable for sufficiently large point
size. The '+' and '-' keys can be used to increase and decrease,
respectively, the point size of the depth map in both the WorldView and
DepthMapView; the point size of each display is controlled independently
based on focus. -
Added a "Filter Tracks" tool to the GUI that runs the filter_tracks
algorithm in KWIVER. Updated the GUI to properly clear existing tracks
before adding tracks returned from a tool. -
Updated the GUI to allow "video_source" as an alternative to
"image_file_list" when looking for a list of images to load in a project
config file. This currently only handles the case where the video source
is a list of images, but is compatible with the new variable naming in
tool configuration files. -
Added a "Track Features" tool to the GUI that runs a track_features
algorithm much like the maptk_track_features command line tool. This
tool processes images loaded into the GUI and does not yet support
video files. -
Added an option to export tracks from the GUI to an ASCII text file.
-
Added an option to load a volumetric array and extract an iso-surface
at a provided threshold and show that surface in the World View.
Currently the volume data must be loaded by setting a variable in a
configuration file opened when starting the application from the command
line. This feature is for visualizing the results of fusing multiple
depthmaps using CudaDepthMapIntegration. -
Added options to color the surface surface extracted from a 3D volume
by back projecting one or more images onto the surface. -
Added options to export the extracted surface mesh to PLY or VTK formats.
Fixes since v0.9.0
TeleSculptor Application
-
Removed duplicate loading and filtering of depth maps between the World view
and Depth Map view. This makes it twice as fast. -
Fixed a bug where depth map loading was printing an error message about not
being able to load "" when there is no depth map on the first frame. -
Fixed a bug where the depth map view bounds were not properly set when
loading the first depth map after the first frame.
v0.9.0
MAP-Tk v0.9.0 Release Notes
This is a minor release of MAP-Tk that provides both new functionality and
fixes over the previous v0.8.1 release. However, MAP-Tk is still considered
pre-release software and subject to significant API changes.
Updates since v0.8.1
MAP-Tk Library
- Removed the standalone canonical_transform() function in transform.h in
favor of an abstract algorithm with implementation in the core plugin. - Added a function to match_matrix.h to use the match matrix to score each
track on how important it is in covering the match matrix. - Moved a function to extract a camera from an essential matrix from the core
initialize_cameras_landmarks algorithm into epipolar_geometry.h.
Core Plugin
- Added a new algorithm for canonical transform with the implementation
details moved from the function that was in transform.h. - Added a new loop closure algorithm implementation that searches for
matches in a local neighborhood and then establishes keyframes for
long term loop closure outside that neighborhood. This algorithm
is generally slower than others, but can be configured to produce
considerably more dense match matrices with longer tracks. It also handles
long term loop closure without any assumption about planar scenes. - Added a new matcher that uses a fundamental matrix constraint to filter bad
matches. - Added more config parameters to the initialize_cameras_landmarks algorithm
to allow more control on how the algorithm is run and what thresholds are
used. - Added a new loop closure algorithm that exhaustively matches all pairs of
frames, or can be configured to match all frames within a moving temporal
window.
OpenCV Plugin
- Added support for OpenCV version >= 3.0 while maintaining support for
OpenCV >= 2.4.6. We may drop support for OpenCV 2.X in a future release. - Overhauled OpenCV algorithm introspection structure. Versions 3.x took away
the previous ability to introspect algorithm types and parameters,
requiring, for at least versions 3.x, for there to be manual wrappings of
each algorithm to be exposed. Removed introspection for any version and
now have cross-version compatible manual wrappings of all algorithms at
least present in 3.x that fill the feature detection, descriptor extraction
and feature matching roles. - Added an OpenCV fundamental matrix estimation wrapper. OpenCV can estimate a
fundamental matrix with the presence of outliers using RANSAC.
VXL Plugin
- Added a new algorithm for canonical transform which uses robust estimation
(e.g. RANSAC, LMS, IRLS) from the Rensselaer robust estimation library
(rrel) in VXL to fit a ground plane to the data. The ground plane becomes
the Z=0 plane. The rest of the free parameters are then fit by PCA as in
the core plugin implementation. - Added a video_input algorithm implementation that uses the FFmpeg via the
vidl_ffmpeg_istream class to read video frames and KLV metadata from encoded
video files.
Visualization Application
- Updated the "Align" tool to use the configurable abstract algorithm
for canonical transform. - Added an option to display the world axes around the visible geometry.
This option can be enabled and disabled in the "View" menu. - Added an option to export the current scene to webGL. This option is only
available if VTK was built with the option Module_vtkWebGLExporter turned on.
This option can then be found in the "File > Export" menu. - The absolute path to the current frame is now displayed at the bottom of the
Camera view. - The GUI now accepts a list of files to be opened on the command line.
- Added a depth map view and a depth map visualization in the world view. The
depth maps can be thresholded directly in the world view, and the depth map
view offers several visualization modes such as depths, uniqueness ratios or
best cost values. Depth maps can be loaded by initializing the parameter
"depthmaps_images_file" with the path to the depth maps (*.vti files) list in
the configuration file.
Tools
- Updated the bundle_adjust_tracks tool to use the configurable abstract
algorithm for canonical transform. - Added an option to the bundle_adjust_tracks tool to remove all the KRTD
files from the output directory before writing new ones. This is useful
when only a subset of cameras are computed and we do not want a mix of
old and new camera files. - Added
-h
option to C++ track features too. Equivalent to--help
.
Scripts
- Added a Python script which uses OpenCV to produce mosaicked images of
video frames using the homographies produced by maptk_track_features.
Default Configuration
- Switched default loop closure method to keyframe based instead of a mix
of homography based and bad frame detection. - Switched default feature descriptors to use non-upright SURF.
Fixes since v0.8.1
Build System
- When Fletch is found, or referenced by Vital, CMake will now search the
Fletch install root when finding packages. This removes the need to
manually point CMake at each dependent library provided by Fletch. - Removed CMake option to build shared vs static libraries. Due to the plugin
infrastructure used in Vital, we can no longer build static MAP-Tk
libraries.
Plugins
- Corrected all plugins to use the Vital logging framework instead of
cout and cerr for status, debug, and error messages.
Tools
- Corrected the track_features and bundle_adjust_tracks tools to use the
Vital logging framework instead of cout and cerr for status, debug,
and error messages. - Added a new track filtering option to the bundle_adjust_tracks tool
that filters tracks based on match matrix importance. The idea is that
long tracks are usually most important, but some short tracks may be more
important if they are the only tracks that tie together a pair of frames. - Removed call to landmark triangulation algorithm that was effectively doing
nothing.
VXL
- Fixed bug in bundle adjust implementation where input landmarks were being
accidentally modified in-place.
v0.8.1
MAP-Tk v0.8.1 Release Notes
This release provides patches to the MAP-Tk v0.8.0 release to address issues.
MAP-Tk v0.8.1 is a bug fix release with no new functionality.
Fixes since v0.8.0
Core Plugin
- In the core triangulation algorithm, landmarks that were not observed by
enough cameras or had no corresponding tracks were not counted towards the
number of failed triangulations. Now they are.
VXL Plugin
- Updated the CMake code for using VXL to handle changes in VXL master so that
MAP-Tk can build against the latest VXL. The latest VXL master uses
VXL_CORE_INCLUDE_DIRS instead of VXL_CORE_INCLUDE_DIR to specify multiple
include directories (e.g. in source and build trees). This is needed to
find configured headers that are in the build tree. The same is true for
VXL_VCL_INCLUDE_DIRS. MAP-Tk has been fixed to use *_INCLUDE_DIRS when
available.
MAP-Tk GUI
- Failing to parse a config block in the GUI was not reporting any message.
The GUI now catches config exception and prints a warning message. This
is a temporary solution until a proper error dialog is implemented. - Fixed an issue with the ground plane disappearing after loading data that
did not include landmarks. The ground plane now uses the cameras for scale
when only cameras are in the world view and no longer disappears when the
only data loaded is in the image view.
Tools
- Fixed an issue with converting POS filenames to KRTD in the pos2krtd tool.
When producing the KRTD filenames from the POS file names, the pos2krtd
tool was being too aggressive about striping file extensions when more
than one '.' was in the file name. In this release the tool strips the
extension at the last '.' instead of the first.
Scripts
- Fixed a bug in the SketchUp import script was loading MAP-Tk data assuming
units of inches instead of meters. - Worked around an issue in the SketchUp import script in which SketchUp was
limiting the FOV of cameras to greater than 1 degree. The loading script
now adjusts the image width and focal length parameter to force FOV less
than 1 degree when needed. - The SketchUp import script now loads MAP-Tk landmarks into a new layer.
v0.8.0
MAP-Tk v0.8.0 Release Notes
This is a major release of MAP-Tk that provides both new functionality and
fixes over the previous v0.7.2 release. However, MAP-Tk is still considered
pre-release software and subject to significant API changes.
The primary change in this release is a major refactoring of MAP-Tk into
two repositories. There is a new repository called Vital on which MAP-Tk
now depends. Vital now contains core framework constructs from MAP-Tk
while the MAP-Tk repository contains plugins, tools, the GUI application,
and some SfM specific helper functions. This split will allow easier
sharing of the core framework across KWIVER projects. Some core features
from the Vibrant repository (better logging and config parsing) were also
integrated into Vital, and MAP-Tk benefits from those.
As part of the refactoring MAP-Tk also moved to C++11. C++11 provides most
of what MAP-TK relied on Boost for. Thus, the Boost dependency has been
removed and replaced by standard library calls where available. For other
uses of Boost (e.g. filesystem, program options) we now rely on KWIVERSYS.
KWIVERSYS is code provided by Vital and original developed to support CMake.
The move to C++11 means dropping support for some older compilers. Visual
Studio 2013 and above is now required on Windows. Some versions of GCC with
only partial C++11 support are still supported. In particular, GCC 4.4.7 is
supported to allow builds on CentOS 5/6; however, GCC 4.4.7 still requires
Boost in some areas to address standard library deficiencies.
Using the new, more powerful config file parsing in Vital the default MAP-Tk
configuration files have been broken up into smaller files which reference
each other and use namespaces for readability and reuse. The default config
files are now installed and shared by the GUI and CLI tools.
There are numerous additional changes, especially in the GUI visualization
application. These changes are described below.
Updates since v0.7.2
MAP-Tk Library
- Moved a large number of core data types and abstract algorithms to a
new dependent project name Vital. Vital will provide a common framework
for logging, configuration, and core data types to be shared across
KWIVER projects. - Changed the camera and camera_intrinsic classes to act as higher level
containers. Each now has an abstract base class and a "simple" concrete
class. The templated derived classes (e.g. camera_) have been removed.
The simple classes use the double type internally. - Changed the camera to contain a shared pointer to a camera_intrinsics
object rather than an instance. This allows cameras to share common
intrinsics. - Moved some common functions like project() and depth() into the camera
base class to allow usage without down-casting. - Changed the canonical transform function to set the orientation
based on the eigenvector of the landmark point cloud. The cameras are
now only used to set the sign of the up vector (Z-axis). - Improved the Necker reversal transform so that the residual error
is now kept low after the transform and the transform is now involutory.
That is, applying the reversal a second time will return to the previous
state. - Removed required dependency on Boost. Replaced Boost with equivalent
functions in the C++11 standard library when available. When not available
kwiversys (found in Vital) provides equivalent constructs. The exception
is that the unit tests will require boost::random for some older C++0x
compilers without std::random. - Applying transformations now better preserve additional data associated with
landmarks (e.g. color, number of observations). - Added a new utility module with functions to extract feature colors from
an input image (and apply to relevant features in a feature track set), and
to compute landmark colors from a feature track set with color information. - Refactored some helper functions into epipolar_geometry.h for converting
between fundamental matrices, essential matrices, and cameras, and for
computing inliers to a fundamental matrix within feature matches.
Configuration
- The sample config files for the tools have now been refactored. Reusable
default config files for each algorithm are now provided in the "config"
directory and example top-level config files are provided in the "examples"
directory, organized by data set. The example config files include the
algorithm config files using the new "include" directive. Algorithm config
files may include other algorithm include files. - Config files are now installed with the application and can be found at
runtime anywhere on the configuration search path. The configuration
search path can be extended with the KWIVER_CONFIG_PATH environment
variable.
Core Plugin
- Updated triangulate_landmarks to set the number of observations on each
computed landmark. - Improved initialize_cameras_landmarks to allow for incremental
initialization that optionally runs an occasional bundle adjustment
and can remove landmarks/tracks that still have larger error after
bundle adjustment. It also applies Necker reversal and runs another
bundle adjustment to test if the reversed solution has lower error.
Ceres Plugin
- Added an option to the bundle adjust algorithm to control how camera
intrinsics are shared across cameras. The default auto sharing mode
optimizes a separate set of intrinsics for each camera_intrinsics object
shared amongst the cameras. Additional options allow forcing each camera
to have its own independent intrinsics and forcing all cameras share
one common set of intrinsics. - Modified bundle_adjust to preserve additional data associated with landmarks
(e.g. color, number of observations) during optimization.
VXL Plugin
- Updated triangulate_landmarks to set the number of observations on each
computed landmark. - Added an initial implementation of fundamental matrix estimation using VXL.
Visualization Application
- Added ability to execute some computations (for now, computing and applying
basic transformations, applying bundle adjustment to refine the solution)
from within the GUI. - Added ability to export cameras and landmarks to (respectively) KRTD and PLY
files. - Added ability to visualize locations of corresponding feature points on
adjacent frames to the camera view. This may be helpful as an additional
means of visualizing camera motion when there exists a spatial correlation
between adjacent cameras (e.g. frames extracted from continuous-shot video). - Added "match matrix" view, allowing the number of corresponding feature
points for arbitrary frame pairs to be visualized as a "heat map" with
various Visualization options. - Added ability to load imagery directly, and without requiring that cameras
are loaded. - Added ability to visualize landmarks by "true color", elevation, or number
of observations, when relevant data is available. - Added ability to selectively display ("filter") landmarks based on values of
available data (e.g. elevation, number of observations). - Added ground plane display to world view.
- Added ability to view camera frame image, projected to the ground plane, in
the world view. - Added ability to toggle world view between parallel and perspective
projections, and to reset the rotation of the same to one of several basic
presets (top, left, etc.). - Added ability to change the background color of the views.
- The GUI user manual can now be accessed from within the GUI.
- Added an "About" dialog including information about the version number,
acknowledgements, license, and build information.
OCV Plugin
- Images are now mapped so that the first channel of the vital::image view is
red (RGB) rather than blue (BGR).
SketchUp Plugin
- Added a new plugin (Ruby scripts) for the SketchUp 3D Modeling software
(http://www.sketchup.com/) that allow direct import of MAP-Tk outputs by
loading the MAP-Tk config files or individually loading KRTD or PLY files.
Once loaded, the cameras are presented as "Photo Match" pages which allows
the user to build models aligned to images.
Tools
- The track features tool now extracts feature colors and writes them to the
track file. - The bundle adjust tool now computes landmark colors from feature colors and
writes them to the landmark PLY.
Fixes since v0.7.2
OpenCV Plugin
- Fixed an issue with some parameters to draw_tracks and analyze_tracks
in which the get_configuration function was always returning the default
parameters, even after other values were set.
Visualization Application
- Several performance bottlenecks that limited the rate at which "slideshow"
mode could switch frames have been identified and mitigated. - Fixed bug where newly loaded landmarks would be visible in the world view
even if landmarks were disabled. - Fixed bug that caused feature tracks to be "misaligned" if a camera could
not be loaded.
v0.7.2
MAPTK v0.7.2 Release Notes
This release provides patches to the MAPTK v0.7.1 release to address packaging
issues. MAPTK v0.7.2 is a bug fix release with no new functionality beyond
packaging support.
The binaries provided with this release should address three issues with the
last release. First, the sample config files have been updated to match the
current code. Second, the plugin's dependent libraries that were missing are
now included. Third, the default install directory has been added to the
plugin search path so plugins can be found.
This binaries for this release are limited in that they must be installed in
the default install location to properly find the plugins. This issue will be
addressed in v0.8.0 with an environment variable. For now you must install to:
Windows: C:\Program Files\MAP-Tk 0.7.2
Mac OS X: /Applications/MAP-Tk.app
Linux: /usr/local/
The issue with plugin search path only affects the command line tools. The
GUI does not use the plugins in this release.
Fixes since v0.7.1
Build System
- Updated CMake code to create packaging bundle that contains all
plugins and dependent libraries. The resulting package will contain
all necessary libraries other than system libraries. The previous
release was missing dependent libraries for the plugins. - Added a MAPTK_FIXUP_BUNDLE_ON_PACKAGE option that allows the user to
enable or disable the bundle creation that should only be done during
packaging. In the last release a standard install on Linux was impossible
because fixup_bundle copied all the dependent libraries into the install
bin directory. - Added the EXTRA_MODULE_PATH CMake variable to specify an optional single
additional directory for the algorithm plugin manager to search for plugins.
This allows packages to be built that have a search path established relative
to the final install location. The previous release did not contain a valid
search path and plugins were not found.
Tools
- Updated the sample config files so that they are compatible with the current
version of the code.