https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog from Roland Levillain roland@lrde.epita.fr
Move convert::to_upper_window into its own file.
* mln/convert/to_window.hh (convert::to_upper_window(const Neighborhood<N>&)): Move this function... * mln/convert/to_upper_window.hh: ...here (new file). (convert::to_upper_window(const Windows<W>&)): New function. * mln/canvas/labeling.hh: Adjust. * mln/labeling/background.hh, * mln/labeling/blobs.hh, * mln/labeling/flat_zones.hh, * mln/labeling/foreground.hh, * mln/labeling/level.hh, * mln/labeling/level.spe.hh, * mln/labeling/regional_maxima.hh, * mln/labeling/regional_minima.hh: Adjust comments.
canvas/labeling.hh | 2 convert/to_upper_window.hh | 104 ++++++++++++++++++++++++++++++++++++++++++++ convert/to_window.hh | 22 --------- labeling/background.hh | 6 -- labeling/blobs.hh | 6 -- labeling/flat_zones.hh | 6 -- labeling/foreground.hh | 6 -- labeling/level.hh | 6 -- labeling/level.spe.hh | 6 -- labeling/regional_maxima.hh | 6 -- labeling/regional_minima.hh | 6 -- 11 files changed, 122 insertions(+), 54 deletions(-)
Index: mln/convert/to_window.hh --- mln/convert/to_window.hh (revision 1697) +++ mln/convert/to_window.hh (working copy) @@ -1,4 +1,4 @@ -// Copyright (C) 2007 EPITA Research and Development Laboratory +// Copyright (C) 2007 EPITA Research and Development Laboratory (LRDE) // // This file is part of the Olena Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -53,10 +53,6 @@ template <typename N> window<mln_dpoint(N)> to_window(const Neighborhood<N>& nbh);
- /// Convert a neighborhood \p nbh into an upper window. - template <typename N> - window<mln_dpoint(N)> to_upper_window(const Neighborhood<N>& nbh); - /// Convert a binary image \p ima into a window. template <typename I> window<mln_dpoint(I)> to_window(const Image<I>& ima); @@ -96,22 +92,6 @@ }
// FIXME: Same remark as for to_window(const Neighborhood<N>&) - template <typename N> - inline - window<mln_dpoint(N)> to_upper_window(const Neighborhood<N>& nbh_) - { - const N& nbh = exact(nbh_); - typedef mln_dpoint(N) D; - typedef mln_point(D) P; - window<D> win; - mln_niter(N) n(nbh, P::origin); - for_all(n) - if (n > P::origin) - win.insert(n - P::origin); - return win; - } - - // FIXME: Same remark as for to_window(const Neighborhood<N>&) template <typename I> inline window<mln_dpoint(I)> to_window(const Image<I>& ima_) Index: mln/convert/to_upper_window.hh --- mln/convert/to_upper_window.hh (revision 0) +++ mln/convert/to_upper_window.hh (revision 0) @@ -0,0 +1,104 @@ +// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory (LRDE) +// +// This file is part of the Olena Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License version 2 as published by the +// Free Software Foundation. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING. If not, write to +// the Free Software Foundation, 51 Franklin Street, Fifth Floor, +// Boston, MA 02111-1307, USA. +// +// As a special exception, you may use this file as part of a free +// software library without restriction. Specifically, if other files +// instantiate templates or use macros or inline functions from this +// file, or you compile this file and link it with other files to +// produce an executable, this file does not by itself cause the +// resulting executable to be covered by the GNU General Public +// License. This exception does not however invalidate any other +// reasons why the executable file might be covered by the GNU General +// Public License. + +#ifndef MLN_CONVERT_TO_UPPER_WINDOW_HH +# define MLN_CONVERT_TO_UPPER_WINDOW_HH + +/*! \file mln/convert/to_upper_window.hh + * + * \brief Conversions to upper mln::window. + */ + +# include <mln/core/concept/delta_point_site.hh> +# include <mln/core/concept/neighborhood.hh> +# include <mln/core/window.hh> + + +namespace mln +{ + + namespace convert + { + + /// Convert a window \p nbh into an upper window. + template <typename W> + window<mln_dpoint(W)> to_upper_window(const Window<W>& win); + + /// Convert a neighborhood \p nbh into an upper window. + template <typename N> + window<mln_dpoint(N)> to_upper_window(const Neighborhood<N>& nbh); + + +# ifndef MLN_INCLUDE_ONLY + + /* FIXME: According to milena/core/concepts/README, windows are + not necessarily based on a set of dpoints. So the current + algorithm won't work on non dpoint-set-based windows. In the + general case (of windows not being a set of dpoints), the + window resulting from this conversion (as well as the iterators + based on such windows!) should depend on the initial + neighborhood (i.e., delegate the actual iteration to the + aggregated neighborhood). When this is fixed, document this in + depth in milena/core/concepts/README. */ + template <typename W> + inline + window<mln_dpoint(W)> to_upper_window(const Window<W>& win_) + { + const W& input_win = exact(win_); + typedef mln_dpoint(W) D; + typedef mln_point(D) P; + window<D> win; + mln_qiter(W) q(input_win, P::origin); + for_all(q) + if (q > P::origin) + win.insert(q - P::origin); + return win; + } + + template <typename N> + inline + window<mln_dpoint(N)> to_upper_window(const Neighborhood<N>& nbh_) + { + const N& nbh = exact(nbh_); + typedef mln_dpoint(N) D; + typedef mln_point(D) P; + window<D> win; + mln_niter(N) n(nbh, P::origin); + for_all(n) + if (n > P::origin) + win.insert(n - P::origin); + return win; + } + +# endif // ! MLN_INCLUDE_ONLY + + } // end of namespace mln::convert + +} // end of namespace mln + + +#endif // ! MLN_CONVERT_TO_WINDOW_HH Index: mln/canvas/labeling.hh --- mln/canvas/labeling.hh (revision 1697) +++ mln/canvas/labeling.hh (working copy) @@ -36,7 +36,7 @@
# include <mln/core/concept/image.hh> # include <mln/level/fill.hh> -# include <mln/convert/to_window.hh> // FIXME: to_upper_window +# include <mln/convert/to_upper_window.hh>
namespace mln Index: mln/labeling/blobs.hh --- mln/labeling/blobs.hh (revision 1697) +++ mln/labeling/blobs.hh (working copy) @@ -48,15 +48,13 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the binary objects of a binary * image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood. + * \param[in] nbh The connexity of the objects. * \param[out] nlabels The number of labels. * \return The label image. * Index: mln/labeling/flat_zones.hh --- mln/labeling/flat_zones.hh (revision 1697) +++ mln/labeling/flat_zones.hh (working copy) @@ -45,14 +45,12 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the flat zones of an image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood to consider. + * \param[in] nbh The connexity of the flat zones. * \param[out] nlabels The number of labels. * \return The label image. */ Index: mln/labeling/level.hh --- mln/labeling/level.hh (revision 1697) +++ mln/labeling/level.hh (working copy) @@ -51,16 +51,14 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the image objects at a given * level. * * \param[in] input The input image. * \param[in] val The level to consider for the labeling. - * \param[in] nbh The neighborhood. + * \param[in] nbh The connexity of the level components. * \param[out] nlabels The number of labels. * \return The label image. */ Index: mln/labeling/foreground.hh --- mln/labeling/foreground.hh (revision 1697) +++ mln/labeling/foreground.hh (working copy) @@ -44,15 +44,13 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the object part in a binary * image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood to consider. + * \param[in] nbh The connexity of the foreground. * \param[out] nlabels The number of labels. * \return The label image. * Index: mln/labeling/regional_minima.hh --- mln/labeling/regional_minima.hh (revision 1697) +++ mln/labeling/regional_minima.hh (working copy) @@ -48,15 +48,13 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the regional minima of an * image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood to consider. + * \param[in] nbh The connexity of the regional minima. * \param[out] nlabels The number of labeled regions. * \return The label image. * Index: mln/labeling/regional_maxima.hh --- mln/labeling/regional_maxima.hh (revision 1697) +++ mln/labeling/regional_maxima.hh (working copy) @@ -48,15 +48,13 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the regional maxima of an * image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood to consider. + * \param[in] nbh The connexity of the regional maxima. * \param[out] nlabels The number of labeled regions. * \return The label image. * Index: mln/labeling/level.spe.hh --- mln/labeling/level.spe.hh (revision 1697) +++ mln/labeling/level.spe.hh (working copy) @@ -50,16 +50,14 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the image objects at a given * level. * * \param[in] input The input image. * \param[in] val The level to consider for the labeling. - * \param[in] nbh The neighborhood. + * \param[in] nbh The connexity of the level components. * \param[out] nlabels The number of labels. * \return The label image. */ Index: mln/labeling/background.hh --- mln/labeling/background.hh (revision 1697) +++ mln/labeling/background.hh (working copy) @@ -44,15 +44,13 @@ {
/* FIXME: The neighborhood shall not be passed as argument, but - bound to the input image. We can also optionnaly provide a - version of this function for regular-grid-based images where - the neighborhood is replaced by a (user-provided) window. */ + bound to the input image. */
/*! Connected component labeling of the background part in a * binary image. * * \param[in] input The input image. - * \param[in] nbh The neighborhood to consider. + * \param[in] nbh The connexity of the background. * \param[out] nlabels The number of labels. * \return The label image. *