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/internal/link_single_dmax_base.hh>
45 #include <scribo/primitive/link/compute.hh>
47 #include <scribo/draw/bounding_boxes.hh>
49 #include <scribo/debug/usage.hh>
55 template <
typename I,
typename L>
56 struct single_up_link_debug_functor
57 : primitive::link::internal::link_single_dmax_base<L,
58 single_up_link_debug_functor<I, L> >
60 typedef single_up_link_debug_functor<I, L> self_t;
62 primitive::link::internal::link_single_dmax_base<L, self_t> super_;
65 typedef mln_site(L) P;
67 single_up_link_debug_functor(const I& input,
70 : super_(components, dmax, anchor::Vertical)
74 mln_postcondition(output_.is_valid());
77 void validate_link_(
unsigned current_object,
84 super_::validate_link_(current_object, start_point, p, anchor);
89 void invalidate_link_(
unsigned current_object,
94 if (output_.domain().has(p))
103 super_::invalidate_link_(current_object, start_point, p, anchor);
108 void compute_next_site_(P& p)
114 image2d<value::rgb8> output_;
121 const char *args_desc[][2] =
123 {
"input.pbm",
"A binary image. True for objects and False for the "
125 {
"max_nbh_dist",
"The maximum lookup distance. (common value : 30)" },
130 int main(
int argc,
char* argv[])
132 using namespace scribo;
133 using namespace scribo::primitive::internal;
138 "Show sucessful/unsuccessful up links "
139 "between components.",
140 "input.pbm max_nbh_dist output.ppm",
148 value::label_16 nbboxes;
154 single_up_link_debug_functor<I, L>
155 functor(input, components, atoi(argv[2]));