ENIMDA
======
Entropy-based image border detection algorithm: detect border or whitespace offset for every side of image,
supports animated GIFs.
|crates| |travisci|
.. |crates| image:: https://img.shields.io/crates/v/enimda.svg
:target: https://crates.io/crates/enimda
:alt: latest version at crates.io
.. |travisci| image:: https://travis-ci.org/embali/enimda-rs.svg?branch=master
:target: https://travis-ci.org/embali/enimda-rs
:alt: travis ci build status
Documentation
-------------
`https://docs.rs/enimda/ `_
Algorithm (simplified)
----------------------
For each side of the image starting from top, rotating image counterclockwise to keep side of interest on top:
* Get upper block 25% of image height
* Get lower block with the same height as the upper one
* Calculate entropy for both blocks and their difference
* Make upper block 1px less
* Repeat from p.2 until we hit image edge
* Border is between blocks with entropy difference maximum
.. image:: https://raw.githubusercontent.com/embali/enimda-rs/master/algorithm.gif
:alt: Sliding from center to edge - searching for maximum entropy difference
:width: 300
:height: 300
Example
-------
Find image borders:
.. code-block:: rust
extern crate enimda;
use std::path::Path;
use enimda::enimda;
fn main() {
let path = Path::new("source.jpeg");
let borders = enimda(&path, Some(10), Some(512), Some(50), Some(0.25), Some(0.5), Some(false)).unwrap();
println!("{:?}", borders);
}
Demo
----
For demo please refer to `ENIMDA Demo `_
Also it lives at `Picture Instruments `_ as 'Remove borders' instrument
Tests
-----
.. code-block:: bash
cargo test