Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mpizenberg/rust_mls

Image Deformation Using Moving Least Squares (Schaefer 2006) in Rust
https://github.com/mpizenberg/rust_mls

Last synced: about 2 months ago
JSON representation

Image Deformation Using Moving Least Squares (Schaefer 2006) in Rust

Awesome Lists containing this project

README

        

# Image Deformation Using Moving Least Squares

Rust implementation of the paper ["Image Deformation Using Moving Least Squares", Schaefer 2006][pdf].

![mls demo output][img]

[pdf]: https://people.engr.tamu.edu/schaefer/research/mls.pdf
[img]: https://mpizenberg.github.io/resources/moving-least-squares/mls-demo.jpg

This repository contains the MLS warping code inside `moving-least-squares/`, an application to image warping inside `moving-least-squaers-image/` as well as a demo with example usage producing the above figure inside the `moving-least-squares-demo/` directory.
To run the demo:

```sh
cd moving-least-squares-demo/
cargo run --release
```

The optional `rayon` feature enables parallel iterators for the generation of the warped image.
```sh
cargo run --release --features rayon
```

Here is what using the library looks like:

```rust
// Open an image from disk.
let img = image::open("data/woody.jpg")?.into_rgb8();

// Define the source control points.
let controls_src: &[(f32, f32)] = &[
(20.0, 160.0),
...
(250.0, 369.0),
];

// Define the destination control points.
let controls_dst: &[(f32, f32)] = &[
(20.0, 250.0),
...
(250.0, 369.0),
];

// Create new warped image.
let warped_img_affine =
mls_image::reverse_dense(&img, controls_src, controls_dst, mls::deform_affine);
```