@@ -14,7 +14,7 @@ pub struct Image<T> {
14
14
format : PixelFormat ,
15
15
}
16
16
17
- impl < T > Image < T > where T : One , T : Zero , T : Clone , T : Default {
17
+ impl < T > Image < T > where T : One + Zero + Clone + Default {
18
18
pub fn new ( rows : usize , columns : usize , format : PixelFormat ) -> Self {
19
19
Image {
20
20
data : Array3 :: < T > :: zeros ( ( rows, columns, format. channels ( ) ) ) ,
@@ -30,30 +30,30 @@ impl<T> Image<T> where T: One, T: Zero, T: Clone, T: Default {
30
30
self . data . slice_mut ( s ! [ row, col, ..] )
31
31
}
32
32
33
- pub fn conv ( & self , kernel : ArrayView3 < T > ) -> Image < T > {
33
+ pub fn conv < U > ( & self , kernel : ArrayView3 < U > ) -> Image < T > {
34
34
Image {
35
35
data : conv ( self . data . view ( ) , kernel) ,
36
36
format : self . format
37
37
}
38
38
}
39
39
40
- pub fn conv_inplace ( & mut self , kernel : ArrayView3 < T > ) {
40
+ pub fn conv_inplace < U > ( & mut self , kernel : ArrayView3 < U > ) {
41
41
self . data = conv ( self . data . view ( ) , kernel) ;
42
42
}
43
43
}
44
44
45
45
46
- pub fn conv < T > ( image : ArrayView3 < T > , kernel : ArrayView3 < T > ) -> Array3 < T > where T : Default , T : Clone {
47
- let mut result = Array3 :: < T > :: default ( image. dim ( ) ) ;
46
+ pub fn conv < T , U > ( image : ArrayView3 < T > , kernel : ArrayView3 < U > ) -> Array3 < T > where T : Clone + Zero {
47
+ let mut result = Array3 :: < T > :: zeros ( image. dim ( ) ) ;
48
48
let k_s = kernel. shape ( ) ;
49
49
let row_offset = k_s[ 0 ] /2 ;
50
50
let col_offset = k_s[ 1 ] /2 ;
51
51
52
52
Zip :: indexed ( image. windows ( kernel. dim ( ) ) )
53
53
. apply ( |( i, j, _) , window| {
54
- let mult = window * kernel;
54
+ let mult = window * kernel;
55
55
let sums = mult. sum_axis ( Axis ( 2 ) ) ;
56
- result. slice_mut ( s ! [ i+row_offset, j+col_offset, ..] ) . assign ( sums) ;
56
+ result. slice_mut ( s ! [ i+row_offset, j+col_offset, ..] ) . assign ( & sums) ;
57
57
} ) ;
58
58
59
59
result
0 commit comments