26 #ifndef MLN_UPSCALING_ART_SCALE2X_HH
27 # define MLN_UPSCALING_ART_SCALE2X_HH
34 # include <mln/core/concept/box.hh>
35 # include <mln/core/concept/image.hh>
36 # include <mln/core/alias/neighb2d.hh>
37 # include <mln/core/alias/dpoint2d.hh>
39 # include <mln/extension/adjust_duplicate.hh>
64 scale2x(const Image<I>& input);
67 # ifndef MLN_INCLUDE_ONLY
72 scale2x(const Image<I>& input_)
74 trace::entering(
"mln::upscaling::art::scale2x");
76 const I& input = exact(input_);
77 mln_precondition(input.is_valid());
78 mlc_is_a(mln_domain(I), Box)::check();
82 mln_domain(I) ext_domain(input.domain().pmin() * 2,
83 input.domain().pmax() * 2
86 mln_concrete(I) output(ext_domain);
88 mln_piter(I) p(input.domain());
103 if (input(pC) == input(pA)
104 && input(pC) != input(pD)
105 && input(pA) != input(pB))
106 output(pOut) = input(pA);
108 output(pOut) = input(p);
111 if (input(pA) == input(pB)
112 && input(pA) != input(pC)
113 && input(pB) != input(pD))
114 output(pOut + mln::right) = input(pB);
116 output(pOut + mln::right) = input(p);
119 if (input(pD) == input(pC)
120 && input(pD) != input(pB)
121 && input(pC) != input(pA))
122 output(pOut + mln::down) = input(pC);
124 output(pOut + mln::down) = input(p);
127 if (input(pB) == input(pD)
128 && input(pB) != input(pA)
129 && input(pD) != input(pC))
130 output(pOut + mln::down_right) = input(pD);
132 output(pOut + mln::down_right) = input(p);
136 trace::exiting("mln::upscaling::art::scale2x");
141 # endif // ! MLN_INCLUDE_ONLY
151 #endif // ! MLN_UPSCALING_ART_SCALE2X_HH