1 module rip.processing.filters.robinson;
2
3 private
4 {
5 import rip.processing.filters.directions;
6 import rip.processing.filters.linear;
7 }
8
9
10 class RobinsonOperator : LinearFilter
11 {
12 this(CardinalDirection direction)
13 {
14 apertureWidth = 3;
15 apertureHeight = 3;
16 apertureDivider = 1.0f;
17 apertureOffset = 0.0f;
18
19 final switch (direction) with (CardinalDirection)
20 {
21 case NORTH:
22 flattenKernel = flatten(
23 [
24 [ -1.0f, 0.0f, 1.0f ],
25 [ -2.0f, 0.0f, 2.0f ],
26 [ -1.0f, 0.0f, 1.0f ],
27 ]
28 );
29 break;
30
31 case NORTH_WEST:
32 flattenKernel = flatten(
33 [
34 [ 0.0f, 1.0f, 2.0f ],
35 [ -1.0f, 0.0f, 1.0f ],
36 [ -2.0f, -1.0f, 0.0f ],
37 ]
38 );
39 break;
40
41 case WEST:
42 flattenKernel = flatten(
43 [
44 [ 1.0f, 2.0f, 1.0f ],
45 [ 0.0f, 0.0f, 0.0f ],
46 [ -1.0f, -2.0f, -1.0f ],
47 ]
48 );
49 break;
50
51 case SOUTH_WEST:
52 flattenKernel = flatten(
53 [
54 [ 2.0f, 1.0f, 0.0f ],
55 [ 1.0f, 0.0f, -1.0f ],
56 [ 0.0f, -1.0f, -2.0f ],
57 ]
58 );
59 break;
60
61 case SOUTH:
62 flattenKernel = flatten(
63 [
64 [ 1.0f, 0.0f, -1.0f ],
65 [ 2.0f, 0.0f, -2.0f ],
66 [ 1.0f, 0.0f, -1.0f ],
67 ]
68 );
69 break;
70
71 case SOUTH_EAST:
72 flattenKernel = flatten(
73 [
74 [ 0.0f, -1.0f, -2.0f ],
75 [ 1.0f, 0.0f, -1.0f ],
76 [ 2.0f, 1.0f, 0.0f ],
77 ]
78 );
79 break;
80
81 case EAST:
82 flattenKernel = flatten(
83 [
84 [ -1.0f, -2.0f, -1.0f ],
85 [ 0.0f, 0.0f, 0.0f ],
86 [ 1.0f, 2.0f, 1.0f ],
87 ]
88 );
89 break;
90
91 case NORTH_EAST:
92 flattenKernel = flatten(
93 [
94 [ -2.0f, -1.0f, 0.0f ],
95 [ -1.0f, 0.0f, 1.0f ],
96 [ 0.0f, 1.0f, 2.0f ],
97 ]
98 );
99 break;
100 }
101 }
102 }