Skip to content

Histogram equalization in Rust

License

Apache-2.0, BSD-3-Clause licenses found

Licenses found

Apache-2.0
LICENSE.md
BSD-3-Clause
LICENSE-BSD.md
Notifications You must be signed in to change notification settings

awxkee/histogram_equalization

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

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();