27 #ifndef SCRIBO_DEBUG_DECISION_IMAGE_HH
28 # define SCRIBO_DEBUG_DECISION_IMAGE_HH
34 # include <mln/core/concept/image.hh>
35 # include <mln/data/convert.hh>
36 # include <mln/value/rgb8.hh>
37 # include <mln/literal/colors.hh>
38 # include <mln/util/array.hh>
39 # include <mln/draw/box.hh>
40 # include <mln/draw/line.hh>
42 # include <scribo/core/tag/anchor.hh>
43 # include <scribo/core/object_groups.hh>
44 # include <scribo/primitive/link/internal/compute_anchor.hh>
72 template <
typename I,
typename L>
75 const object_groups<L>& groups,
76 const object_groups<L>& filtered_groups,
94 template <typename I, typename L>
95 mln_ch_value(I,
value::rgb8)
97 const object_links<L>& links,
98 const object_links<L>& filtered_links,
102 # ifndef MLN_INCLUDE_ONLY
104 template <
typename I,
typename L>
107 const object_groups<L>& groups,
108 const object_groups<L>& filtered_groups)
110 mln_trace(
"scribo::debug::decision_image");
111 const I& input =
exact(input_);
113 const component_set<L>&
components = groups.components();
115 mln_precondition(input.is_valid());
116 mln_precondition(groups.is_valid());
117 mln_precondition(filtered_groups.is_valid());
123 for (
unsigned i = 1; i < groups.size(); ++i)
124 if (groups(i) != filtered_groups(i))
128 mln::draw::
box(decision_image, components(i).bbox(),
131 return decision_image;
135 template <typename I, typename L>
136 mln_ch_value(I,
value::rgb8)
137 decision_image(const
Image<I>& input_,
138 const object_links<L>& links,
139 const object_links<L>& filtered_links,
142 mln_trace(
"scribo::debug::decision_image");
143 const I& input =
exact(input_);
145 const component_set<L>& comps = links.components();
147 mln_precondition(input.is_valid());
148 mln_precondition(links.is_valid());
149 mln_precondition(filtered_links.is_valid());
155 for_all_comps(i, comps)
156 mln::draw::
box(decision_image, comps(i).bbox(), literal::blue);
158 for_all_links(i, links)
161 if (links.is_linked(i))
164 p1 = primitive::link::internal::compute_anchor(comps, i, anchor),
165 p2 = primitive::link::internal::compute_anchor(comps, links(i),
169 if (links(i) != filtered_links(i))
170 value = literal::red;
171 mln::draw::
line(decision_image, p1, p2,
value);
175 return decision_image;
180 # endif // ! MLN_INCLUDE_ONLY
187 #endif // ! SCRIBO_DEBUG_DECISION_IMAGE_HH