27 #ifndef SCRIBO_TABLE_INTERNAL_REPAIR_LINES_HH
28 # define SCRIBO_TABLE_INTERNAL_REPAIR_LINES_HH
36 # include <mln/core/image/dmorph/image_if.hh>
37 # include <mln/core/image/dmorph/extension_val.hh>
39 # include <mln/pw/all.hh>
41 # include <mln/literal/zero.hh>
43 # include <mln/core/site_set/box.hh>
45 # include <mln/core/routine/extend.hh>
47 # include <mln/data/fill.hh>
49 # include <mln/util/couple.hh>
50 # include <mln/util/array.hh>
51 # include <mln/util/ord.hh>
53 # include <mln/win/line.hh>
55 # include <mln/labeling/colorize.hh>
57 # include <mln/value/rgb8.hh>
58 # include <mln/value/label_16.hh>
60 # include <scribo/make/debug_filename.hh>
62 # include <scribo/core/central_sites.hh>
63 # include <scribo/core/macros.hh>
64 # include <scribo/table/internal/repair_lines.hh>
86 template <
unsigned axis,
typename I>
90 unsigned max_discontinuity);
93 # ifndef MLN_INCLUDE_ONLY
96 template <
unsigned axis,
typename I>
100 unsigned max_discontinuity)
102 mln_trace(
"scribo::table::internal::repair_lines");
104 const I& input =
exact(input_);
105 mln_precondition(input.is_valid());
107 typedef mln_site(I) P;
108 typedef win::
line<mln_grid(P), axis, mln_coord(P)> line_t;
111 typedef mln_ch_value(I,
value::label_16) L;
114 for_all_comps(i, tableboxes)
125 std::vector<bool> to_keep(tableboxes.nelements(),
true);
131 pw::cst_<literal::zero_t> > >,
const L> tbb_ima_t;
132 tbb_ima_t tbb_ima =
extend(l | (
pw::value(l) != pw::cst(literal::zero)), l);
135 line_t vl(max_discontinuity);
136 mln_piter(tbb_ima_t) p(tbb_ima.domain());
137 mln_qiter(line_t) q(vl, p);
142 if (l_ext(q) != literal::zero && l_ext(q) != l_ext(p))
145 tableboxes[l_ext(q)].pmax()))
147 tableboxes[l_ext(p)].pmax() = tableboxes[l_ext(q)].pmax();
148 to_keep[l_ext(q)] =
false;
152 tableboxes[l_ext(p)].pmin()))
154 tableboxes[l_ext(p)].pmin() = tableboxes[l_ext(q)].pmin();
155 to_keep[l_ext(q)] =
false;
158 if (!to_keep[l_ext(q)])
161 l_ext(cp_q.
first()) = literal::zero;
162 l_ext(cp_q.
second()) = literal::zero;
164 unsigned p_i = l_ext(p);
165 l_ext(cp_p.
first()) = literal::zero;
166 l_ext(cp_p.
second()) = literal::zero;
169 l_ext(new_cp_p.first()) = p_i;
170 l_ext(new_cp_p.second()) = p_i;
177 for_all_elements(i, tableboxes)
179 result.append(tableboxes[i]);
185 # endif // ! MLN_INCLUDE_ONLY
194 #endif // ! SCRIBO_TABLE_INTERNAL_REPAIR_LINES_HH