convolve_image/
convolve.rs1use 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}