29 #include <mln/core/image/image2d.hh>
30 #include <mln/core/alias/neighb2d.hh>
32 #include <mln/data/convert.hh>
34 #include <mln/value/rgb8.hh>
35 #include <mln/value/label_16.hh>
36 #include <mln/literal/colors.hh>
38 #include <mln/io/pbm/load.hh>
39 #include <mln/io/ppm/save.hh>
41 #include <mln/draw/line.hh>
43 #include <scribo/primitive/extract/components.hh>
44 #include <scribo/primitive/link/with_single_right_link_dmax_ratio.hh>
45 #include <scribo/primitive/link/internal/link_single_dmax_ratio_base.hh>
46 #include <scribo/primitive/link/compute.hh>
48 #include <scribo/draw/bounding_boxes.hh>
50 #include <scribo/debug/usage.hh>
56 template <
typename I,
typename L>
57 struct single_right_link_debug_functor
58 : primitive::link::internal::link_single_dmax_ratio_base<L,
59 primitive::link::internal::dmax_default,
60 single_right_link_debug_functor<I, L> >
62 typedef single_right_link_debug_functor<I, L> self_t;
63 typedef primitive::link::internal::dmax_default dmax_fun_t;
65 primitive::link::internal::link_single_dmax_ratio_base<L, dmax_fun_t, self_t> super_;
68 typedef mln_site(L) P;
70 single_right_link_debug_functor(const I& input,
73 : super_(components, anchor::Horizontal, dmax_fun_t(dmax_ratio))
77 mln_postcondition(output_.is_valid());
80 void validate_link_(
unsigned current_object,
87 super_::validate_link_(current_object, start_point, p, anchor);
92 void invalidate_link_(
unsigned current_object,
97 if (output_.domain().has(p))
106 super_::invalidate_link_(current_object, start_point, p, anchor);
111 void compute_next_site_(P& p)
117 image2d<value::rgb8> output_;
124 const char *args_desc[][2] =
126 {
"input.pbm",
"A binary image. True for objects and False for the background." },
127 {
"max_nbh_dist_ratio",
"Size ratio defining the maximum lookup distance. (common value : 3)" },
132 int main(
int argc,
char* argv[])
134 using namespace scribo;
135 using namespace scribo::primitive::internal;
140 "Show sucessful/unsuccessful right links "
141 "between components.",
142 "input.pbm max_nbh_dist_ratio output.ppm",
150 value::label_16 nbboxes;
156 single_right_link_debug_functor<I, L>
157 functor(input, components, atof(argv[2]));