27 #ifndef SCRIBO_PRIMITIVE_EXTRACT_LINES_DISCONTINUED_HH
28 # define SCRIBO_PRIMITIVE_EXTRACT_LINES_DISCONTINUED_HH
35 # include <mln/core/concept/image.hh>
36 # include <mln/core/concept/window.hh>
37 # include <mln/core/concept/neighborhood.hh>
39 # include <mln/labeling/blobs.hh>
41 # include <mln/morpho/rank_filter.hh>
42 # include <mln/morpho/dilation.hh>
44 # include <scribo/core/macros.hh>
45 # include <scribo/primitive/extract/components.hh>
76 template <
typename I,
typename N,
typename V,
typename W>
77 component_set<mln_ch_value(I,V)>
85 # ifndef MLN_INCLUDE_ONLY
91 template <
typename I,
typename N,
typename V,
typename W>
93 lines_discontinued_tests(
const Image<I>& input,
97 mlc_equal(mln_value(I),
bool)::check();
98 mlc_bool(mln_site_(I)::dim == 2)::check();
103 mln_precondition(
exact(input).is_valid());
104 mln_precondition(
exact(nbh).is_valid());
105 mln_precondition(win.is_valid());
107 mln_precondition(win.length() > 2 * (rank_k + 1));
120 template <
typename I,
typename N,
typename V,
typename W>
122 component_set<mln_ch_value(I,V)>
127 mln_trace(
"scribo::primitive::extract::lines_discontinued");
129 internal::lines_discontinued_tests(input_, nbh_, nlines, win_, rank_k);
131 const I& input =
exact(input_);
132 const N& nbh =
exact(nbh_);
133 const W& win =
exact(win_);
135 int dil = win.length() - 2 * (rank_k + 1);
136 mln_assertion(dil > 0);
143 component_set<mln_ch_value(I,V)> output
144 = primitive::extract::
components(filter, nbh, nlines);
150 # endif // ! MLN_INCLUDE_ONLY
159 #endif // ! SCRIBO_PRIMITIVE_EXTRACT_LINES_DISCONTINUED_HH