Rust bindings to Intel's OpenImageDenoise library.
Rust doc can be found here, OpenImageDenoise documentation can be found here.
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.
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.