26 #ifndef SCRIBO_ESTIM_FONT_COLOR_HH
27 # define SCRIBO_ESTIM_FONT_COLOR_HH
33 # include <mln/core/image/image2d.hh>
34 # include <mln/core/alias/neighb2d.hh>
35 # include <mln/value/int_u8.hh>
36 # include <mln/labeling/compute.hh>
37 # include <mln/accu/stat/mean.hh>
38 # include <mln/accu/stat/median_h.hh>
39 # include <mln/value/int_u12.hh>
40 # include <mln/value/rgb8.hh>
42 # include <scribo/estim/internal/compute_skeleton.hh>
55 template <
typename I,
typename J>
57 font_color(const
Image<I>& text_ima, const
Image<J>& bin_text_ima);
60 # ifndef MLN_INCLUDE_ONLY
65 template <
typename I,
typename J>
67 font_color_rgb(const
Image<I>& text_ima_,
68 const
Image<J>& bin_text_ima_)
70 mln_trace(
"scribo::estim::impl::font_color_rgb");
72 typedef mln_value(I) V1;
73 typedef mln_value(J) V2;
75 mlc_is(V2,
bool)::check();
77 const I& text_ima = exact(text_ima_);
78 const J& bin_text_ima = exact(bin_text_ima_);
80 mln_concrete(J) skel = internal::compute_skeleton(bin_text_ima);
82 value::int_u8 nlabels = 0;
83 mln_ch_value(I,
value::int_u8)
86 mln::util::array<algebra::vec<3u,
float> > res =
89 accu::stat::median_h<
value::int_u12> m_red;
90 accu::stat::median_h<
value::int_u12> m_green;
91 accu::stat::median_h<
value::int_u12> m_blue;
98 for (
unsigned int i = 1; i <= nlabels; ++i)
100 m_red.take(res[i][0]);
101 m_green.take(res[i][1]);
102 m_blue.take(res[i][2]);
105 med_rgb.red() = m_red.to_result();
106 med_rgb.green() = m_green.to_result();
107 med_rgb.blue() = m_blue.to_result();
113 template <
typename I,
typename J>
115 font_color_grayscale(const
Image<I>& text_ima_,
116 const
Image<J>& bin_text_ima_)
118 mln_trace(
"scribo::estim::impl::font_color_grayscale");
120 typedef mln_value(I) V1;
121 typedef mln_value(J) V2;
123 mlc_is(V2,
bool)::check();
125 const I& text_ima = exact(text_ima_);
126 const J& bin_text_ima = exact(bin_text_ima_);
128 mln_concrete(J) skel = internal::compute_skeleton(bin_text_ima);
130 value::int_u8 nlabels = 0;
133 mln::util::array<algebra::vec<3u,
float> > res =
136 accu::stat::median_h<
value::int_u12> m_val;
139 mln_value(I) med_val;
140 for (
unsigned int i = 1; i <= nlabels; ++i)
141 m_val.take(res[i][0]);
143 med_val = m_val.to_result();
156 template <
typename I,
typename J>
158 font_color_dispatch(const
value::rgb8&,
159 const
Image<I>& text_ima, const
Image<J>& bin_text_ima)
161 return impl::font_color_rgb(
exact(text_ima),
exact(bin_text_ima));
165 template <
typename V,
typename I,
typename J>
167 font_color_dispatch(const V&,
168 const
Image<I>& text_ima, const
Image<J>& bin_text_ima)
170 return impl::font_color_grayscale(
exact(text_ima),
exact(bin_text_ima));
174 template <
typename I,
typename J>
176 font_color_dispatch(const
Image<I>& text_ima, const
Image<J>& bin_text_ima)
178 return font_color_dispatch(mln_value(I)(), text_ima, bin_text_ima);
186 template <
typename I,
typename J>
188 font_color(const
Image<I>& text_ima, const
Image<J>& bin_text_ima)
190 mln_trace(
"scribo::estim::font_color");
192 mln_value(I) output = internal::font_color_dispatch(text_ima, bin_text_ima);
197 # endif // ! MLN_INCLUDE_ONLY
203 # endif // ! SCRIBO_ESTIM_FONT_COLOR_HH