11 releases

new 0.2.0 Oct 8, 2024
0.1.10 Oct 6, 2024
0.1.8 Jul 23, 2024
0.1.5 Jun 23, 2024

#394 in Video

Download history 152/week @ 2024-06-21 15/week @ 2024-06-28 33/week @ 2024-07-05 305/week @ 2024-07-19 48/week @ 2024-07-26 2/week @ 2024-08-02 24/week @ 2024-09-13 8/week @ 2024-09-20 2/week @ 2024-09-27 317/week @ 2024-10-04

351 downloads per month

BSD-3-Clause OR Apache-2.0

125KB
3.5K SLoC

Histogram equalization in Rust

There is some implementation of CLAHE (contrast-limited adaptive histogram equalization), AHE (adaptive histogram equalization), and histogram equalization performed in different color spaces.

All methods may perform histogram equalization in:

  • YUV (YCgCo subtype) always with 256 hist bins for performance purposes.
  • HSV
  • HSL
  • CIE L*a*b
  • CIE L*u*v
  • Oklab
  • Jzazbz
  • Oklch

All color spaces as it is have different properties and of course results.

There is no implementation for gray images.

Example

clahe_luv_rgb(
    src_bytes,
    stride as u32,
    &mut dst_bytes,
    stride as u32,
    dimensions.0,
    dimensions.1,
    4f32,
    ClaheGridSize::new(8, 8),
    128,
);

How to use with image crate

let img = ImageReader::open("assets/asset_1.jpg")
    .unwrap()
    .decode()
    .unwrap();
let dimensions = img.dimensions();
let channels = 3;
let stride = dimensions.0 as usize * channels;
let mut dst_bytes: Vec<u8> = vec![0; stride * dimensions.1 as usize];
let src_bytes = img.as_bytes();
hist_equal_hsv_rgb(
    src_bytes,
    stride as u32,
    &mut dst_bytes,
    stride as u32,
    dimensions.0,
    dimensions.1,
    128,
);
image::save_buffer(
    "converted_eq_hsv.jpg",
    &dst_bytes,
    dimensions.0,
    dimensions.1,
    image::ExtendedColorType::Rgb8,
)
.unwrap();

Results example

Clahe

Original

CLAHE

Ahe

Original

Ahe


This project is licensed under either of

  • BSD-3-Clause License (see LICENSE)
  • Apache License, Version 2.0 (see LICENSE)

at your option.

Dependencies

~4.5MB
~94K SLoC