convolve-nd 0.1.0

A small library to perform convolution operations on arrays of upto 3 dimensions using arbitrarily-sized separable kernels
Documentation
use image::{DynamicImage, ImageBuffer, Rgb};
use ndarray::Array3;
use convolve_nd::Convolution;
use convolve_nd::kernel::SeparableKernel;

fn main() {
    let img = image::open("sample.jpg").unwrap().to_rgb32f();
    let mut array = Array3::<f32>::zeros((img.height() as usize, img.width() as usize, 3));

    for (x, y, pixel) in img.enumerate_pixels() {
        let [r, g, b] = pixel.0;

        array[[y as usize, x as usize, 0]] = r;
        array[[y as usize, x as usize, 1]] = g;
        array[[y as usize, x as usize, 2]] = b;
    }

    let kernel = SeparableKernel::new([1. / 4., 1. / 2., 1. / 4.]);

    array.convolve(kernel, 4);

    let mut image_buffer = ImageBuffer::<Rgb<f32>, Vec<f32>>::new(img.width(), img.height());

    for (x, y, pixel) in image_buffer.enumerate_pixels_mut() {
        let r = array[[y as usize, x as usize, 0]];
        let g = array[[y as usize, x as usize, 1]];
        let b = array[[y as usize, x as usize, 2]];

        *pixel = Rgb([r, g, b]);
    }

    DynamicImage::ImageRgb32F(image_buffer).to_rgb8().save("output.jpg").unwrap();
}