28 #include <mln/core/image/image2d.hh>
29 #include <mln/core/image/edge_image.hh>
30 #include <mln/core/image/vertex_image.hh>
31 #include <mln/core/image/dmorph/image_if.hh>
32 #include <mln/value/label_16.hh>
33 #include <mln/io/ppm/save.hh>
34 #include <mln/io/pbm/load.hh>
35 #include <mln/core/alias/neighb2d.hh>
36 #include <mln/literal/colors.hh>
37 #include <mln/labeling/colorize.hh>
38 #include <mln/labeling/compute.hh>
39 #include <mln/make/p_vertices_with_mass_centers.hh>
40 #include <mln/make/edge_image.hh>
41 #include <mln/make/vertex_image.hh>
42 #include <mln/debug/draw_graph.hh>
43 #include <mln/util/graph.hh>
44 #include <mln/accu/center.hh>
46 #include <scribo/primitive/extract/components.hh>
47 #include <scribo/primitive/link/with_rag.hh>
50 #include <scribo/filter/objects_small.hh>
51 #include <scribo/filter/objects_thin.hh>
52 #include <scribo/filter/objects_thick.hh>
55 #include <scribo/fun/v2b/objects_small_filter.hh>
56 #include <scribo/debug/bboxes_image.hh>
57 #include <scribo/debug/linked_bboxes_image.hh>
58 #include <scribo/make/debug_filename.hh>
60 int usage(
const char *name)
62 std::cout <<
"Usage: " << name <<
" <input.pbm> " << std::endl;
77 template <
typename A,
typename G,
typename I>
83 const mln_value(I)& nlabels)
85 const G& g =
exact(g_);
86 const I& lbl =
exact(lbl_);
88 mln_precondition(g.is_valid());
89 mln_precondition(lbl.is_valid());
91 util::array<mln_result(A)>
103 template <
typename I>
106 typedef value::rgb8 result;
110 value::rgb8 operator()(
const unsigned id)
const
113 return literal::green;
139 template <
typename P,
typename V,
typename G,
typename F,
typename FP>
158 int main(
int argc,
char* argv[])
160 using namespace scribo;
164 return usage(argv[0]);
166 scribo::make::internal::debug_filename_prefix =
"group_with_rag";
173 value::label_16 nbboxes;
178 components_t filtered_components
186 math::min(input.ncols(), input.nrows()) / 6);
190 typedef util::couple< util::graph, image2d<value::label_16> > rag_data_t;
196 scribo::graph::compute_vertex(accu::center<point2d>(),
198 filtered_components.labeled_image(),
199 filtered_components.nelements());
209 filtered_components.bboxes(),