Skip to content

eadf/libstacker.rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crates.io Documentation Workflow dependency status license

libstacker

A multithreaded port of the python code found here: github.com/maitek/image_stacking

This crate contains multithreaded functions that aligns and stacks images using OpenCV and Rayon.

Read more about image alignment with OpenCV here.

Usage:

Download the test images:

git clone https://github.com/maitek/image_stacking image_stacking_py

Build the code:

Opencv-rust can be little tricky to install. Follow the instructions from rust opencv

You will need the "clang-runtime" feature if you experience problems with your clang environment .

cargo build --release

or

cargo build --release --features "clang-runtime"

Run the example:

cargo run --example main --release

or

cargo run --example main --release --features "clang-runtime"

and then wait a few seconds. The program should sort the images by quality, drop the least sharp image, and align and stack the rest. The result should be two windows showing the stacked images using two different alignment methods.

API

let keypoint_match_img:opencv::core::Mat = keypoint_match(
   // a Vec<PathBuf> containing paths to image files
   collect_image_files(&PathBuf::from("image_stacking_py/images"))?,
   KeyPointMatchParameters {
      method: opencv::calib3d::RANSAC,
      ransac_reproj_threshold: 5.0,
   },
)?;

Depending on the parameters the ecc_match() is much slower, but also more accurate.

let ecc_match_img:opencv::core::Mat = ecc_match(
   // a Vec<PathBuf> containing paths to image files
   collect_image_files(&PathBuf::from("image_stacking_py/images"))?,
   EccMatchParameters {
      motion_type: MotionType::Homography,
      max_count: Some(5000),
      epsilon: Some(1e-5),
      gauss_filt_size: 5,
   },
)?;

Todo

  • Figure out the docs.rs problem
  • Figure out what to do with .reshape() in keypoint_match()
  • Figure out some opencv parameters responsibility sneakily shifted to end user.
  • Complete the sharpness_tenengrad() function. Mat not square?
  • Command line options in the example

License

Licensed under either of

at your option.

About

Image stacker based on OpenCV-rust

Topics

Resources

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
Unknown
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages