1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
extern crate ndarray;
use ndarray::*;
use ::utils;

pub fn default() -> ShrinkFilter {
    let filter = Array1::<f32>::from(
        vec![
            1.,1.,1.,
            1.,1.,1.,
            1.,1.,1.
        ]
    ).into_shape((3,3)).unwrap();

    ShrinkFilter{
        thresh: 5.,
        filter: filter,
    }
}

pub struct ShrinkFilter {
    pub thresh: f32,
    pub filter: Array2<f32>
}

impl ShrinkFilter {
    pub fn run (&self, img: Array2<i8>) -> Array2<i8> {
        utils::convolve2d(&img.mapv(|e| e as f32), &self.filter).mapv(|e| if e > self.thresh { 1 } else { 0 })
    }
}