
* icdar/2009/hsc/lines_to_words.cc: Move some code... * icdar/2009/hsc/get_line_images.hh: ... here. new routine. --- milena/sandbox/ChangeLog | 7 +++ milena/sandbox/icdar/2009/hsc/get_line_images.hh | 62 ++++++++++++++++++++++ milena/sandbox/icdar/2009/hsc/lines_to_words.cc | 62 +++------------------- 3 files changed, 76 insertions(+), 55 deletions(-) create mode 100644 milena/sandbox/icdar/2009/hsc/get_line_images.hh diff --git a/milena/sandbox/ChangeLog b/milena/sandbox/ChangeLog index 01e3f9b..c6a6156 100644 --- a/milena/sandbox/ChangeLog +++ b/milena/sandbox/ChangeLog @@ -1,3 +1,10 @@ +2009-04-07 Guillaume Lazzara <z@lrde.epita.fr> + + Update ICDAR code. + + * icdar/2009/hsc/lines_to_words.cc: Move some code... + * icdar/2009/hsc/get_line_images.hh: ... here. new routine. + 2009-04-07 Thierry Geraud <thierry.geraud@lrde.epita.fr> Augment ICDAR-HSC. diff --git a/milena/sandbox/icdar/2009/hsc/get_line_images.hh b/milena/sandbox/icdar/2009/hsc/get_line_images.hh new file mode 100644 index 0000000..07ae749 --- /dev/null +++ b/milena/sandbox/icdar/2009/hsc/get_line_images.hh @@ -0,0 +1,62 @@ +#ifndef GET_LINE_IMAGES_HH +# define GET_LINE_IMAGES_HH + +#include <mln/core/concept/image.hh> +#include <mln/core/site_set/box.hh> +#include <mln/core/image/extended.hh> +#include <mln/core/routine/duplicate.hh> +#include <mln/core/routine/extend.hh> +#include <mln/core/var.hh> + +#include <mln/data/fill.hh> + +#include <mln/accu/bbox.hh> + +#include <mln/geom/bbox.hh> + +#include <mln/labeling/compute.hh> + +#include <mln/util/array.hh> + +#include <mln/pw/all.hh> +#include <mln/core/image/image_if.hh> + + +namespace mln +{ + + template <typename L> + util::array<mln_ch_value(L,bool)> + inline + get_line_images(const Image<L>& lines_, const mln_value(L)& nlines, + unsigned bbox_line_enlarge) + { + trace::entering("get_line_images"); + + const L& lines = exact(lines_); + mln_precondition(lines.is_valid()); + + util::array<box<mln_site(L)> > + bboxes = labeling::compute(accu::meta::bbox(), lines, nlines); + + util::array<mln_ch_value(L,bool)> result; + + for (unsigned i = 1; i < nlines; ++i) + { + typedef mln_ch_value(L,bool) line_t; + box<mln_site(L)> b = bboxes[i]; + b.enlarge(bbox_line_enlarge); + line_t line(b); + data::fill(((line | bboxes[i]).rw() | (pw::value(lines) == i)).rw(), true); + + result.append(line); + } + + trace::exiting("get_line_images"); + return result; + } + + +} // end of namespace mln + +#endif // ! GET_LINE_IMAGES_HH diff --git a/milena/sandbox/icdar/2009/hsc/lines_to_words.cc b/milena/sandbox/icdar/2009/hsc/lines_to_words.cc index cd4b1c3..5381d41 100644 --- a/milena/sandbox/icdar/2009/hsc/lines_to_words.cc +++ b/milena/sandbox/icdar/2009/hsc/lines_to_words.cc @@ -1,31 +1,16 @@ #include <mln/core/image/image2d.hh> -#include <mln/core/alias/neighb2d.hh> + #include <mln/value/int_u8.hh> -#include <mln/value/label_8.hh> #include <mln/value/label_16.hh> + #include <mln/io/pgm/all.hh> #include <mln/io/pbm/all.hh> #include <mln/io/ppm/all.hh> -#include <mln/accu/bbox.hh> -#include <mln/labeling/compute.hh> -#include <mln/pw/all.hh> -#include <mln/core/image/image_if.hh> -#include <mln/data/fill.hh> -#include <mln/core/routine/extend.hh> -#include <mln/transform/distance_geodesic.hh> -#include <mln/win/disk2d.hh> -#include <mln/morpho/watershed/flooding.hh> -#include <mln/morpho/closing/structural.hh> -#include <mln/transform/distance_geodesic.hh> -#include <mln/core/image/extended.hh> -#include <mln/core/var.hh> + #include <mln/level/convert.hh> -#include <mln/level/compute.hh> -#include <mln/accu/count_labels.hh> #include <mln/labeling/relabel.hh> -#include <mln/labeling/wrap.hh> -#include <mln/core/routine/extend.hh> -#include <mln/morpho/watershed/superpose.hh> + +#include "get_line_images.hh" void usage(char* argv[]) { @@ -56,43 +41,10 @@ int main(int argc, char *argv[]) io::pgm::load(lines_, argv[2]); image2d<label_16> lines = level::convert(label_16(), lines_); - unsigned delta = 10; - label_16 nlines; labeling::relabel_inplace(lines, nlines); + util::array<image2d<bool> > result = get_line_images(lines, nlines, 10); - std::cout << "nlines = " << nlines << std::endl; - util::array<box2d> bboxes = labeling::compute(accu::meta::bbox(), lines, nlines); - - std::cout << "BBoxes computed" << std::endl; - - for (unsigned i = 1; i < nlines; ++i) - { - std::cout << "* Processing line " << i << std::endl; - typedef image2d<bool> line_t; - line_t line = duplicate((pw::value(lines) == i) | (lines | bboxes[i]).domain()); -// io::pbm::save(line, "l2w_line.pbm"); - - box2d b = geom::bbox(line); - b.enlarge(delta); - - mln_VAR(line_ext, extended_to(extend(line,false),b)); - -// io::pbm::save(line_ext, "l2w_line_ext.pbm"); - - std::cout << " Distance geodesic" << std::endl; - mln_VAR(line_dmap, transform::distance_geodesic(line_ext, c4(), mln_max(unsigned))); - - std::cout << " closing structural" << std::endl; - mln_VAR(line_clo, morpho::closing::structural(line_dmap, win::disk2d(21))); - - - std::cout << " Watershed" << std::endl; - label_16 nwords; - mln_VAR(wst, morpho::watershed::flooding(line_clo, c4(), nwords)); - -// io::ppm::save(morpho::watershed::superpose(input | bboxes[i], wst), "l2w_wst.ppm"); -// abort(); - } + io::pbm::save(result[2], argv[3]); } -- 1.5.6.5