Skip to content

v1.0.0

Compare
Choose a tag to compare
@mleotta mleotta released this 14 Jun 14:01
· 772 commits to release since this release
db2506d

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.