1
- using ImageFiltering
1
+ using ImageFiltering, ImageCore
2
2
using PkgBenchmark
3
3
using BenchmarkTools
4
4
using Statistics: quantile, mean, median!
5
5
6
+ function makeimages (sz)
7
+ imgF32 = rand (Float32, sz)
8
+ imgN0f8 = Array (rand (N0f8, sz))
9
+ imggrayF32 = Array (rand (Gray{Float32}, sz))
10
+ imggrayN0f8 = Array (rand (Gray{N0f8}, sz))
11
+ imgrgbF32 = Array (rand (RGB{Float32}, sz))
12
+ imgrgbN0f8 = Array (rand (RGB{N0f8}, sz))
13
+ return (" F32" => imgF32, " N0f8" => imgN0f8, " GrayF32" => imggrayF32,
14
+ " GrayN0f8" => imggrayN0f8, " RGBF32" => imgrgbF32, " RGBN0f8" => imgrgbN0f8)
15
+ end
16
+
17
+ sz2str (sz) = join (map (string, sz), ' ×' )
18
+
6
19
SUITE = BenchmarkGroup ()
7
20
SUITE[" mapwindow" ] = BenchmarkGroup ()
8
21
@@ -12,8 +25,34 @@ let grp = SUITE["mapwindow"]
12
25
img3d = randn (10 ,11 ,12 )
13
26
grp[" cheap f, tiny window" ] = @benchmarkable mapwindow (first, $ img1d, (1 ,))
14
27
grp[" extrema" ] = @benchmarkable mapwindow (extrema, $ img2d, (5 ,5 ))
28
+ grp[" maximum" ] = @benchmarkable mapwindow (maximum, $ img2d, (5 ,5 ))
29
+ grp[" minimum" ] = @benchmarkable mapwindow (minimum, $ img2d, (5 ,5 ))
15
30
grp[" median!" ] = @benchmarkable mapwindow (median!, $ img2d, (5 ,5 ))
16
31
grp[" mean, small window" ] = @benchmarkable mapwindow (mean, $ img1d, (3 ,))
17
32
grp[" mean, large window" ] = @benchmarkable mapwindow (mean, $ img3d, (5 ,5 ,5 ))
18
33
grp[" expensive f" ] = @benchmarkable mapwindow (x -> quantile (vec (x), 0.7 ), $ img3d, (3 ,3 ,3 ))
19
34
end
35
+
36
+ SUITE[" imfilter" ] = BenchmarkGroup ()
37
+ let grp = SUITE[" imfilter" ]
38
+ kerninsep = (centered ([- 1 , 0 , 1 ]),
39
+ centered ([ 1 / 5 1 / 4 1 / 7 ;
40
+ 1 / 2 1 / 3 - 1 / 11 ;
41
+ - 1 / 25 1 / 9 - 1 / 7 ]), # has full rank so won't be factored
42
+ centered (rand (3 , 3 , 3 )))
43
+ for sz in ((100 , 100 ), (2048 , 2048 ), (2048 ,), (100 , 100 , 100 ))
44
+ for (aname, img) in makeimages (sz)
45
+ trues = map (i-> true , sz)
46
+ twos = map (i-> 2 , sz)
47
+ szstr = sz2str (sz)
48
+ kerniir = KernelFactors. IIRGaussian (map (i-> 10.0f0 , sz))
49
+ kerng = KernelFactors. gaussian (map (i-> 10.0f0 , sz))
50
+ for (kname, kern) in zip ((" densesmall" , " denselarge" , " factoredsmall" , " factoredlarge" ),
51
+ ((kerninsep[length (sz)],), (Kernel. DoG (twos),), KernelFactors. sobel (trues, 1 ), kerng))
52
+ grp[kname* " _" * aname* " _" * szstr] = @benchmarkable imfilter ($ img, $ kern, " replicate" , ImageFiltering. FIR ())
53
+ end
54
+ grp[" IIRGaussian_" * aname* " _" * szstr] = @benchmarkable imfilter ($ img, $ kerniir, " replicate" , ImageFiltering. IIR ())
55
+ grp[" FFT_" * aname* " _" * szstr] = @benchmarkable imfilter ($ img, $ (Kernel. DoG (twos),), " replicate" , ImageFiltering. FFT ())
56
+ end
57
+ end
58
+ end
0 commit comments