This is a python library for manipulating images for underwater mosaicking applications. Currently, this libary is capable of:
- Reading input videos.
- Basic pre-processing of images, including undistorting, crop & scaling, color, contrast, and lighting balancing as well as detail enhancement.
- Image registration, such as feature detection and description, matching, and transformation estimation in similarity, affine, and perspective cases.
- Infinite and finite homography transformations on imagery given extrinsic rotations and translations between the camera and a new "virtual" camera.
- Camera rotation compensation from orientation data (e.g. IMU).
- Sequential mosaicking map generation, with minimal memory management support (database + tiling).
The mosaic-library covers these two use-cases:
- Basic implementation (you need an opencv-contrib backend):
pip install mosaic-library[opencv]
- Custom implementation (you have your own opencv-contrib build):
pip install mosaic-library
See the examples folder for demonstrations of the mosaic module.
Checkout out v2.0.0 for the most recent release.
- Classes for the mosaicking.mosaic module. Now you can implement your own classes for mosaicking operations. See mosaicking.mosaic.Mosaic and mosaicking.mosaic.SequentialMosaic for templates.
- Classes for feature extraction: Use the mosaicking.registration.FeatureDetector class for implementing your own feature detectors.
- Classes for preprocessing operations: Use the mosaicking.preprocessing.Preprocessor class for implementing your own preprocessing methods.
- Classes for data reading operations: Use the mosaicking.utils.DataReader class to implement your own data schema.
- Support for NVIDIA CUDA and Video Codec SDK. mosaic-library now takes advantage of OpenCV builds with CUDA and NVCUVID flags.
- See the docker build file and compose files for building a working dev container with cuda or cudacodec support on your system (linux only).
- Implementation of SQLlite: large video files cause memory issues for mosaicking v1. We now cache the feature extraction and matching components to a database file to decrease RAM consumption, allow multiple video sources to be used in the same mosaic, allow incremental updates.
- Use of networkx: mosaics can be represented as transformational relationships between images, we use networkx to represent those relationships through node (local and global image features) and edge attributes (matches and homography transformations).
- Use of scikit-learn: extraction of global image features through Visual Bag of Words is supported through sklearn's k-means clustering.
- Better handling of poor feature matching / homography estimation (see mosaicking.mosaic.SequentialMosaic).
- Basic sphinx documentation hosted on github pages.
- Implementation of homography graph optimization strategies (loop closure + GTSAM / g2o)
- Composite data sources: merge multiple image data sources into one mosaic.
- Integration of additional navigation data sources (USBL, DVL).