TeleSculptor Versions Save

TeleSculptor: Aerial Photogrammetry Application powered by KWIVER

v1.2.0

2 years ago

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.

v1.1.2

3 years ago

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.

v1.1.1

3 years ago

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.

v1.1.0

3 years ago

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

4 years ago

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 is enabled when saving.

  • Added High-DPI icons for display on higher resolution displays.

  • Placing ground control points in the view uses a smart guess initial position method. When placing points in the world view, a point placer is used which snaps the point to a nearby landmark or the ground plane. When placing points in the camera view, the depth of the 3D point in the world view is determined by picking along the active camera direction vector for landmarks or the ground plane.

  • We now recompute the geographic origin whenever the landmarks are updated. This keeps the ground plane aligned with the data.

  • Use robust bounds fit to the landmarks when setting or resetting the ROI.

  • Added a new ruler measurement for measuring the distance between two points in the view. The ruler measurement displays two synchronized rulers between the world and camera view. Placing the end-points of the ruler also uses the smart guess initial position approach employed by ground control points.

  • The default state of the depth map and volume visibility in the World View is now "visible". So you no longer need to turn them on manually to see these results.

  • Set the default surface threshold to 0.0 (instead of 0.5) as it should be and set the spin box increments to 0.1.

  • Added an option to the feature tracking tool to provide a maximum number of frames to track on. These frames are selected uniformly from the video.

  • Added an option to the display to only show frames that have feature tracking data.

  • Set default filenames in save dialog boxes.

  • Added a check box to show only inlier residuals. Previously this was the default behavior. Now unchecking the box shows outliers too. Also added an option to color outlier residuals in a different color.

Fixes since MAP-Tk v0.10.0

Build System

  • The CPack installer packaging was broken on MacOS due to using the variable CMAKE_SHARED_LIBRARY_SUFFIX instead of CMAKE_SHARED_MODULE_SUFFIX to find KWIVER plugins to include in the package. These variables are the same on most platforms but differ on MacOS where libraries are .dylib and modules are .so.

Installer

  • Fixed an issue where required data files for PROJ were not installed. This also requires TeleSculptor and the command line tools to set an environment variable to tell PROJ where the data is installed.

TeleSculptor

  • Removed an unused signal/slot connection that was generating warnings on the command line. Neither the signal nor the slot existed.

  • Fixed a visualization bug in which a frame with an invalid camera was still rendered in the world view by borrowing the camera from the most recently displayed valid frame.

  • Fixed a visualization bug in which camera frustums were not rendered when built with GCC with compiler optimizations turned on.

  • TeleSculptor now catches more algorithm exceptions and turns them into warning messages rather than letting the application crash.

  • The functionality to color mesh surfaces was broken when TeleSculptor switched to using the video_input API to load all imagery. This code has now been fixed to work with video_input. It now works as it did before. It also no longer requires camera files to loaded again from KRTD files and instead uses the in memory cameras.

  • Increased the number of significant digits used to 12 when writing the camera parameters to a krtd file with the Blender plugin.

  • The camera path was not showing since the upgrade to VTK 8, now it is.

  • Camera scaling had been broken since it relied on camera path, which was broken. Fixing the camera path rendering also fixed this. Also adjusted the camera scaling range to make it more reasonable.

  • Fixed a crash in the GUI that occurred when the video reader plugin returned a nullptr instead of a valid frame.

  • Fixed issues with ROI initialization and the use of the ROI in determining display scale. If not manually set, the ROI is automatically initialized before running tools. When set, the ROI (not landmarks) is used to set the scene scale for drawing cameras.

  • Switched from calling get_image() in a loop during the depth_to_vtk function to outside the loop. This improves processing speed by eliminating unnecessary image allocations for certain underlying image classes.

  • Fixed the volume surface mesh to use a solid color when not in colorize mode previously the color would change with the surface threshold.

  • Fixed the colorize checkbox for the volume to return the model to solid color when unchecked.

  • Fixed a bug in which the active camera would sometimes flicker or disappear when updating information without changing the active frame.

  • Fixed a bug in which a progress bar would sometimes not go away after a job was completed.

  • Fixed an issue in which the depth map computation was only using support frame coming after the reference frame. The algorithm now uses equal frames both before and after the reference frame.

Tests

  • All of the unit tests in v0.10.0 were testing functions that had moved into KWIVER. Those tests had also been duplicated in KWIVER, so the redundant tests in MAP-Tk were removed. This leaves MAP-Tk with no tests. New tests, especially for the command line tools, should be added in the future.

v0.10.0

6 years ago

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

7 years ago

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

7 years ago

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

8 years ago

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_<T>) 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

8 years ago

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.