Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Histogram equalization in Rust

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages