27 #ifndef MLN_DEBUG_SLICES_2D_HH
28 # define MLN_DEBUG_SLICES_2D_HH
38 # include <mln/core/image/image2d.hh>
40 # include <mln/core/image/image3d.hh>
41 # include <mln/core/image/dmorph/slice_image.hh>
43 # include <mln/core/image/dmorph/p2p_image.hh>
44 # include <mln/fun/p2p/translation.hh>
46 # include <mln/data/paste.hh>
47 # include <mln/data/fill.hh>
64 unsigned n_horizontal,
unsigned n_vertical,
65 const mln_value(I)& bg);
76 const mln_value(I)& bg);
80 # ifndef MLN_INCLUDE_ONLY
86 unsigned n_horizontal,
unsigned n_vertical,
87 const mln_value(I)& bg)
89 mln_trace(
"debug::slices_2d");
90 mlc_equal(mln_domain(I), box3d)::check();
92 const I& input =
exact(input_);
94 mln_precondition(input.is_valid());
95 mln_precondition(n_horizontal > 0 && n_vertical > 0);
96 mln_precondition(input.nslis() <= n_horizontal * n_vertical);
98 image2d<mln_value(I)> output(input.nrows() * n_vertical,
99 input.ncols() * n_horizontal);
100 if (input.nslis() != n_horizontal * n_vertical)
103 const point3d& p_min = input.domain().pmin();
106 last_sli = input.domain().pmax().sli();
107 for (
unsigned i = 0; i < n_vertical; ++i)
108 for (
unsigned j = 0; j < n_horizontal; ++j)
110 dpoint2d
dp(i * input.nrows() - p_min.row(),
111 j * input.ncols() - p_min.col());
115 if (++sli > last_sli)
132 unsigned round_up(
float f)
134 unsigned n =
static_cast<unsigned>(f + 0.499999f);
145 unsigned& n_horizontal,
146 unsigned& n_vertical)
150 float n_v =
std::sqrt(nslis * ncols / ratio_hv / nrows);
151 n_vertical = internal::round_up(n_v);
152 float n_h = nslis /
float(n_vertical);
153 n_horizontal = internal::round_up(n_h);
157 float n_h =
std::sqrt(nrows * nslis * ratio_hv / ncols);
158 n_horizontal = internal::round_up(n_h);
159 float n_v = nslis /
float(n_horizontal);
160 n_vertical = internal::round_up(n_v);
167 template <
typename I>
168 image2d<mln_value(I)>
171 const mln_value(I)& bg)
173 mln_trace(
"debug::slices_2d");
174 mlc_equal(mln_domain(I), box3d)::check();
176 const I& input =
exact(input_);
177 mln_precondition(input.is_valid());
178 mln_precondition(ratio_hv > 0.f);
180 unsigned n_horizontal, n_vertical;
181 internal::slices2d_helper(input.nslis(), input.nrows(), input.ncols(),
183 n_horizontal, n_vertical);
184 mln_assertion(n_horizontal * n_vertical >= input.nslis());
186 image2d<mln_value(I)> output =
slices_2d(input, n_horizontal, n_vertical, bg);
192 # endif // ! MLN_INCLUDE_ONLY
199 #endif // ! MLN_DEBUG_SLICES_2D_HH