#image #vision #computer-vision #labeling #real-time

lutz

Rust implementation of "An Algorithm for the Real Time Analysis of Digitised Images" by R. K. Lutz

7 stable releases

1.4.0 Nov 14, 2023
1.3.1 May 25, 2022
1.2.0 May 25, 2022
1.1.1 May 8, 2021
1.0.0 Apr 11, 2021

#402 in Algorithms

MIT license

13KB
218 lines

Lutz

This is a Rust implementation of "An Algorithm for the Real Time Analysis of Digitised Images" by R. K. Lutz.

It's a single-pass algorithm for connected-component labeling that allows to find 8-connected objects in a binary (monochrome) image.

Usage

Crate expects the user to implement its lutz::Image trait. A possible implementation for a struct wrapping an image::GrayImage type:

struct Image {
    img: image::GrayImage,
    threshold: u8,
}

impl lutz::Image for Image {
    fn width(&self) -> u32 {
        self.img.width()
    }

    fn height(&self) -> u32 {
        self.img.height()
    }

    fn has_pixel(&self, x: u32, y: u32) -> bool {
        self.img.get_pixel(x, y).0[0] > self.threshold
    }
}

Once constructed, a reference to such image should be passed to the lutz function. It will return an iterator over detected objects, each represented as a Vec<Pixel> of its pixel coordinates:

for obj_pixels in lutz::lutz(&img) {
    println!("{:?}", obj_pixels);
}

Dependencies

~0.4–0.9MB
~20K SLoC