27 #ifndef MLN_UPSCALING_ART_SCALE3X_HH
28 # define MLN_UPSCALING_ART_SCALE3X_HH
35 # include <mln/core/concept/box.hh>
36 # include <mln/core/concept/image.hh>
37 # include <mln/core/alias/neighb2d.hh>
38 # include <mln/core/alias/dpoint2d.hh>
40 # include <mln/extension/adjust_duplicate.hh>
69 # ifndef MLN_INCLUDE_ONLY
76 mln_trace(
"mln::upscaling::art::scale3x");
78 const I& input =
exact(input_);
79 mln_precondition(input.is_valid());
80 mlc_is_a(mln_domain(I), Box)::check();
84 mln_domain(I) ext_domain(input.domain().pmin() * 3,
85 input.domain().pmax() * 3
88 mln_concrete(I) output(ext_domain);
91 mln_piter(I)
p(input.domain());
107 pI = p + mln::down_right,
108 pOut = p * 3 + mln::down_right;
111 if (input(pD) == input(pB)
112 && input(pD) != input(pH)
113 && input(pB) != input(pF))
114 output(pOut + mln::up_left) = input(pD);
116 output(pOut + mln::up_left) = input(p);
120 if ((input(pD) == input(pB)
121 && input(pD) != input(pH)
122 && input(pB) != input(pF)
123 && input(pE) != input(pC))
124 || (input(pB) == input(pF)
125 && input(pB) != input(pD)
126 && input(pF) != input(pH)
127 && input(pE) != input(pA)))
128 output(pOut + mln::up) = input(pB);
130 output(pOut + mln::up) = input(p);
133 if (input(pB) == input(pF)
134 && input(pB) != input(pD)
135 && input(pF) != input(pH))
136 output(pOut + mln::up_right) = input(pF);
138 output(pOut + mln::up_right) = input(p);
142 if ((input(pH) == input(pD)
143 && input(pH) != input(pF)
144 && input(pD) != input(pB)
145 && input(pE) != input(pA))
146 || (input(pD) == input(pB)
147 && input(pD) != input(pH)
148 && input(pB) != input(pF)
149 && input(pE) != input(pG)))
150 output(pOut + mln::left) = input(pD);
152 output(pOut + mln::left) = input(p);
155 output(pOut) = input(p);
159 if ((input(pB) == input(pF)
160 && input(pB) != input(pD)
161 && input(pF) != input(pH)
162 && input(pE) != input(pI))
163 || (input(pF) == input(pH)
164 && input(pF) != input(pB)
165 && input(pH) != input(pD)
166 && input(pE) != input(pC)))
167 output(pOut + mln::right) = input(pF);
169 output(pOut + mln::right) = input(p);
172 if (input(pH) == input(pD)
173 && input(pH) != input(pF)
174 && input(pD) != input(pB))
175 output(pOut + mln::down_left) = input(pD);
177 output(pOut + mln::down_left) = input(p);
182 if ((input(pF) == input(pH)
183 && input(pF) != input(pB)
184 && input(pH) != input(pD)
185 && input(pE) != input(pG))
186 || (input(pH) == input(pD)
187 && input(pH) != input(pF)
188 && input(pD) != input(pB)
189 && input(pE) != input(pI)))
190 output(pOut + mln::down) = input(pH);
192 output(pOut + mln::down) = input(p);
196 if (input(pF) == input(pH)
197 && input(pF) != input(pB)
198 && input(pH) != input(pD))
199 output(pOut + mln::down_right) = input(pF);
201 output(pOut + mln::down_right) = input(p);
209 # endif // ! MLN_INCLUDE_ONLY
219 #endif // ! MLN_UPSCALING_ART_SCALE3X_HH