
--- scribo/ChangeLog | 5 +++++ .../scribo/primitive/extract/lines_discontinued.hh | 18 +++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/scribo/ChangeLog b/scribo/ChangeLog index e1ac05c..7c92acf 100644 --- a/scribo/ChangeLog +++ b/scribo/ChangeLog @@ -1,5 +1,10 @@ 2013-03-05 Guillaume Lazzara <z@lrde.epita.fr> + * scribo/primitive/extract/lines_discontinued.hh: Fix invalid line + reconstruction. + +2013-03-05 Guillaume Lazzara <z@lrde.epita.fr> + * scribo/subsampling/bilinear.hh: Update documentation. 2013-03-05 Guillaume Lazzara <z@lrde.epita.fr> diff --git a/scribo/scribo/primitive/extract/lines_discontinued.hh b/scribo/scribo/primitive/extract/lines_discontinued.hh index 63953ac..b2192ba 100644 --- a/scribo/scribo/primitive/extract/lines_discontinued.hh +++ b/scribo/scribo/primitive/extract/lines_discontinued.hh @@ -1,5 +1,5 @@ -// Copyright (C) 2009, 2010 EPITA Research and Development Laboratory -// (LRDE) +// Copyright (C) 2009, 2010, 2013 EPITA Research and Development +// Laboratory (LRDE) // // This file is part of Olena. // @@ -68,6 +68,8 @@ namespace scribo * \param[in] rank_k Rank used for filtering. * * \return An image in which lines are labeled. + * + * \pre win.length() > 2 * (rank_k + 1) */ template <typename I, typename N, typename V, typename W> component_set<mln_ch_value(I,V)> @@ -98,6 +100,8 @@ namespace scribo mln_precondition(exact(nbh).is_valid()); mln_precondition(exact(win).is_valid()); + mln_precondition(win.length() > 2 * (rank_k + 1)); + (void) input; (void) nbh; (void) win; @@ -124,11 +128,11 @@ namespace scribo const N& nbh = exact(nbh_); const W& win = exact(win_); - int dil; - if (!(rank_k % 2)) - dil = win.length() / 2 + 2 * rank_k + 2; - else - dil = win.length() / 2 + 2 * rank_k + 3; + int dil = win.length() - 2 * (rank_k + 1); + mln_assertion(dil > 0); + + if (! (dil % 2)) // Make sure the window have an odd size. + dil += 1; mln_ch_value(I,bool) filter = morpho::dilation(morpho::rank_filter(input, win, rank_k), W(dil)); -- 1.7.2.5