oidn-rs

Crates.io Build Status

Rust bindings to Intel's OpenImageDenoise library.

Documentation

Rust doc can be found here, OpenImageDenoise documentation can be found here.

Example

oidn-rs provides a lightweight wrapper over the OpenImageDenoise library, along with raw C bindings exposed under oidn::sys. Below is an example of using the RT filter from OpenImageDenoise (the RayTracing filter) to denoise an image.

```rust extern crate oidn;

fn main() { // Load scene, render image, etc.

let input_img: Vec<f32> = // A float3 RGB image produced by your renderer
let mut filter_output = vec![0.0f32; input_img.len()];

let device = oidn::Device::new();
oidn::RayTracing::new(&device)
    // Optionally add float3 normal and albedo buffers as well
    .srgb(true)
    .image_dimensions(input.width() as usize, input.height() as usize);
    .filter(&input_img[..], &mut filter_output[..])
    .expect("Filter config error!");

if let Err(e) = device.get_error() {
    println!("Error denosing image: {}", e.1);
}

// Save out or display filter_output image

} ```

The simple example loads a JPG, denoises it, and saves the output image to a JPG. The denoise_exr example loads an HDR color EXR file, denoises it and saves the tonemapped result out to a JPG. denoise_exr can also take albedo and normal data through additional EXR files.