8 releases (4 breaking)
0.5.1 | Sep 15, 2024 |
---|---|
0.5.0 | Jul 31, 2024 |
0.4.0 | Mar 24, 2024 |
0.3.0 | Aug 20, 2023 |
0.1.2 | Nov 30, 2022 |
#37 in Multimedia
104 downloads per month
26KB
397 lines
image-hdr
This is a rust library which implements the HDR merging algorithm for camera images taken with different exposure times (or with bracketing). It uses the algorithms described in https://www.cl.cam.ac.uk/research/rainbow/projects/noise-aware-merging/2020-ppne-mle.pdf, and uses "Poisson Photon Noise Estimator" equations to estimate final radiances at each pixel position.
Current State
The library is still in early stages of development, but aims to provide a crate that can handle all HDR merging needs. Towards that end, the following todos are the top priority:
- Tone mapping algorithm implementations.
- Improve performance.
Dependencies
- image-rs: Uses DynamicImage as the output format and storage format between calculations.
- rawloader: For supporting RAW image formats.
- rayon: For doing point calculations in parallel.
- kamadak-exif: For getting image's metadata, specifically exposure time and gain (ISO).
Usage
let paths = vec!["src/image1.tif", "src/image2.tif", "src/image3.tif"];
let hdr_merge = image_hdr::hdr_merge_images(paths);
let stretched = apply_histogram_stretch(&fusion);
stretched
.to_rgba16()
.save(format!("src/hdr_merged.tiff"))
.unwrap();
Samples
Given the following 3 exposures:
Resulting unprocessed image:
After basic processing (Levels and Contrast):
Contributing
Bug reports and pull requests welcome at https://github.com/anshap1719/image-hdr
Citations
- Noise-Aware Merging of High Dynamic Range Image Stacks without Camera Calibration by Param Hanji, Fangcheng Zhong, and Rafa l K. Mantiuk (https://www.cl.cam.ac.uk/~rkm38/pdfs/hanji2020_noise_aware_HDR_merging.pdf)
Dependencies
~4–6MB
~121K SLoC