[PATCH 17/22] Use Milena's dilation/erosion in graph morpho on bin_1complex_image2d.

* apps/graph-morpho/morpho.hh (impl::dilation_e2v(const mln::bin_1complex_image2d&)) (impl::erosion_v2e(const mln::bin_1complex_image2d&)) (impl::erosion_e2v(const mln::bin_1complex_image2d&)) (impl::dilation_v2e(const mln::bin_1complex_image2d&)): Here. --- milena/ChangeLog | 11 ++++ milena/apps/graph-morpho/morpho.hh | 104 ++++++++++++----------------------- 2 files changed, 47 insertions(+), 68 deletions(-) diff --git a/milena/ChangeLog b/milena/ChangeLog index 28adc2e..80ad48c 100644 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@ -1,3 +1,14 @@ +2009-09-29 Roland Levillain <roland@lrde.epita.fr> + + Use Milena's dilation/erosion in graph morpho on bin_1complex_image2d. + + * apps/graph-morpho/morpho.hh + (impl::dilation_e2v(const mln::bin_1complex_image2d&)) + (impl::erosion_v2e(const mln::bin_1complex_image2d&)) + (impl::erosion_e2v(const mln::bin_1complex_image2d&)) + (impl::dilation_v2e(const mln::bin_1complex_image2d&)): + Here. + 2009-09-30 Roland Levillain <roland@lrde.epita.fr> Fix a precondition in apps/graph-morpho/io.hh. diff --git a/milena/apps/graph-morpho/morpho.hh b/milena/apps/graph-morpho/morpho.hh index bd883a0..c18c89f 100644 --- a/milena/apps/graph-morpho/morpho.hh +++ b/milena/apps/graph-morpho/morpho.hh @@ -41,6 +41,8 @@ # include <mln/core/image/dmorph/image_if.hh> +# include <mln/core/image/dmorph/extension_ima.hh> + # include <mln/core/routine/extend.hh> # include <mln/core/routine/duplicate.hh> @@ -57,6 +59,8 @@ # include <mln/morpho/dilation.hh> # include <mln/morpho/erosion.hh> +# include <mln/topo/is_n_face.hh> + // FIXME: Instead of providing several implementation, move specific // parts (neighborhoods, etc.) to a graph_traits class, and write // generic version of combine, dilation_e2v, erosion_v2e, etc. @@ -167,25 +171,16 @@ namespace impl mln::bin_1complex_image2d dilation_e2v(const mln::bin_1complex_image2d& input) { - mln::bin_1complex_image2d output; - mln::initialize(output, input); + mln::topo::is_n_face<0> is_0_face; typedef mln_geom_(mln::bin_1complex_image2d) geom_t; - // Iterator on vertices. - mln::p_n_faces_fwd_piter<1, geom_t> v(input.domain(), 0); - // Vertex-to-edges neighborhood. - typedef mln::complex_higher_neighborhood<1, geom_t> v2e_t; + typedef mln::complex_higher_window<1, geom_t> v2e_t; const v2e_t v2e; - mln_niter_(v2e_t) e(v2e, v); - for_all(v) - { - output(v) = false; - for_all(e) - if (input(e)) - { - output(v) = true; - break; - } - } + mln::bin_1complex_image2d output(input.domain()); + mln::data::fill(output, false); + mln::data::paste(mln::morpho::dilation(mln::extend(input | is_0_face, + input), + v2e), + output); return output; } @@ -195,25 +190,16 @@ namespace impl mln::bin_1complex_image2d erosion_v2e(const mln::bin_1complex_image2d& input) { - mln::bin_1complex_image2d output; - mln::initialize(output, input); + mln::topo::is_n_face<1> is_1_face; typedef mln_geom_(mln::bin_1complex_image2d) geom_t; - // Iterator on edges. - mln::p_n_faces_fwd_piter<1, geom_t> e(input.domain(), 1); - // Edge-to-vertices neighborhood. - typedef mln::complex_lower_neighborhood<1, geom_t> e2v_t; + typedef mln::complex_lower_window<1, geom_t> e2v_t; const e2v_t e2v; - mln_niter_(e2v_t) v(e2v, e); - for_all(e) - { - output(e) = true; - for_all(v) - if (!input(v)) - { - output(e) = false; - break; - } - } + mln::bin_1complex_image2d output(input.domain()); + mln::data::fill(output, false); + mln::data::paste(mln::morpho::erosion(mln::extend(input | is_1_face, + input), + e2v), + output); return output; } @@ -223,25 +209,16 @@ namespace impl mln::bin_1complex_image2d erosion_e2v(const mln::bin_1complex_image2d& input) { - mln::bin_1complex_image2d output; - mln::initialize(output, input); + mln::topo::is_n_face<0> is_0_face; typedef mln_geom_(mln::bin_1complex_image2d) geom_t; - // Iterator on vertices. - mln::p_n_faces_fwd_piter<1, geom_t> v(input.domain(), 0); - // Vertex-to-edges neighborhood. - typedef mln::complex_higher_neighborhood<1, geom_t> v2e_t; + typedef mln::complex_higher_window<1, geom_t> v2e_t; const v2e_t v2e; - mln_niter_(v2e_t) e(v2e, v); - for_all(v) - { - output(v) = true; - for_all(e) - if (!input(e)) - { - output(v) = false; - break; - } - } + mln::bin_1complex_image2d output(input.domain()); + mln::data::fill(output, false); + mln::data::paste(mln::morpho::erosion(mln::extend(input | is_0_face, + input), + v2e), + output); return output; } @@ -251,25 +228,16 @@ namespace impl mln::bin_1complex_image2d dilation_v2e(const mln::bin_1complex_image2d& input) { - mln::bin_1complex_image2d output; - mln::initialize(output, input); + mln::topo::is_n_face<1> is_1_face; typedef mln_geom_(mln::bin_1complex_image2d) geom_t; - // Iterator on edges. - mln::p_n_faces_fwd_piter<1, geom_t> e(input.domain(), 1); - // Edge-to-vertices neighborhood. - typedef mln::complex_lower_neighborhood<1, geom_t> e2v_t; + typedef mln::complex_lower_window<1, geom_t> e2v_t; const e2v_t e2v; - mln_niter_(e2v_t) v(e2v, e); - for_all(e) - { - output(e) = false; - for_all(v) - if (input(v)) - { - output(e) = true; - break; - } - } + mln::bin_1complex_image2d output(input.domain()); + mln::data::fill(output, false); + mln::data::paste(mln::morpho::dilation(mln::extend(input | is_1_face, + input), + e2v), + output); return output; } -- 1.6.3.1
participants (1)
-
Roland Levillain