Olena-patches
Threads by month
- ----- 2025 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 9625 discussions

02 May '13
* headers.mk,
* tests/unit_test/unit-tests.mk: Regen.
---
milena/ChangeLog | 7 +++++++
milena/headers.mk | 2 ++
milena/tests/unit_test/unit-tests.mk | 2 ++
3 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 850a127..a088b68 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,12 @@
2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+ Update autogenerated .mk files.
+
+ * headers.mk,
+ * tests/unit_test/unit-tests.mk: Regen.
+
+2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
Add binarization::tmms and binarization::tmms_hysteresis.
* mln/binarization/tmms.hh,
diff --git a/milena/headers.mk b/milena/headers.mk
index 95778bd..bb419ea 100644
--- a/milena/headers.mk
+++ b/milena/headers.mk
@@ -100,6 +100,8 @@ mln/binarization/binarization.hh \
mln/binarization/essential.hh \
mln/binarization/includes.hh \
mln/binarization/threshold.hh \
+mln/binarization/tmms.hh \
+mln/binarization/tmms_hysteresis.hh \
mln/border/adjust.hh \
mln/border/all.hh \
mln/border/duplicate.hh \
diff --git a/milena/tests/unit_test/unit-tests.mk b/milena/tests/unit_test/unit-tests.mk
index c79f929..97efc38 100644
--- a/milena/tests/unit_test/unit-tests.mk
+++ b/milena/tests/unit_test/unit-tests.mk
@@ -188,6 +188,8 @@ mln_binarization_binarization \
mln_binarization_essential \
mln_binarization_includes \
mln_binarization_threshold \
+mln_binarization_tmms \
+mln_binarization_tmms_hysteresis \
mln_border_adjust \
mln_border_all \
mln_border_duplicate \
--
1.7.2.5
1
0

olena: olena-2.0-557-g81841d9 Add binarization::tmms and binarization::tmms_hysteresis.
by Guillaume Lazzara 02 May '13
by Guillaume Lazzara 02 May '13
02 May '13
* mln/binarization/tmms.hh,
* mln/binarization/tmms_hysteresis.hh,
* tests/binarization/tmms-hysteresis-out.pgm,
* tests/binarization/tmms-out.pgm,
* tests/binarization/tmms.cc,
* tests/binarization/tmms_hysteresis.cc: New.
* tests/binarization/Makefile.am: New target.
---
milena/ChangeLog | 13 +
milena/mln/binarization/tmms.hh | 163 +++++++++
milena/mln/binarization/tmms_hysteresis.hh | 380 ++++++++++++++++++++
milena/tests/binarization/Makefile.am | 13 +-
milena/tests/binarization/tmms-hysteresis-out.pgm | Bin 0 -> 262264 bytes
milena/tests/binarization/tmms-out.pgm | Bin 0 -> 262264 bytes
.../closing/structural.cc => binarization/tmms.cc} | 31 +-
.../tmms_hysteresis.cc} | 30 +-
8 files changed, 595 insertions(+), 35 deletions(-)
create mode 100644 milena/mln/binarization/tmms.hh
create mode 100644 milena/mln/binarization/tmms_hysteresis.hh
create mode 100644 milena/tests/binarization/tmms-hysteresis-out.pgm
create mode 100644 milena/tests/binarization/tmms-out.pgm
copy milena/tests/{morpho/closing/structural.cc => binarization/tmms.cc} (76%)
copy milena/tests/{morpho/closing/structural.cc => binarization/tmms_hysteresis.cc} (73%)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 0688513..850a127 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,3 +1,16 @@
+2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Add binarization::tmms and binarization::tmms_hysteresis.
+
+ * mln/binarization/tmms.hh,
+ * mln/binarization/tmms_hysteresis.hh,
+ * tests/binarization/tmms-hysteresis-out.pgm,
+ * tests/binarization/tmms-out.pgm,
+ * tests/binarization/tmms.cc,
+ * tests/binarization/tmms_hysteresis.cc: New.
+
+ * tests/binarization/Makefile.am: New target.
+
2013-04-18 Guillaume Lazzara <z(a)lrde.epita.fr>
Add support for graylevel images in labeling::blobs.
diff --git a/milena/mln/binarization/tmms.hh b/milena/mln/binarization/tmms.hh
new file mode 100644
index 0000000..5f83547
--- /dev/null
+++ b/milena/mln/binarization/tmms.hh
@@ -0,0 +1,163 @@
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena 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 Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project 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_BINARIZATION_TMMS_HH
+# define MLN_BINARIZATION_TMMS_HH
+
+/// \file
+///
+/// \brief Binarization using TMMS algorithm.
+
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/window.hh>
+# include <mln/morpho/dilation.hh>
+# include <mln/morpho/erosion.hh>
+
+
+namespace mln
+{
+
+ namespace binarization
+ {
+
+ /*!
+ Binarize \p input by the use of TMMS algorithm (see "Text
+ Segmentation in Natural Scenes Using Toggle-Mapping" from icip09
+ for more details \cite fabrizio2009icip).
+
+ \param[in] input the input image.
+
+ \param[in] win the structuring element used to compute erosion
+ and dilation of input image (During TMMS algorithm, input image
+ is mapped over two fuctions: an erosion and a dilation of the
+ input image).
+
+ \param[in] c_min the min contrast allowed to extract feature.
+
+ \return an image with "foreground" marked with the highest
+ possible color (hc), the "background" marked with the lowest
+ possible color (lc) and homogeneous regions of the image marked
+ with the color (hc+lc)/2. (This will fail with two colors
+ images, but it seems to be a bit stupid to try to binarize two
+ color images?)
+
+ \author J. Fabrizio
+
+ \ingroup modroutines
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min, const mln_value(I)& min_level,
+ const mln_value(I)& med_level, const mln_value(I)& max_level,
+ int pourcent);
+
+ /*! \overload
+
+ \verbatim
+ min_level = mln_min(V); //background
+ max_level = mln_max(V); //foreground
+ med_level = (max_level + min_level) / 2; //homogeneous
+ \endverbatim
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min, const mln_value(I)& min_level,
+ const mln_value(I)& med_level, const mln_value(I)& max_level,
+ int pourcent)
+ {
+ mln_trace("binarization::tmms");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ typedef mln_value(I) V;
+ //V min_level = mln_min(V); //background
+ //V max_level = mln_max(V); //foreground
+ //V med_level = (max_level + min_level) / 2; //homogeneous
+
+ mln_concrete(I) output;
+ initialize(output, input);
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ {
+ V dil = dilation(p); // by def : dil>=ima>=ero
+ V ero = erosion(p);
+ V ima = input(p);
+ if ((V)(dil - ero) >= c_min)
+ {
+ if ((dil - ima) < pourcent * (dil - ero) / 100)
+ output(p) = max_level;
+ else
+ output(p) = min_level;
+ }
+ else
+ output(p) = med_level;
+ }
+
+ return output;
+ }
+
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min)
+ {
+ typedef mln_value(I) V;
+ V min_level = mln_min(V); //background
+ V max_level = mln_max(V); //foreground
+ V med_level = (max_level + min_level) / 2; //homogeneous
+
+ return tmms(input, win, c_min,
+ min_level, med_level, max_level, 50);
+ }
+
+
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::binarization
+
+
+} // end of namespace mln
+
+#endif // ! MLN_BINARIZATION_TMMS_HH
diff --git a/milena/mln/binarization/tmms_hysteresis.hh b/milena/mln/binarization/tmms_hysteresis.hh
new file mode 100644
index 0000000..f80caf5
--- /dev/null
+++ b/milena/mln/binarization/tmms_hysteresis.hh
@@ -0,0 +1,380 @@
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena 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 Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project 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_BINARIZATION_TMMS_HYSTERESIS_HH
+# define MLN_BINARIZATION_TMMS_HYSTERESIS_HH
+
+/// \file
+///
+/// \brief Binarization using TMMS algorithm combined with hysteresis.
+
+
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/window.hh>
+# include <mln/core/alias/neighb2d.hh>
+# include <mln/morpho/dilation.hh>
+# include <mln/morpho/erosion.hh>
+# include <mln/labeling/blobs.hh>
+
+
+namespace mln
+{
+
+ namespace binarization
+ {
+
+ /*!
+ Binarize \p input by the use of TMMS algorithm (see "Text
+ Segmentation in Natural Scenes Using Toggle-Mapping" from
+ icip09 for more details \cite fabrizio2009icip). This version
+ is combined with hysteresis.
+
+ \param[in] input the input image.
+
+ \param[in] win the structuring element used to compute erosion
+ and dilation of input image (During TMMS algorithm, input image
+ is mapped over two fuctions: an erosion and a dilation of the
+ input image).
+
+ \param[in] c_min the min contrast allowed to extract feature.
+
+ \return an image with "foreground" marked with the highest
+ possible color (hc), the "background" marked with the lowest
+ possible color (lc) and homogeneous regions of the image marked
+ with the color (hc+lc)/2. (This will fail with two colors
+ images, but it seems to be a bit stupid to try to binarize two
+ color images?)
+
+ \author J. Fabrizio
+
+ \ingroup modroutines
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ // Implementations
+
+ namespace impl
+ {
+
+ namespace generic
+ {
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::impl::generic::tmms_hysteresis");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ typedef mln_value(I) V;
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ mln_concrete(I) low_image;
+ initialize(low_image, input);
+ mln_concrete(I) high_image;
+ initialize(high_image, input);
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ {
+ V dil = dilation(p); // by def : dil>=ima>=ero
+ V ero = erosion(p);
+ V ima = input(p);
+
+ if ((V)(dil - ero) < c_min_low)
+ {
+ low_image(p) = med_level;
+ high_image(p) = med_level;
+ }
+ else if ((V)(dil - ero) < c_min_high)
+ {
+ low_image(p) = med_level;
+ if ((V)(dil - ima) < pourcent * ((V) (dil - ero)) / 100)
+ high_image(p) = max_level;
+ else
+ high_image(p) = min_level;
+ }
+ else
+ {
+ if ((V)(dil - ima) < pourcent * ((V)(dil - ero)) / 100)
+ {
+ low_image(p) = max_level;
+ high_image(p) = max_level;
+ }
+ else
+ {
+ low_image(p) = min_level;
+ high_image(p) = min_level;
+ }
+ }
+
+ }
+
+ unsigned nlabels;
+ mln_ch_value(I, unsigned)
+ labels_high_images = mln::labeling::blobs(high_image, mln::c4(), nlabels);
+
+ std::vector<V> values(nlabels + 1);
+
+ for (unsigned i = 0; i <= nlabels ; i++)
+ values[i] = med_level;
+
+ for_all(p)
+ if (low_image(p) != med_level)
+ values[labels_high_images(p)] = low_image(p);
+
+ for_all(p)
+ if (low_image(p) == med_level)
+ low_image(p) = values[labels_high_images(p)];
+
+ return low_image;
+ }
+
+ } // end of namespace mln::binarization::impl::generic
+
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_fastest(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low, const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::impl::tmms_hysteresis_fastest");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ typedef mln_value(I) V;
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ // Checking border sizes.
+ border::resize(dilation, input.border());
+ border::resize(erosion, input.border());
+ mln_assertion(input.border() == dilation.border());
+ mln_assertion(input.border() == erosion.border());
+
+ mln_concrete(I) low_image;
+ initialize(low_image, input);
+ mln_concrete(I) high_image;
+ initialize(high_image, input);
+
+ unsigned nrows = geom::nrows(input);
+ unsigned ncols = geom::ncols(input);
+ for (unsigned row = 0; row < nrows; ++row)
+ {
+ const V *p_input = &(input.at_(row, 0));
+ const V *p_dilation = &(dilation.at_(row, 0));
+ const V *p_erosion = &(erosion.at_(row, 0));
+ V *p_low_image = &(low_image.at_(row, 0));
+ V *p_high_image = &(high_image.at_(row, 0));
+
+ for (unsigned col = 0; col < ncols; ++col)
+ {
+ V dil = *p_dilation; // by def : dil>=ima>=ero
+ V ero = *p_erosion;
+ V ima = *p_input;
+
+ if ((V)(dil - ero) < c_min_low)
+ {
+ *p_low_image = med_level;
+ *p_high_image = med_level;
+ }
+ else if ((V)(dil - ero) < c_min_high)
+ {
+ *p_low_image = med_level;
+
+ if ((V)(dil - ima) < (V)(pourcent * (dil - ero) / 100))
+ *p_high_image = max_level;
+ else
+ *p_high_image = min_level;
+ }
+ else
+ {
+ if ((V)(dil - ima) < (V)(pourcent * (dil - ero) / 100))
+ {
+ *p_low_image = max_level;
+ *p_high_image = max_level;
+ }
+ else
+ {
+ *p_low_image = min_level;
+ *p_high_image = min_level;
+ }
+ }
+
+ ++p_input;
+ ++p_dilation;
+ ++p_erosion;
+ ++p_low_image;
+ ++p_high_image;
+ }
+ }
+
+ unsigned nlabels;
+ mln_ch_value(I, unsigned)
+ labels_high_images = mln::labeling::blobs(high_image, c4(), nlabels);
+
+ std::vector<V> values(nlabels + 1);
+
+ for(unsigned i = 0; i <= nlabels; ++i)
+ values[i] = med_level;
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ if (low_image(p) != med_level)
+ values[labels_high_images(p)] = low_image(p);
+
+ for_all(p)
+ if (low_image(p) == med_level)
+ low_image(p) = values[labels_high_images(p)];
+
+ return low_image;
+ }
+
+ }// end of namespace mln::binarization::impl
+
+
+ // Dispatch
+
+ namespace internal
+ {
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent, mln::trait::image::speed::any)
+ {
+ return impl::generic::tmms_hysteresis(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent, mln::trait::image::speed::fastest)
+ {
+ return impl::tmms_hysteresis_fastest(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ return tmms_hysteresis_dispatch(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent,
+ mln_trait_image_speed(I)());
+ }
+
+ } //end of namespace namespace mln::binarization::internal
+
+
+ // Facade
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low, const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::tmms_hysteresis");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ return internal::tmms_hysteresis_dispatch(input, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::binarization
+
+
+} // end of namespace mln
+
+#endif // ! MLN_BINARIZATION_TMMS_HYSTERESIS_HH
diff --git a/milena/tests/binarization/Makefile.am b/milena/tests/binarization/Makefile.am
index 27144e4..08cfb7b 100644
--- a/milena/tests/binarization/Makefile.am
+++ b/milena/tests/binarization/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright (C) 2008, 2009, 2010 EPITA Research and Development
+# Copyright (C) 2008, 2009, 2010, 2013 EPITA Research and Development
# Laboratory (LRDE).
#
# This file is part of Olena.
@@ -18,11 +18,14 @@
include $(top_srcdir)/milena/tests/tests.mk
check_PROGRAMS = \
- threshold
+ threshold \
+ tmms \
+ tmms_hysteresis
TESTS = $(check_PROGRAMS)
-MOSTLYCLEANFILES = \
- threshold-out1.pgm \
- threshold-out2.pgm
+EXTRA_DIST = \
+ threshold-out.pbm \
+ tmms-out.pgm \
+ tmms-hysteresis-out.pgm
diff --git a/milena/tests/binarization/tmms-hysteresis-out.pgm b/milena/tests/binarization/tmms-hysteresis-out.pgm
new file mode 100644
index 0000000..14f20c1
Binary files /dev/null and b/milena/tests/binarization/tmms-hysteresis-out.pgm differ
diff --git a/milena/tests/binarization/tmms-out.pgm b/milena/tests/binarization/tmms-out.pgm
new file mode 100644
index 0000000..3e0ec78
Binary files /dev/null and b/milena/tests/binarization/tmms-out.pgm differ
diff --git a/milena/tests/morpho/closing/structural.cc b/milena/tests/binarization/tmms.cc
similarity index 76%
copy from milena/tests/morpho/closing/structural.cc
copy to milena/tests/binarization/tmms.cc
index ac925c5..e32a1f2 100644
--- a/milena/tests/morpho/closing/structural.cc
+++ b/milena/tests/binarization/tmms.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,30 +24,31 @@
// executable file might be covered by the GNU General Public License.
#include <mln/core/image/image2d.hh>
-#include <mln/value/int_u8.hh>
#include <mln/core/alias/window2d.hh>
-
+#include <mln/binarization/tmms.hh>
+#include <mln/io/pbm/load.hh>
#include <mln/io/pgm/load.hh>
-#include <mln/io/pgm/save.hh>
-
-#include <mln/morpho/closing/structural.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/win/rectangle2d.hh>
#include "tests/data.hh"
-
+#include <mln/io/pgm/save.hh>
int main()
{
using namespace mln;
- using value::int_u8;
- image2d<int_u8> lena, out;
+ image2d<value::int_u8> lena;
io::pgm::load(lena, MLN_IMG_DIR "/lena.pgm");
- bool w[] = { 0, 1, 1,
- 0, 0, 1,
- 0, 0, 1 };
+ image2d<value::int_u8>
+ bin = binarization::tmms(lena,
+ win::rectangle2d(3,3),50);
+
+ image2d<value::int_u8> ref;
+ io::pgm::load(ref, MLN_TESTS_DIR "/binarization/tmms-out.pgm");
+
+ mln_assertion(ref == bin);
- out = morpho::closing::structural(lena,
- convert::to<window2d>(w));
- io::pgm::save(out, "structural-out.pgm");
}
diff --git a/milena/tests/morpho/closing/structural.cc b/milena/tests/binarization/tmms_hysteresis.cc
similarity index 73%
copy from milena/tests/morpho/closing/structural.cc
copy to milena/tests/binarization/tmms_hysteresis.cc
index ac925c5..87f9509 100644
--- a/milena/tests/morpho/closing/structural.cc
+++ b/milena/tests/binarization/tmms_hysteresis.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,30 +24,30 @@
// executable file might be covered by the GNU General Public License.
#include <mln/core/image/image2d.hh>
-#include <mln/value/int_u8.hh>
#include <mln/core/alias/window2d.hh>
-
+#include <mln/binarization/tmms_hysteresis.hh>
+#include <mln/io/pbm/load.hh>
#include <mln/io/pgm/load.hh>
-#include <mln/io/pgm/save.hh>
-
-#include <mln/morpho/closing/structural.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/win/rectangle2d.hh>
#include "tests/data.hh"
-
int main()
{
using namespace mln;
- using value::int_u8;
- image2d<int_u8> lena, out;
+ image2d<value::int_u8> lena;
io::pgm::load(lena, MLN_IMG_DIR "/lena.pgm");
- bool w[] = { 0, 1, 1,
- 0, 0, 1,
- 0, 0, 1 };
+ image2d<value::int_u8>
+ bin = binarization::tmms_hysteresis(lena,
+ win::rectangle2d(3,3),
+ 20, 45, 0, 128, 255, 60);
+
+ image2d<value::int_u8> ref;
+ io::pgm::load(ref, MLN_TESTS_DIR "/binarization/tmms-hysteresis-out.pgm");
- out = morpho::closing::structural(lena,
- convert::to<window2d>(w));
- io::pgm::save(out, "structural-out.pgm");
+ mln_assertion(ref == bin);
}
--
1.7.2.5
1
0

olena: olena-2.0-557-gedf9cfd Add binarization::tmms and binarization::tmms_hysteresis.
by Guillaume Lazzara 02 May '13
by Guillaume Lazzara 02 May '13
02 May '13
* mln/binarization/tmms.hh,
* mln/binarization/tmms_hysteresis.hh,
* tests/binarization/tmms-hysteresis-out.pgm,
* tests/binarization/tmms-out.pgm,
* tests/binarization/tmms.cc,
* tests/binarization/tmms_hysteresis.cc: New.
* tests/binarization/Makefile.am: New target.
---
milena/ChangeLog | 13 +
milena/mln/binarization/tmms.hh | 163 +++++++++
milena/mln/binarization/tmms_hysteresis.hh | 380 ++++++++++++++++++++
milena/tests/binarization/Makefile.am | 14 +-
milena/tests/binarization/tmms-hysteresis-out.pgm | Bin 0 -> 262264 bytes
milena/tests/binarization/tmms-out.pgm | Bin 0 -> 262264 bytes
.../closing/structural.cc => binarization/tmms.cc} | 31 +-
.../tmms_hysteresis.cc} | 30 +-
8 files changed, 597 insertions(+), 34 deletions(-)
create mode 100644 milena/mln/binarization/tmms.hh
create mode 100644 milena/mln/binarization/tmms_hysteresis.hh
create mode 100644 milena/tests/binarization/tmms-hysteresis-out.pgm
create mode 100644 milena/tests/binarization/tmms-out.pgm
copy milena/tests/{morpho/closing/structural.cc => binarization/tmms.cc} (76%)
copy milena/tests/{morpho/closing/structural.cc => binarization/tmms_hysteresis.cc} (73%)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 0688513..850a127 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,3 +1,16 @@
+2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Add binarization::tmms and binarization::tmms_hysteresis.
+
+ * mln/binarization/tmms.hh,
+ * mln/binarization/tmms_hysteresis.hh,
+ * tests/binarization/tmms-hysteresis-out.pgm,
+ * tests/binarization/tmms-out.pgm,
+ * tests/binarization/tmms.cc,
+ * tests/binarization/tmms_hysteresis.cc: New.
+
+ * tests/binarization/Makefile.am: New target.
+
2013-04-18 Guillaume Lazzara <z(a)lrde.epita.fr>
Add support for graylevel images in labeling::blobs.
diff --git a/milena/mln/binarization/tmms.hh b/milena/mln/binarization/tmms.hh
new file mode 100644
index 0000000..5f83547
--- /dev/null
+++ b/milena/mln/binarization/tmms.hh
@@ -0,0 +1,163 @@
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena 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 Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project 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_BINARIZATION_TMMS_HH
+# define MLN_BINARIZATION_TMMS_HH
+
+/// \file
+///
+/// \brief Binarization using TMMS algorithm.
+
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/window.hh>
+# include <mln/morpho/dilation.hh>
+# include <mln/morpho/erosion.hh>
+
+
+namespace mln
+{
+
+ namespace binarization
+ {
+
+ /*!
+ Binarize \p input by the use of TMMS algorithm (see "Text
+ Segmentation in Natural Scenes Using Toggle-Mapping" from icip09
+ for more details \cite fabrizio2009icip).
+
+ \param[in] input the input image.
+
+ \param[in] win the structuring element used to compute erosion
+ and dilation of input image (During TMMS algorithm, input image
+ is mapped over two fuctions: an erosion and a dilation of the
+ input image).
+
+ \param[in] c_min the min contrast allowed to extract feature.
+
+ \return an image with "foreground" marked with the highest
+ possible color (hc), the "background" marked with the lowest
+ possible color (lc) and homogeneous regions of the image marked
+ with the color (hc+lc)/2. (This will fail with two colors
+ images, but it seems to be a bit stupid to try to binarize two
+ color images?)
+
+ \author J. Fabrizio
+
+ \ingroup modroutines
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min, const mln_value(I)& min_level,
+ const mln_value(I)& med_level, const mln_value(I)& max_level,
+ int pourcent);
+
+ /*! \overload
+
+ \verbatim
+ min_level = mln_min(V); //background
+ max_level = mln_max(V); //foreground
+ med_level = (max_level + min_level) / 2; //homogeneous
+ \endverbatim
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min, const mln_value(I)& min_level,
+ const mln_value(I)& med_level, const mln_value(I)& max_level,
+ int pourcent)
+ {
+ mln_trace("binarization::tmms");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ typedef mln_value(I) V;
+ //V min_level = mln_min(V); //background
+ //V max_level = mln_max(V); //foreground
+ //V med_level = (max_level + min_level) / 2; //homogeneous
+
+ mln_concrete(I) output;
+ initialize(output, input);
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ {
+ V dil = dilation(p); // by def : dil>=ima>=ero
+ V ero = erosion(p);
+ V ima = input(p);
+ if ((V)(dil - ero) >= c_min)
+ {
+ if ((dil - ima) < pourcent * (dil - ero) / 100)
+ output(p) = max_level;
+ else
+ output(p) = min_level;
+ }
+ else
+ output(p) = med_level;
+ }
+
+ return output;
+ }
+
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms(const Image<I>& input, const Window<W>& win,
+ const mln_value(I)& c_min)
+ {
+ typedef mln_value(I) V;
+ V min_level = mln_min(V); //background
+ V max_level = mln_max(V); //foreground
+ V med_level = (max_level + min_level) / 2; //homogeneous
+
+ return tmms(input, win, c_min,
+ min_level, med_level, max_level, 50);
+ }
+
+
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::binarization
+
+
+} // end of namespace mln
+
+#endif // ! MLN_BINARIZATION_TMMS_HH
diff --git a/milena/mln/binarization/tmms_hysteresis.hh b/milena/mln/binarization/tmms_hysteresis.hh
new file mode 100644
index 0000000..f80caf5
--- /dev/null
+++ b/milena/mln/binarization/tmms_hysteresis.hh
@@ -0,0 +1,380 @@
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena 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 Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project 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_BINARIZATION_TMMS_HYSTERESIS_HH
+# define MLN_BINARIZATION_TMMS_HYSTERESIS_HH
+
+/// \file
+///
+/// \brief Binarization using TMMS algorithm combined with hysteresis.
+
+
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/window.hh>
+# include <mln/core/alias/neighb2d.hh>
+# include <mln/morpho/dilation.hh>
+# include <mln/morpho/erosion.hh>
+# include <mln/labeling/blobs.hh>
+
+
+namespace mln
+{
+
+ namespace binarization
+ {
+
+ /*!
+ Binarize \p input by the use of TMMS algorithm (see "Text
+ Segmentation in Natural Scenes Using Toggle-Mapping" from
+ icip09 for more details \cite fabrizio2009icip). This version
+ is combined with hysteresis.
+
+ \param[in] input the input image.
+
+ \param[in] win the structuring element used to compute erosion
+ and dilation of input image (During TMMS algorithm, input image
+ is mapped over two fuctions: an erosion and a dilation of the
+ input image).
+
+ \param[in] c_min the min contrast allowed to extract feature.
+
+ \return an image with "foreground" marked with the highest
+ possible color (hc), the "background" marked with the lowest
+ possible color (lc) and homogeneous regions of the image marked
+ with the color (hc+lc)/2. (This will fail with two colors
+ images, but it seems to be a bit stupid to try to binarize two
+ color images?)
+
+ \author J. Fabrizio
+
+ \ingroup modroutines
+ */
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ // Implementations
+
+ namespace impl
+ {
+
+ namespace generic
+ {
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::impl::generic::tmms_hysteresis");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ typedef mln_value(I) V;
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ mln_concrete(I) low_image;
+ initialize(low_image, input);
+ mln_concrete(I) high_image;
+ initialize(high_image, input);
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ {
+ V dil = dilation(p); // by def : dil>=ima>=ero
+ V ero = erosion(p);
+ V ima = input(p);
+
+ if ((V)(dil - ero) < c_min_low)
+ {
+ low_image(p) = med_level;
+ high_image(p) = med_level;
+ }
+ else if ((V)(dil - ero) < c_min_high)
+ {
+ low_image(p) = med_level;
+ if ((V)(dil - ima) < pourcent * ((V) (dil - ero)) / 100)
+ high_image(p) = max_level;
+ else
+ high_image(p) = min_level;
+ }
+ else
+ {
+ if ((V)(dil - ima) < pourcent * ((V)(dil - ero)) / 100)
+ {
+ low_image(p) = max_level;
+ high_image(p) = max_level;
+ }
+ else
+ {
+ low_image(p) = min_level;
+ high_image(p) = min_level;
+ }
+ }
+
+ }
+
+ unsigned nlabels;
+ mln_ch_value(I, unsigned)
+ labels_high_images = mln::labeling::blobs(high_image, mln::c4(), nlabels);
+
+ std::vector<V> values(nlabels + 1);
+
+ for (unsigned i = 0; i <= nlabels ; i++)
+ values[i] = med_level;
+
+ for_all(p)
+ if (low_image(p) != med_level)
+ values[labels_high_images(p)] = low_image(p);
+
+ for_all(p)
+ if (low_image(p) == med_level)
+ low_image(p) = values[labels_high_images(p)];
+
+ return low_image;
+ }
+
+ } // end of namespace mln::binarization::impl::generic
+
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_fastest(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low, const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::impl::tmms_hysteresis_fastest");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ typedef mln_value(I) V;
+
+ mln_concrete(I) dilation = mln::morpho::dilation(input, win);
+ mln_concrete(I) erosion = mln::morpho::erosion(input, win);
+
+ // Checking border sizes.
+ border::resize(dilation, input.border());
+ border::resize(erosion, input.border());
+ mln_assertion(input.border() == dilation.border());
+ mln_assertion(input.border() == erosion.border());
+
+ mln_concrete(I) low_image;
+ initialize(low_image, input);
+ mln_concrete(I) high_image;
+ initialize(high_image, input);
+
+ unsigned nrows = geom::nrows(input);
+ unsigned ncols = geom::ncols(input);
+ for (unsigned row = 0; row < nrows; ++row)
+ {
+ const V *p_input = &(input.at_(row, 0));
+ const V *p_dilation = &(dilation.at_(row, 0));
+ const V *p_erosion = &(erosion.at_(row, 0));
+ V *p_low_image = &(low_image.at_(row, 0));
+ V *p_high_image = &(high_image.at_(row, 0));
+
+ for (unsigned col = 0; col < ncols; ++col)
+ {
+ V dil = *p_dilation; // by def : dil>=ima>=ero
+ V ero = *p_erosion;
+ V ima = *p_input;
+
+ if ((V)(dil - ero) < c_min_low)
+ {
+ *p_low_image = med_level;
+ *p_high_image = med_level;
+ }
+ else if ((V)(dil - ero) < c_min_high)
+ {
+ *p_low_image = med_level;
+
+ if ((V)(dil - ima) < (V)(pourcent * (dil - ero) / 100))
+ *p_high_image = max_level;
+ else
+ *p_high_image = min_level;
+ }
+ else
+ {
+ if ((V)(dil - ima) < (V)(pourcent * (dil - ero) / 100))
+ {
+ *p_low_image = max_level;
+ *p_high_image = max_level;
+ }
+ else
+ {
+ *p_low_image = min_level;
+ *p_high_image = min_level;
+ }
+ }
+
+ ++p_input;
+ ++p_dilation;
+ ++p_erosion;
+ ++p_low_image;
+ ++p_high_image;
+ }
+ }
+
+ unsigned nlabels;
+ mln_ch_value(I, unsigned)
+ labels_high_images = mln::labeling::blobs(high_image, c4(), nlabels);
+
+ std::vector<V> values(nlabels + 1);
+
+ for(unsigned i = 0; i <= nlabels; ++i)
+ values[i] = med_level;
+
+ mln_piter(I) p(input.domain());
+ for_all(p)
+ if (low_image(p) != med_level)
+ values[labels_high_images(p)] = low_image(p);
+
+ for_all(p)
+ if (low_image(p) == med_level)
+ low_image(p) = values[labels_high_images(p)];
+
+ return low_image;
+ }
+
+ }// end of namespace mln::binarization::impl
+
+
+ // Dispatch
+
+ namespace internal
+ {
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent, mln::trait::image::speed::any)
+ {
+ return impl::generic::tmms_hysteresis(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent, mln::trait::image::speed::fastest)
+ {
+ return impl::tmms_hysteresis_fastest(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis_dispatch(const I& ima, const W& win,
+ const mln_value(I)& c_min_low,
+ const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ return tmms_hysteresis_dispatch(ima, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent,
+ mln_trait_image_speed(I)());
+ }
+
+ } //end of namespace namespace mln::binarization::internal
+
+
+ // Facade
+
+ template<typename I, typename W>
+ mln_concrete(I)
+ tmms_hysteresis(const Image<I>& input_, const Window<W>& win_,
+ const mln_value(I)& c_min_low, const mln_value(I)& c_min_high,
+ const mln_value(I)& min_level,
+ const mln_value(I)& med_level,
+ const mln_value(I)& max_level,
+ const int pourcent)
+ {
+ mln_trace("mln::binarization::tmms_hysteresis");
+
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.is_valid());
+ mln_precondition(win.is_valid());
+
+ return internal::tmms_hysteresis_dispatch(input, win,
+ c_min_low, c_min_high,
+ min_level, med_level,
+ max_level, pourcent);
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::binarization
+
+
+} // end of namespace mln
+
+#endif // ! MLN_BINARIZATION_TMMS_HYSTERESIS_HH
diff --git a/milena/tests/binarization/Makefile.am b/milena/tests/binarization/Makefile.am
index 27144e4..5d4bcfe 100644
--- a/milena/tests/binarization/Makefile.am
+++ b/milena/tests/binarization/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright (C) 2008, 2009, 2010 EPITA Research and Development
+# Copyright (C) 2008, 2009, 2010, 2013 EPITA Research and Development
# Laboratory (LRDE).
#
# This file is part of Olena.
@@ -18,11 +18,17 @@
include $(top_srcdir)/milena/tests/tests.mk
check_PROGRAMS = \
- threshold
+ threshold \
+ tmms \
+ tmms_hysteresis
TESTS = $(check_PROGRAMS)
-MOSTLYCLEANFILES = \
- threshold-out1.pgm \
+MOSTLYCLEANFILES = \
+ threshold-out1.pgm \
threshold-out2.pgm
+
+EXTRA_DIST = \
+ tmms-out.pgm \
+ tmms-hysteresis-out.pgm
diff --git a/milena/tests/binarization/tmms-hysteresis-out.pgm b/milena/tests/binarization/tmms-hysteresis-out.pgm
new file mode 100644
index 0000000..14f20c1
Binary files /dev/null and b/milena/tests/binarization/tmms-hysteresis-out.pgm differ
diff --git a/milena/tests/binarization/tmms-out.pgm b/milena/tests/binarization/tmms-out.pgm
new file mode 100644
index 0000000..3e0ec78
Binary files /dev/null and b/milena/tests/binarization/tmms-out.pgm differ
diff --git a/milena/tests/morpho/closing/structural.cc b/milena/tests/binarization/tmms.cc
similarity index 76%
copy from milena/tests/morpho/closing/structural.cc
copy to milena/tests/binarization/tmms.cc
index ac925c5..e32a1f2 100644
--- a/milena/tests/morpho/closing/structural.cc
+++ b/milena/tests/binarization/tmms.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,30 +24,31 @@
// executable file might be covered by the GNU General Public License.
#include <mln/core/image/image2d.hh>
-#include <mln/value/int_u8.hh>
#include <mln/core/alias/window2d.hh>
-
+#include <mln/binarization/tmms.hh>
+#include <mln/io/pbm/load.hh>
#include <mln/io/pgm/load.hh>
-#include <mln/io/pgm/save.hh>
-
-#include <mln/morpho/closing/structural.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/win/rectangle2d.hh>
#include "tests/data.hh"
-
+#include <mln/io/pgm/save.hh>
int main()
{
using namespace mln;
- using value::int_u8;
- image2d<int_u8> lena, out;
+ image2d<value::int_u8> lena;
io::pgm::load(lena, MLN_IMG_DIR "/lena.pgm");
- bool w[] = { 0, 1, 1,
- 0, 0, 1,
- 0, 0, 1 };
+ image2d<value::int_u8>
+ bin = binarization::tmms(lena,
+ win::rectangle2d(3,3),50);
+
+ image2d<value::int_u8> ref;
+ io::pgm::load(ref, MLN_TESTS_DIR "/binarization/tmms-out.pgm");
+
+ mln_assertion(ref == bin);
- out = morpho::closing::structural(lena,
- convert::to<window2d>(w));
- io::pgm::save(out, "structural-out.pgm");
}
diff --git a/milena/tests/morpho/closing/structural.cc b/milena/tests/binarization/tmms_hysteresis.cc
similarity index 73%
copy from milena/tests/morpho/closing/structural.cc
copy to milena/tests/binarization/tmms_hysteresis.cc
index ac925c5..87f9509 100644
--- a/milena/tests/morpho/closing/structural.cc
+++ b/milena/tests/binarization/tmms_hysteresis.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,30 +24,30 @@
// executable file might be covered by the GNU General Public License.
#include <mln/core/image/image2d.hh>
-#include <mln/value/int_u8.hh>
#include <mln/core/alias/window2d.hh>
-
+#include <mln/binarization/tmms_hysteresis.hh>
+#include <mln/io/pbm/load.hh>
#include <mln/io/pgm/load.hh>
-#include <mln/io/pgm/save.hh>
-
-#include <mln/morpho/closing/structural.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/win/rectangle2d.hh>
#include "tests/data.hh"
-
int main()
{
using namespace mln;
- using value::int_u8;
- image2d<int_u8> lena, out;
+ image2d<value::int_u8> lena;
io::pgm::load(lena, MLN_IMG_DIR "/lena.pgm");
- bool w[] = { 0, 1, 1,
- 0, 0, 1,
- 0, 0, 1 };
+ image2d<value::int_u8>
+ bin = binarization::tmms_hysteresis(lena,
+ win::rectangle2d(3,3),
+ 20, 45, 0, 128, 255, 60);
+
+ image2d<value::int_u8> ref;
+ io::pgm::load(ref, MLN_TESTS_DIR "/binarization/tmms-hysteresis-out.pgm");
- out = morpho::closing::structural(lena,
- convert::to<window2d>(w));
- io::pgm::save(out, "structural-out.pgm");
+ mln_assertion(ref == bin);
}
--
1.7.2.5
1
0

olena: olena-2.0-553-gc85146b Add a labeling routine working on grayscale images.
by Guillaume Lazzara 02 May '13
by Guillaume Lazzara 02 May '13
02 May '13
* mln/canvas/labeling/blobs.hh,
* mln/labeling/blobs.hh,
* mln/labeling/blobs_and_compute.hh: Introduce a new functor
method handles().
* tests/labeling/Makefile.am: Add target.
* mln/labeling/all_blobs.hh,
* tests/labeling/all_blobs.cc: New.
---
milena/ChangeLog | 14 ++++
milena/mln/canvas/labeling/blobs.hh | 12 ++--
milena/mln/labeling/{blobs.hh => all_blobs.hh} | 68 ++++++++++----------
milena/mln/labeling/blobs.hh | 52 +++++++++------
milena/mln/labeling/blobs_and_compute.hh | 16 ++++-
milena/tests/labeling/Makefile.am | 1 +
.../tests/labeling/{foreground.cc => all_blobs.cc} | 48 +++++++-------
7 files changed, 121 insertions(+), 90 deletions(-)
copy milena/mln/labeling/{blobs.hh => all_blobs.hh} (62%)
copy milena/tests/labeling/{foreground.cc => all_blobs.cc} (68%)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index edf3a65..d9a8d2b 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,19 @@
2013-04-17 Guillaume Lazzara <z(a)lrde.epita.fr>
+ Add a labeling routine working on grayscale images.
+
+ * mln/canvas/labeling/blobs.hh,
+ * mln/labeling/blobs.hh,
+ * mln/labeling/blobs_and_compute.hh: Introduce a new functor
+ method handles().
+
+ * tests/labeling/Makefile.am: Add target.
+
+ * mln/labeling/all_blobs.hh,
+ * tests/labeling/all_blobs.cc: New.
+
+2013-04-17 Guillaume Lazzara <z(a)lrde.epita.fr>
+
* doc/mln/convert.dox: Fix from_to_ module name.
2013-04-17 Guillaume Lazzara <z(a)lrde.epita.fr>
diff --git a/milena/mln/canvas/labeling/blobs.hh b/milena/mln/canvas/labeling/blobs.hh
index 7f962db..4a643ce 100644
--- a/milena/mln/canvas/labeling/blobs.hh
+++ b/milena/mln/canvas/labeling/blobs.hh
@@ -108,14 +108,14 @@ namespace mln
initialize(output, input);
data::fill(output, zero);
- extension::fill(input, false);
+ //extension::fill(input, false);
functor.init(); // <-- functor.init()
// Loop.
mln_piter(I) p(input.domain());
for_all(p)
- if (input(p) && output(p) == zero) // Object point, not labeled yet.
+ if (functor.handles(input(p)) && output(p) == zero) // Object point, not labeled yet.
{
// Label this point component.
if (nlabels == mln_max(L))
@@ -136,8 +136,8 @@ for this label type: nlabels > max(label_type).");
{
cur = qu.front();
qu.pop();
- for_all(n) if (input.has(n))
- if (input(n) && output(n) == zero)
+ for_all(n) if (input.domain().has(n))
+ if (input(p) == input(n) && output(n) == zero)
{
mln_invariant(! qu.compute_has(n));
qu.push(n);
@@ -170,8 +170,8 @@ for this label type: nlabels > max(label_type).");
L& nlabels, F& functor)
{
mln_trace("labeling::blobs");
- mlc_equal(mln_trait_image_kind(I),
- mln::trait::image::kind::binary)::check();
+ // mlc_equal(mln_trait_image_kind(I),
+ // mln::trait::image::kind::binary)::check();
const I& input = exact(input_);
const N& nbh = exact(nbh_);
mln_precondition(input.is_valid());
diff --git a/milena/mln/labeling/blobs.hh b/milena/mln/labeling/all_blobs.hh
similarity index 62%
copy from milena/mln/labeling/blobs.hh
copy to milena/mln/labeling/all_blobs.hh
index 5767d5a..96e5a09 100644
--- a/milena/mln/labeling/blobs.hh
+++ b/milena/mln/labeling/all_blobs.hh
@@ -1,5 +1,5 @@
-// Copyright (C) 2007, 2008, 2009, 2012 EPITA Research and Development
-// Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009, 2012, 2013 EPITA Research and
+// Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,17 +24,15 @@
// exception does not however invalidate any other reasons why the
// executable file might be covered by the GNU General Public License.
-#ifndef MLN_LABELING_BLOBS_HH
-# define MLN_LABELING_BLOBS_HH
+#ifndef MLN_LABELING_ALL_BLOBS_HH
+# define MLN_LABELING_ALL_BLOBS_HH
/// \file
///
-/// Connected component labeling of the binary objects of a binary
+/// Connected component labeling of the homogeneous regions of an
/// image using a queue-based algorithm.
///
/// \todo Handle abort in a nice way...
-///
-/// \todo Add a 2nd version precising the 'value' to label.
# include <mln/core/concept/image.hh>
# include <mln/core/concept/neighborhood.hh>
@@ -48,24 +46,25 @@ namespace mln
namespace labeling
{
- /// \brief Connected component labeling of the binary objects of a
- /// binary image.
- ///
- /// \param[in] input The input image.
- /// \param[in] nbh The connexity of the objects.
- /// \param[out] nlabels The Number of labels. Its value is set in the
- /// algorithms.
- /// \return The label image.
- ///
- /// \pre The input image has to be binary (checked at compile-time).
- ///
- /// A fast queue is used so that the algorithm is not recursive and
- /// can handle large binary objects (blobs).
- //
+ /*! \brief Connected component labeling of the homogeneous regions
+ * of an image.
+
+ \param[in] input The input image.
+ \param[in] nbh The connexity of the objects.
+ \param[out] nlabels The Number of labels. Its value is set in the
+ algorithms.
+ \return The label image.
+
+ A fast queue is used so that the algorithm is not recursive and
+ can handle large objects (blobs).
+
+ \ingroup labeling
+ */
template <typename I, typename N, typename L>
mln_ch_value(I, L)
- blobs(const Image<I>& input, const Neighborhood<N>& nbh,
- L& nlabels);
+ all_blobs(const Image<I>& input, const Neighborhood<N>& nbh,
+ L& nlabels);
+
# ifndef MLN_INCLUDE_ONLY
@@ -74,15 +73,16 @@ namespace mln
namespace internal
{
- /*!
- \brief Functor not computing anything. To be passed to the labeling
- blobs canvas.
+ /*! \brief Functor not computing anything. To be passed to the
+ labeling blobs canvas.
*/
- template <typename L>
- struct dummy_functor
+ template <typename I, typename L>
+ struct label_values_functor
{
void init() {}
+ bool handles(const mln_value(I)&) { return true; }
+
void new_label(const mln_value(L)&) {}
void process_p(const mln_site(L)&) {}
@@ -101,18 +101,16 @@ namespace mln
template <typename I, typename N, typename L>
inline
mln_ch_value(I, L)
- blobs(const Image<I>& input_, const Neighborhood<N>& nbh_,
- L& nlabels)
+ all_blobs(const Image<I>& input_, const Neighborhood<N>& nbh_,
+ L& nlabels)
{
- mln_trace("labeling::blobs");
- mlc_equal(mln_trait_image_kind(I),
- mln::trait::image::kind::binary)::check();
+ mln_trace("labeling::all_blobs");
const I& input = exact(input_);
const N& nbh = exact(nbh_);
mln_precondition(input.is_valid());
typedef mln_ch_value(I,L) out_t;
- internal::dummy_functor<out_t> functor;
+ internal::label_values_functor<I, out_t> functor;
out_t
output = canvas::labeling::blobs(input, nbh, nlabels, functor);
@@ -126,4 +124,4 @@ namespace mln
} // end of namespace mln
-#endif // ! MLN_LABELING_BLOBS_HH
+#endif // ! MLN_LABELING_ALL_BLOBS_HH
diff --git a/milena/mln/labeling/blobs.hh b/milena/mln/labeling/blobs.hh
index 5767d5a..81073d1 100644
--- a/milena/mln/labeling/blobs.hh
+++ b/milena/mln/labeling/blobs.hh
@@ -1,5 +1,5 @@
-// Copyright (C) 2007, 2008, 2009, 2012 EPITA Research and Development
-// Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009, 2012, 2013 EPITA Research and
+// Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -48,41 +48,47 @@ namespace mln
namespace labeling
{
- /// \brief Connected component labeling of the binary objects of a
- /// binary image.
- ///
- /// \param[in] input The input image.
- /// \param[in] nbh The connexity of the objects.
- /// \param[out] nlabels The Number of labels. Its value is set in the
- /// algorithms.
- /// \return The label image.
- ///
- /// \pre The input image has to be binary (checked at compile-time).
- ///
- /// A fast queue is used so that the algorithm is not recursive and
- /// can handle large binary objects (blobs).
- //
+ /*! \brief Connected component labeling of the binary objects of a
+ binary image.
+
+ \param[in] input The input image.
+ \param[in] nbh The connexity of the objects.
+ \param[out] nlabels The Number of labels. Its value is set in the
+ algorithms.
+ \return The label image.
+
+ \pre The input image has to be binary (checked at compile-time).
+
+ A fast queue is used so that the algorithm is not recursive and
+ can handle large binary objects (blobs).
+
+ \ingroup labeling
+ */
template <typename I, typename N, typename L>
mln_ch_value(I, L)
blobs(const Image<I>& input, const Neighborhood<N>& nbh,
L& nlabels);
+
# ifndef MLN_INCLUDE_ONLY
namespace internal
{
- /*!
- \brief Functor not computing anything. To be passed to the labeling
- blobs canvas.
+ /*! \brief Functor not computing anything. To be passed to the
+ labeling blobs canvas.
*/
- template <typename L>
- struct dummy_functor
+ template <typename I, typename L>
+ struct label_value_functor
{
+ label_value_functor(const mln_value(I)& value) : value_(value) {}
+
void init() {}
+ bool handles(const mln_value(I)& v) { return v == value_; }
+
void new_label(const mln_value(L)&) {}
void process_p(const mln_site(L)&) {}
@@ -90,6 +96,8 @@ namespace mln
void process_n(const mln_site(L)&) {}
void finalize() {}
+
+ mln_value(I) value_;
};
} // end of namespace mln::labeling::internal
@@ -112,7 +120,7 @@ namespace mln
mln_precondition(input.is_valid());
typedef mln_ch_value(I,L) out_t;
- internal::dummy_functor<out_t> functor;
+ internal::label_value_functor<I, out_t> functor(true);
out_t
output = canvas::labeling::blobs(input, nbh, nlabels, functor);
diff --git a/milena/mln/labeling/blobs_and_compute.hh b/milena/mln/labeling/blobs_and_compute.hh
index 166af6a..f7d2f76 100644
--- a/milena/mln/labeling/blobs_and_compute.hh
+++ b/milena/mln/labeling/blobs_and_compute.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010, 2012 EPITA Research and Development
+// Copyright (C) 2009, 2010, 2012, 2013 EPITA Research and Development
// Laboratory (LRDE)
//
// This file is part of Olena.
@@ -46,7 +46,7 @@ namespace mln
namespace labeling
{
- /*! Label an image and compute given accumulators.
+ /*! \brief Label an image and compute given accumulators.
\param[in] input A binary image.
\param[in] nbh A neighborhood used for labeling.
@@ -56,6 +56,8 @@ namespace mln
\return The labeled image, computed attributes for each regions
and an array of the accumulators used to compute the
attributes.
+
+ \ingroup labeling
*/
template <typename I, typename N, typename L, typename A>
util::couple<mln_ch_value(I,L),
@@ -77,7 +79,7 @@ namespace mln
\brief Functor not computing anything.
To be passed to the labeling blobs canvas.
*/
- template <typename L, typename A>
+ template <typename I, typename L, typename A>
struct compute_functor
{
typedef mln_result(A) accu_result;
@@ -98,6 +100,12 @@ namespace mln
}
inline
+ bool handles(const mln_value(I)& v)
+ {
+ return v;
+ }
+
+ inline
void new_label(const mln_value(L)& l)
{
current_lbl_ = l;
@@ -172,7 +180,7 @@ namespace mln
mln_precondition(exact(input).is_valid());
typedef mln_ch_value(I,L) out_t;
- typedef internal::compute_functor<out_t,A> func_t;
+ typedef internal::compute_functor<I,out_t,A> func_t;
func_t functor(nlabels);
out_t
output = canvas::labeling::blobs(input, nbh, nlabels, functor);
diff --git a/milena/tests/labeling/Makefile.am b/milena/tests/labeling/Makefile.am
index 1cabf25..9aa5416 100644
--- a/milena/tests/labeling/Makefile.am
+++ b/milena/tests/labeling/Makefile.am
@@ -22,6 +22,7 @@ EXTRA_DIST = \
check_PROGRAMS = \
+ all_blobs \
background \
blobs \
blobs_and_compute \
diff --git a/milena/tests/labeling/foreground.cc b/milena/tests/labeling/all_blobs.cc
similarity index 68%
copy from milena/tests/labeling/foreground.cc
copy to milena/tests/labeling/all_blobs.cc
index 286c166..646227a 100644
--- a/milena/tests/labeling/foreground.cc
+++ b/milena/tests/labeling/all_blobs.cc
@@ -1,5 +1,5 @@
-// Copyright (C) 2007, 2008, 2009, 2010, 2013 EPITA Research and
-// Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009, 2013 EPITA Research and Development
+// Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -25,37 +25,39 @@
// executable file might be covered by the GNU General Public License.
#include <mln/core/image/image2d.hh>
-#include <mln/core/var.hh>
#include <mln/io/pbm/load.hh>
#include <mln/io/pgm/load.hh>
#include <mln/core/alias/neighb2d.hh>
-#include <mln/data/compare.hh>
-#include <mln/labeling/foreground.hh>
+#include <mln/labeling/all_blobs.hh>
#include <mln/value/int_u8.hh>
+#include <mln/labeling/colorize.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/value/rgb8.hh>
+#include <mln/debug/println.hh>
+
#include "tests/data.hh"
-#include <mln/io/pgm/save.hh>
int main()
{
using namespace mln;
- typedef image2d<bool> I;
- neighb2d nbh = c4();
-
- // Load ref
- image2d<value::int_u8> ref;
- io::pgm::load(ref, MLN_TESTS_DIR "/labeling/foreground.ref.pgm");
-
-
- I input = io::pbm::load(MLN_IMG_DIR "/picasso.pbm");
- image2d<value::int_u8> out;
-
- value::int_u8 n;
- out = labeling::foreground(input, nbh, n);
-
-
- mln_assertion(n == 33);
- mln_assertion(ref == out);
+ // Binary image
+ {
+ image2d<bool> pic;
+ io::pbm::load(pic, MLN_IMG_DIR "/picasso.pbm");
+ unsigned n;
+ labeling::all_blobs(pic, c4(), n);
+ mln_assertion(n == 142);
+ }
+
+ // Gray-level image
+ {
+ image2d<value::int_u8> pic;
+ io::pgm::load(pic, MLN_IMG_DIR "/fly.pgm");
+ unsigned n;
+ labeling::all_blobs(pic, c4(), n);
+ mln_assertion(n == 24);
+ }
}
--
1.7.2.5
1
0

olena: branch xml2doc-fix-template-path updated: olena-2.0-553-g3105f43
by gitï¼ lrde.epita.fr 02 May '13
by gitï¼ lrde.epita.fr 02 May '13
02 May '13
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch xml2doc-fix-template-path has been updated
discards dd1f5ea8df10a364153a922cbf6b1c023fb16d13 (commit)
via 3105f43b405abb4ac439041a2cd7266dd131f787 (commit)
via 1935bc36690804e3ee07a7c2344538c9d80287c8 (commit)
via 51571df5ecf647d4f8d258bba3714ac78d9cf19d (commit)
via 806244e44b676343c967c44ca3563492e0d817ad (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (dd1f5ea8df10a364153a922cbf6b1c023fb16d13)
\
N -- N -- N (3105f43b405abb4ac439041a2cd7266dd131f787)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
3105f43 demo/xml2doc/main.cc: Add --template-path option.
-----------------------------------------------------------------------
Summary of changes:
scribo/ChangeLog | 14 ++++++++++++
scribo/scribo/binarization/sauvola_ms_split.hh | 4 +++
.../toolchain/internal/text_in_picture_functor.hh | 22 ++++++++++----------
scribo/src/text_in_picture.cc | 22 +++++++++++--------
4 files changed, 42 insertions(+), 20 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
1
0

olena: branch exp/magick-improvements updated: olena-2.0-560-g8ad1a2f
by gitï¼ lrde.epita.fr 02 May '13
by gitï¼ lrde.epita.fr 02 May '13
02 May '13
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch exp/magick-improvements has been updated
discards e3c2648c929860296341b0a2cfc9d593cb836117 (commit)
discards 36798c2d16e786c1cfd3460a0df738a9341eb607 (commit)
discards b60f594ead92a2aba349b0ef9982160526edc2da (commit)
discards 4376a9cc3724123c1a73c893d82746dfd8c873c3 (commit)
discards 929a663e0c26be70a6ef2e7828ef061a9c861842 (commit)
discards e42c33ee80ab8dce3a77644a9ba5b4e6cf6d1521 (commit)
discards 027bc33ddeb178615228542ff80112199786ce46 (commit)
discards bf546a8ede0d53aeaff42277833fc22b5a29a480 (commit)
via 8ad1a2fe232c31f6d8b5274839575af4ad347840 (commit)
via f5465f71e580d12a4b7b7f68dcb38bee721ef038 (commit)
via 17edd9ca329aa0e4d902591ed4e55c433b6ddd52 (commit)
via 707680bda7ea0db5a9405bd996e9d6aedf952485 (commit)
via 5c00887494643af165e64f534ab369ec3ecac9f2 (commit)
via 2fd79661958d40d300e85243f1d20f28dbb579f6 (commit)
via e8c91e156cb826d0a165a82e8f14262744ab7cd6 (commit)
via 199e5c9aeed93d62bbd19f0bba8e44efa0c04097 (commit)
via 1935bc36690804e3ee07a7c2344538c9d80287c8 (commit)
via 51571df5ecf647d4f8d258bba3714ac78d9cf19d (commit)
via 806244e44b676343c967c44ca3563492e0d817ad (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (e3c2648c929860296341b0a2cfc9d593cb836117)
\
N -- N -- N (8ad1a2fe232c31f6d8b5274839575af4ad347840)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
8ad1a2f NEWS: Add details about GraphicsMagick I/O improvements.
f5465f7 Regen auto-generated files.
17edd9c mln/convert/impl/from_value_to_value.hh: Improve from_value_to_value dispatch for types with identical equiv type.
707680b Handle 16 bits value types with io::magick.
5c00887 Relax conversion dispatch.
2fd7966 tests/io/magick/save.cc: Kill compilation warnings.
e8c91e1 Add save options to magick::save.
199e5c9 Add a new routine to get image headers thanks to GraphicsMagick.
-----------------------------------------------------------------------
Summary of changes:
scribo/ChangeLog | 14 ++++++++++++
scribo/scribo/binarization/sauvola_ms_split.hh | 4 +++
.../toolchain/internal/text_in_picture_functor.hh | 22 ++++++++++----------
scribo/src/text_in_picture.cc | 22 +++++++++++--------
4 files changed, 42 insertions(+), 20 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
1
0

02 May '13
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch exp/all-blobs has been updated
discards 2ec8fee6b63affcbcaef7fa09eb6ff7b707ce50f (commit)
discards f8e6233302741208eb78a51e9f0c8655115422fc (commit)
discards fe3d6d46aa9357d3db8fdbe118d421faf6b540cd (commit)
discards 18a58d33480cce146e8aa2f2f5edb4ccc7b75cea (commit)
via 3f8a07da7dc8c436af13ebe6a2f7aa364ce241b8 (commit)
via db8fbc59af853c10a3ba57562fb78b3e33a934cd (commit)
via 161b47d0011f76fd0a19d7ef6e4c179722169b91 (commit)
via c85146bd36a6f94026ba7c794226a5d127e6d02f (commit)
via 1935bc36690804e3ee07a7c2344538c9d80287c8 (commit)
via 51571df5ecf647d4f8d258bba3714ac78d9cf19d (commit)
via 806244e44b676343c967c44ca3563492e0d817ad (commit)
via 1cd17e32b4fc61239195c688394cd92c3fc44167 (commit)
via efabb3bcb01ae366f463abf4fa14303efce4cda7 (commit)
via 276ad3db3217651981534e7a5908c0b8954d2502 (commit)
via bd478ecf1a53fd1c42b3c267f220aab3f146c4ca (commit)
via 81824c6b2a74d526744302b38a5479989c961f76 (commit)
via 92344248afe3b83428d1db46b156e745451e5ce5 (commit)
via ce97be8f1743324174f965410d1249994eba3e8d (commit)
via 289bcac105fb22c53d37d73a32c1f1402bc5c358 (commit)
via 83d9bff14f8b49b346c6342855d612a37c58cfd0 (commit)
via aa8db8d1be7bdf624312762a1630355d3fec543a (commit)
via e2f4e925bc23a4698abe15108d0ec754bbf67c29 (commit)
via 07333d2c000f65cfabcc4702b704b5abf4126278 (commit)
via 1a302adfd37c3aebe33a477d64cb0304150e37c9 (commit)
via b0051dcaccff406bf3176e17f4abfb95a71822dd (commit)
via 13b61491d6933f69e26cb421e1448f094351cae9 (commit)
via 77d7b3a938fe16dc7216117a80158007706e1236 (commit)
via 9cf87e52f51dbc3344e7aca36a884b8ae0892bed (commit)
via ce8691742261a97e214f5e99024e319cc9e761e2 (commit)
via 9df9980fe8d9d1b2e7cd68ef41aa6bad00f261c0 (commit)
via 002e0e957be01c8a22605d884b9b1dd591e1ee5b (commit)
via 592a16814171acc776241e80db25673125619bda (commit)
via 979d54b458e41fc3bac8f347742d6a42a03df2a1 (commit)
via 22f1827a91aba6dd05a98e784d53d4e76a1498cd (commit)
via 733ef50fa2606d41c09badbe0f2204d16a806d61 (commit)
via 02fa89bb503205bdda6c35b477db63d637e36d31 (commit)
via 1b8c3754d59e04b11e38b19232b138e8cc42f8eb (commit)
via 11438e15a022b02513161e8191679c4409d6b4be (commit)
via 07973346bd57c8bef7e0346c28b6469da5db91e2 (commit)
via b3c468886a96090e094f3c7d79e48e489954997f (commit)
via 81e04f2a8a3166a165634524c0a73d7e9dc4f952 (commit)
via 0987e7f285f366e8129e1c1d439367e269932279 (commit)
via 17105bad97c497797a9f5ac257aca1b25c9a3678 (commit)
via 1c93a61f5b62f6ca9d96b8349d5140874adc0bce (commit)
via dde0e23d75e77e157992b656322044fad5c1f9e1 (commit)
via bc91dfb5dd05ce8b4f6b68f7f4eec1926b3aef0f (commit)
via 73774f40bae141b0b7cf507d6df8893279a46ea7 (commit)
via c173d75dba1a8d8a03c8fee43947145d2570ab64 (commit)
via 52ab07c654f83ee4968524f7e372599b762df21d (commit)
via 6a7f9e5a35954f24d74bd276193ddd257b230cac (commit)
via 8b40c86f5258ba437638b5e5d5d538ff3dcbe1c1 (commit)
via 3e5f8ace4ca6039eb22a587f463ec41014c66eec (commit)
via e048c0b0d60d75ca4458f7235179dfa283580fb2 (commit)
via 7c236c79dc621193afcf23c2ad0689a280b9e868 (commit)
via 42ff098b62214a8e3ff9984c6c554b051a93ad2e (commit)
via 04402f0a54a522e695cb3e492edc9cc9d280daf4 (commit)
via 0b442682e8f59c4e411ff0590b203bb1dcf04668 (commit)
via 5528729cfe130744aa8aa7d317af9d3a58146a2b (commit)
via cf3ad8f314f476fcac9768d2663d9afcd7661ef4 (commit)
via c57275b2a386c1fc291b4e1e800023eed552942d (commit)
via 409c1433fbb3845715a9f5b817f65d70ad161d90 (commit)
via 09c6148c1a2c9eda201e638b1ab6f5ebc7082745 (commit)
via c72cffc104bdffa902ebbdedc993ad5ddae8af5d (commit)
via cdcfe668b182ed328bae6dbd0d14528f72c50d4d (commit)
via c0f8681d2958afb11d3b4f5585de4804bc6524d4 (commit)
via 2f40e47c6660deb2d8f12c2ad403fffff6b44eb1 (commit)
via e3089252d712c2b0839f9798a98a99f690f959e2 (commit)
via b5d61ebe4059d8e89e1a40d7fd26545219172813 (commit)
via 5e4d3053fa3f8c92e02cbef811673b7c2a79040a (commit)
via 272ccdacb752b2352c26decdd648cbcf85b42b53 (commit)
via 73c3a74aea4d833e899baf0d69cd88e2c597908f (commit)
via dc7c3b9944d4b691b2099f10fba965714f82014f (commit)
via 5cd01f612dd0d318156ed7f7d369153f52a084d9 (commit)
via 5f3a088f08e99c16191c8e9461ae7052e9db8562 (commit)
via ea9c608068f019514e068fa629b18e53085ae5a3 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (2ec8fee6b63affcbcaef7fa09eb6ff7b707ce50f)
\
N -- N -- N (3f8a07da7dc8c436af13ebe6a2f7aa364ce241b8)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
3f8a07d NEWS: Describe improvements of labeling::blobs.
db8fbc5 Add support for graylevel images in labeling::blobs.
161b47d mln/core/internal/pixel_impl.hh: Add change_offset().
c85146b Add a labeling routine working on grayscale images.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 125 ++++++-
GScribo/BUGS | 1 -
GScribo/GScribo.pro | 83 ----
GScribo/GScribo.pro.user | 405 -------------------
GScribo/GScribo.pro.user.1.3 | 283 -------------
GScribo/PagesWidget/pagesdelegate.cpp | 20 -
GScribo/PagesWidget/pagesdelegate.h | 18 -
GScribo/PagesWidget/pagesmodel.cpp | 55 ---
GScribo/PagesWidget/pagesmodel.h | 43 --
GScribo/PagesWidget/pageswidget.cpp | 49 ---
GScribo/PagesWidget/pageswidget.h | 55 ---
GScribo/Preferences/generaloptions.cpp | 44 --
GScribo/Preferences/generaloptions.h | 34 --
GScribo/Preferences/generaloptions.ui | 100 -----
GScribo/Preferences/ocroptions.cpp | 53 ---
GScribo/Preferences/ocroptions.h | 33 --
GScribo/Preferences/ocroptions.ui | 62 ---
GScribo/Preferences/optionwidget.h | 15 -
GScribo/Preferences/preferencesdialog.cpp | 98 -----
GScribo/Preferences/preferencesdialog.h | 42 --
GScribo/Preferences/preferencesdialog.ui | 121 ------
GScribo/Preferences/preprocessingoptions.cpp | 45 ---
GScribo/Preferences/preprocessingoptions.h | 32 --
GScribo/Preferences/preprocessingoptions.ui | 76 ----
GScribo/Preferences/segmentationoptions.cpp | 33 --
GScribo/Preferences/segmentationoptions.h | 31 --
GScribo/Preferences/segmentationoptions.ui | 52 ---
GScribo/Processing/preprocess.cpp | 11 -
GScribo/Processing/preprocess.h | 26 --
GScribo/Processing/process.cpp | 21 -
GScribo/Processing/process.h | 29 --
GScribo/Processing/progressdialog.cpp | 16 -
GScribo/Processing/progressdialog.h | 22 -
GScribo/Processing/runner.cpp | 183 ---------
GScribo/Processing/runner.h | 58 ---
GScribo/Rendering/abstractregionitem.h | 13 -
GScribo/Rendering/backgroundtexture.h | 12 -
GScribo/Rendering/graphicsview.cpp | 150 -------
GScribo/Rendering/graphicsview.h | 43 --
GScribo/Rendering/regionitem.cpp | 59 ---
GScribo/Rendering/regionitem.h | 80 ----
GScribo/Rendering/rootgraphicsitem.h | 30 --
GScribo/Rendering/scene.cpp | 273 -------------
GScribo/Rendering/scene.h | 118 ------
GScribo/Rendering/selection.cpp | 36 --
GScribo/Rendering/selection.h | 20 -
GScribo/TODO | 100 -----
GScribo/XmlWidget/attributesmodel.cpp | 69 ----
GScribo/XmlWidget/attributesmodel.h | 48 ---
GScribo/XmlWidget/selectionproxy.h | 47 ---
GScribo/XmlWidget/xmlattributes.cpp | 23 --
GScribo/XmlWidget/xmlattributes.h | 33 --
GScribo/XmlWidget/xmldelegate.h | 30 --
GScribo/XmlWidget/xmlitem.cpp | 43 --
GScribo/XmlWidget/xmlitem.h | 90 -----
GScribo/XmlWidget/xmlmodel.cpp | 87 ----
GScribo/XmlWidget/xmlmodel.h | 44 --
GScribo/XmlWidget/xmlview.cpp | 88 ----
GScribo/XmlWidget/xmlview.h | 79 ----
GScribo/XmlWidget/xmlwidget.cpp | 34 --
GScribo/XmlWidget/xmlwidget.h | 54 ---
GScribo/aboutdialog.h | 25 --
GScribo/aboutdialog.ui | 136 -------
GScribo/configs.h | 134 -------
GScribo/dir.h | 7 -
GScribo/dockwidget.h | 22 -
GScribo/main.cpp | 23 --
GScribo/mainwindow.cpp | 415 --------------------
GScribo/mainwindow.h | 120 ------
GScribo/mainwindow.ui | 35 --
GScribo/region.h | 56 ---
GScribo/regionwidget.cpp | 70 ----
GScribo/regionwidget.h | 40 --
GScribo/variantpointer.h | 19 -
GScribo/xml.cpp | 206 ----------
GScribo/xml.h | 93 -----
Makefile.am | 28 +-
configure.ac | 14 +-
distrib/macports/Portfile.in | 4 +-
doc/Makefile.am | 4 +-
milena/ChangeLog | 102 +++++
milena/apps/mesh-segm-skel/Makefile.am | 2 +-
milena/doc/Doxyfile.in | 31 +-
milena/doc/Makefile.am | 9 +-
milena/doc/examples/multi_files_f1.cc.raw | 6 +
milena/doc/examples/multi_files_f2.cc.raw | 6 +
milena/doc/examples/multi_files_main.cc.raw | 16 +
milena/doc/examples/multiple_def.cc.raw | 9 +
milena/doc/examples/typenametemplate.cc.raw | 1 +
milena/doc/examples/undef_global_vars.cc.raw | 1 +
milena/doc/examples/wrongvaluetype.cc.raw | 2 +
milena/doc/mln/convert.dox | 4 +-
milena/doc/mln/labeling/labeling.dox | 6 +
milena/doc/ref-guide.tex | 69 +++-
milena/mln/labeling/background.hh | 4 +-
milena/mln/labeling/colorize.hh | 42 ++-
milena/mln/labeling/compute.hh | 100 +++---
milena/mln/labeling/compute_image.hh | 74 ++--
milena/mln/labeling/flat_zones.hh | 18 +-
milena/mln/labeling/foreground.hh | 8 +-
milena/mln/labeling/mean_values.hh | 11 +-
milena/mln/labeling/n_max.hh | 77 ++--
milena/mln/labeling/pack.hh | 34 ++-
milena/mln/labeling/regional_maxima.hh | 19 +-
milena/mln/labeling/regional_minima.hh | 19 +-
milena/mln/labeling/relabel.hh | 71 ++--
milena/mln/labeling/superpose.hh | 5 +-
milena/mln/labeling/value.hh | 24 +-
milena/mln/labeling/value_and_compute.hh | 22 +-
milena/mln/labeling/wrap.hh | 35 +-
milena/mln/topo/complex.hh | 44 +-
milena/mln/trait/ch_value.hh | 66 +++-
milena/mln/trait/concrete.hh | 65 +++-
milena/mln/win/rectangle2d.hh | 13 +-
milena/tests/labeling/n_max.cc | 5 +-
milena/tests/unit_test/unit-tests.mk | 2 +
scribo/ChangeLog | 81 ++++
scribo/doc/Doxyfile.in | 16 +-
scribo/doc/Makefile.am | 2 +-
scribo/doc/scribo/core/component_set.dox | 90 -----
scribo/scribo/binarization/sauvola_ms_split.hh | 4 +
scribo/scribo/core/component_set.hh | 102 +++++-
scribo/scribo/core/line_set.hh | 4 +-
scribo/scribo/core/object_links.hh | 53 ++-
scribo/scribo/debug/logger.hh | 2 +-
.../toolchain/internal/text_in_picture_functor.hh | 22 +-
scribo/scribo/util/component_precise_outline.hh | 9 +-
scribo/src/primitive/extract/lines_pattern.cc | 2 +-
scribo/src/text_in_picture.cc | 22 +-
swilena/ChangeLog | 280 +++++++++++++
swilena/Makefile.am | 11 +-
swilena/box.ixx | 2 +-
swilena/box2d.i | 7 +-
swilena/box_piter.ixx | 3 +-
swilena/complex.ixx | 330 ++++++++++++++++
swilena/complex2.i | 111 ++++++
swilena/concat.ixx | 4 +-
swilena/image2d.ixx | 30 ++-
swilena/image2d_int.i | 5 +-
swilena/image2d_int_u8.i | 4 +-
swilena/image2d_point2d.i | 53 +++
swilena/image2d_rgb8.i | 63 +++
swilena/int_u.ixx | 24 +-
swilena/morpho.ixx | 23 +-
swilena/ppm.ixx | 57 +++
swilena/python-utils.ixx | 3 +-
swilena/python/Makefile.am | 192 +++++++++-
swilena/python/complex2-misc.py | 99 +++++
swilena/python/data.py | 26 --
swilena/python/data.py.in | 26 ++
swilena/python/installcheck.mk | 116 ++++++
swilena/python/ltihooks.py | 60 ---
swilena/python/max-tree.py | 57 +++
swilena/python/morpho-segm.py | 2 +-
swilena/python/sps-gdb-local.in | 6 +
swilena/python/sps-local.in | 2 +-
swilena/python/swilena.py | 10 +-
swilena/rgb.ixx | 159 ++++++++
swilena/rgb8.i | 40 ++
swilena/run.in | 50 ++--
160 files changed, 2819 insertions(+), 5995 deletions(-)
delete mode 100644 GScribo/BUGS
delete mode 100644 GScribo/GScribo.pro
delete mode 100644 GScribo/GScribo.pro.user
delete mode 100644 GScribo/GScribo.pro.user.1.3
delete mode 100644 GScribo/PagesWidget/pagesdelegate.cpp
delete mode 100644 GScribo/PagesWidget/pagesdelegate.h
delete mode 100644 GScribo/PagesWidget/pagesmodel.cpp
delete mode 100644 GScribo/PagesWidget/pagesmodel.h
delete mode 100644 GScribo/PagesWidget/pageswidget.cpp
delete mode 100644 GScribo/PagesWidget/pageswidget.h
delete mode 100644 GScribo/Preferences/generaloptions.cpp
delete mode 100644 GScribo/Preferences/generaloptions.h
delete mode 100644 GScribo/Preferences/generaloptions.ui
delete mode 100644 GScribo/Preferences/ocroptions.cpp
delete mode 100644 GScribo/Preferences/ocroptions.h
delete mode 100644 GScribo/Preferences/ocroptions.ui
delete mode 100644 GScribo/Preferences/optionwidget.h
delete mode 100644 GScribo/Preferences/preferencesdialog.cpp
delete mode 100644 GScribo/Preferences/preferencesdialog.h
delete mode 100644 GScribo/Preferences/preferencesdialog.ui
delete mode 100644 GScribo/Preferences/preprocessingoptions.cpp
delete mode 100644 GScribo/Preferences/preprocessingoptions.h
delete mode 100644 GScribo/Preferences/preprocessingoptions.ui
delete mode 100644 GScribo/Preferences/segmentationoptions.cpp
delete mode 100644 GScribo/Preferences/segmentationoptions.h
delete mode 100644 GScribo/Preferences/segmentationoptions.ui
delete mode 100644 GScribo/Processing/preprocess.cpp
delete mode 100644 GScribo/Processing/preprocess.h
delete mode 100644 GScribo/Processing/process.cpp
delete mode 100644 GScribo/Processing/process.h
delete mode 100644 GScribo/Processing/progressdialog.cpp
delete mode 100644 GScribo/Processing/progressdialog.h
delete mode 100644 GScribo/Processing/runner.cpp
delete mode 100644 GScribo/Processing/runner.h
delete mode 100644 GScribo/Rendering/abstractregionitem.h
delete mode 100644 GScribo/Rendering/backgroundtexture.h
delete mode 100644 GScribo/Rendering/graphicsview.cpp
delete mode 100644 GScribo/Rendering/graphicsview.h
delete mode 100644 GScribo/Rendering/regionitem.cpp
delete mode 100644 GScribo/Rendering/regionitem.h
delete mode 100644 GScribo/Rendering/rootgraphicsitem.h
delete mode 100644 GScribo/Rendering/scene.cpp
delete mode 100644 GScribo/Rendering/scene.h
delete mode 100644 GScribo/Rendering/selection.cpp
delete mode 100644 GScribo/Rendering/selection.h
delete mode 100644 GScribo/TODO
delete mode 100644 GScribo/XmlWidget/attributesmodel.cpp
delete mode 100644 GScribo/XmlWidget/attributesmodel.h
delete mode 100644 GScribo/XmlWidget/selectionproxy.h
delete mode 100644 GScribo/XmlWidget/xmlattributes.cpp
delete mode 100644 GScribo/XmlWidget/xmlattributes.h
delete mode 100644 GScribo/XmlWidget/xmldelegate.h
delete mode 100644 GScribo/XmlWidget/xmlitem.cpp
delete mode 100644 GScribo/XmlWidget/xmlitem.h
delete mode 100644 GScribo/XmlWidget/xmlmodel.cpp
delete mode 100644 GScribo/XmlWidget/xmlmodel.h
delete mode 100644 GScribo/XmlWidget/xmlview.cpp
delete mode 100644 GScribo/XmlWidget/xmlview.h
delete mode 100644 GScribo/XmlWidget/xmlwidget.cpp
delete mode 100644 GScribo/XmlWidget/xmlwidget.h
delete mode 100644 GScribo/aboutdialog.h
delete mode 100644 GScribo/aboutdialog.ui
delete mode 100644 GScribo/configs.h
delete mode 100644 GScribo/dir.h
delete mode 100644 GScribo/dockwidget.h
delete mode 100644 GScribo/main.cpp
delete mode 100644 GScribo/mainwindow.cpp
delete mode 100644 GScribo/mainwindow.h
delete mode 100644 GScribo/mainwindow.ui
delete mode 100644 GScribo/region.h
delete mode 100644 GScribo/regionwidget.cpp
delete mode 100644 GScribo/regionwidget.h
delete mode 100644 GScribo/variantpointer.h
delete mode 100644 GScribo/xml.cpp
delete mode 100644 GScribo/xml.h
create mode 100644 milena/doc/examples/multi_files_f1.cc.raw
create mode 100644 milena/doc/examples/multi_files_f2.cc.raw
create mode 100644 milena/doc/examples/multi_files_main.cc.raw
create mode 100644 milena/doc/examples/multiple_def.cc.raw
create mode 100644 milena/doc/examples/typenametemplate.cc.raw
create mode 100644 milena/doc/examples/undef_global_vars.cc.raw
create mode 100644 milena/doc/examples/wrongvaluetype.cc.raw
create mode 100644 milena/doc/mln/labeling/labeling.dox
delete mode 100644 scribo/doc/scribo/core/component_set.dox
create mode 100644 swilena/complex.ixx
create mode 100644 swilena/complex2.i
create mode 100644 swilena/image2d_point2d.i
create mode 100644 swilena/image2d_rgb8.i
create mode 100644 swilena/ppm.ixx
create mode 100644 swilena/python/complex2-misc.py
delete mode 100644 swilena/python/data.py
create mode 100644 swilena/python/data.py.in
create mode 100644 swilena/python/installcheck.mk
delete mode 100644 swilena/python/ltihooks.py
create mode 100644 swilena/python/max-tree.py
create mode 100644 swilena/python/sps-gdb-local.in
create mode 100644 swilena/rgb.ixx
create mode 100644 swilena/rgb8.i
hooks/post-receive
--
Olena, a generic and efficient image processing platform
1
0

02 May '13
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch exp/all-blobs has been updated
via 2ec8fee6b63affcbcaef7fa09eb6ff7b707ce50f (commit)
from f8e6233302741208eb78a51e9f0c8655115422fc (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
2ec8fee NEWS: Describe improvements of labeling::blobs.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 4 ++++
NEWS | 2 ++
2 files changed, 6 insertions(+), 0 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
1
0

olena: olena-2.0-489-g2ec8fee NEWS: Describe improvements of labeling::blobs.
by Guillaume Lazzara 02 May '13
by Guillaume Lazzara 02 May '13
02 May '13
---
ChangeLog | 4 ++++
NEWS | 2 ++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 96dc75f..db84938 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ * NEWS: Describe improvements of labeling::blobs.
+
2013-04-12 Guillaume Lazzara <z(a)lrde.epita.fr>
* doc/Makefile.am: Remove duplicate '/' in path.
diff --git a/NEWS b/NEWS
index 26ce3c0..00f8b8c 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,8 @@
* Speed up I/O accesses with ImageMagick/GraphicsMagick.
+ * Add support for graylevel images in labeling::blobs.
+
* Scribo
* New logger class.
--
1.7.2.5
1
0

olena: olena-2.0-556-g3f8a07d NEWS: Describe improvements of labeling::blobs.
by Guillaume Lazzara 02 May '13
by Guillaume Lazzara 02 May '13
02 May '13
---
ChangeLog | 4 ++++
NEWS | 2 ++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5c08e1b..a8e9427 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-05-02 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ * NEWS: Describe improvements of labeling::blobs.
+
2013-04-18 Guillaume Lazzara <z(a)lrde.epita.fr>
Remove unstable viewer.
diff --git a/NEWS b/NEWS
index 26ce3c0..00f8b8c 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,8 @@
* Speed up I/O accesses with ImageMagick/GraphicsMagick.
+ * Add support for graylevel images in labeling::blobs.
+
* Scribo
* New logger class.
--
1.7.2.5
1
0