convolve_image/
convolve.rs

1use crate::kernel::{SeparableKernel};
2
3pub trait Convolution {
4    fn compute_pixel_index(
5        stride: usize,
6        kernel_size: usize,
7        kernel_index: isize,
8        pixel_index: usize,
9        max: usize,
10    ) -> u32 {
11        let kernel_size = kernel_size as isize;
12        let kernel_padding = kernel_size / 2;
13
14        let distance = kernel_index * stride as isize;
15
16        let mut index = pixel_index as isize + distance;
17
18        if index < 0 {
19            index = -index;
20        } else if index > max as isize - kernel_padding {
21            let overshot_distance = index - max as isize + kernel_padding;
22            index = max as isize - overshot_distance;
23        }
24
25        index as u32
26    }
27
28    fn convolve<const KERNEL_SIZE: usize>(
29        &mut self,
30        kernel: SeparableKernel<KERNEL_SIZE>,
31        stride: usize,
32    );
33}