* tests/binarization/Makefile.am: Add new targets.
* tests/binarization/sauvola.cc,
* tests/binarization/sauvola_ms.cc: New.
* tests/binarization/sauvola.ref.pbm,
* tests/binarization/sauvola_ms.ref.pbm: New test data.
* tests/data.hh.in: Add a new path.
---
scribo/ChangeLog | 14 +++++++++
scribo/tests/binarization/Makefile.am | 6 +++-
.../tests/binarization/sauvola.cc | 29 ++++++++++---------
scribo/tests/binarization/sauvola.ref.pbm | Bin 0 -> 32884 bytes
.../tests/binarization/sauvola_ms.cc | 30 ++++++++++---------
scribo/tests/binarization/sauvola_ms.ref.pbm | Bin 0 -> 32884 bytes
scribo/tests/data.hh.in | 3 ++
7 files changed, 53 insertions(+), 29 deletions(-)
copy milena/tests/labeling/fill_holes.cc => scribo/tests/binarization/sauvola.cc
(74%)
create mode 100644 scribo/tests/binarization/sauvola.ref.pbm
copy milena/tests/labeling/fill_holes.cc => scribo/tests/binarization/sauvola_ms.cc
(72%)
create mode 100644 scribo/tests/binarization/sauvola_ms.ref.pbm
diff --git a/scribo/ChangeLog b/scribo/ChangeLog
index 0235162..423c9ac 100644
--- a/scribo/ChangeLog
+++ b/scribo/ChangeLog
@@ -1,3 +1,17 @@
+2011-04-07 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Add new tests for Sauvola algorithms.
+
+ * tests/binarization/Makefile.am: Add new targets.
+
+ * tests/binarization/sauvola.cc,
+ * tests/binarization/sauvola_ms.cc: New.
+
+ * tests/binarization/sauvola.ref.pbm,
+ * tests/binarization/sauvola_ms.ref.pbm: New test data.
+
+ * tests/data.hh.in: Add a new path.
+
2011-04-06 Guillaume Lazzara <z(a)lrde.epita.fr>
* scribo/filter/object_groups_size_ratio.hh: Fix compilation.
diff --git a/scribo/tests/binarization/Makefile.am
b/scribo/tests/binarization/Makefile.am
index c845b43..b894f5a 100644
--- a/scribo/tests/binarization/Makefile.am
+++ b/scribo/tests/binarization/Makefile.am
@@ -21,10 +21,14 @@ include $(top_srcdir)/scribo/tests/tests.mk
check_PROGRAMS = \
global_threshold \
- local_threshold
+ local_threshold \
+ sauvola \
+ sauvola_ms
global_threshold_SOURCES = global_threshold.cc
local_threshold_SOURCES = local_threshold.cc
+sauvola_SOURCES = sauvola.cc
+sauvola_ms_SOURCES = sauvola_ms.cc
TESTS = $(check_PROGRAMS)
diff --git a/milena/tests/labeling/fill_holes.cc b/scribo/tests/binarization/sauvola.cc
similarity index 74%
copy from milena/tests/labeling/fill_holes.cc
copy to scribo/tests/binarization/sauvola.cc
index bbf55b8..33eb59f 100644
--- a/milena/tests/labeling/fill_holes.cc
+++ b/scribo/tests/binarization/sauvola.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2011 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,28 +24,29 @@
// executable file might be covered by the GNU General Public License.
/// \file
-///
-/// Test of labeling::fill_holes.
-///
-/// \fixme Write a Test!
#include <mln/core/image/image2d.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/io/pgm/load.hh>
#include <mln/io/pbm/load.hh>
-#include <mln/core/alias/neighb2d.hh>
-#include <mln/labeling/fill_holes.hh>
-#include <mln/value/label_8.hh>
-
-#include <mln/debug/println.hh>
#include <mln/io/pbm/save.hh>
-#include "tests/data.hh"
+#include <scribo/binarization/sauvola.hh>
+#include "tests/data.hh"
int main()
{
using namespace mln;
- image2d<bool> pic = io::pbm::load(MLN_IMG_DIR "/picasso.pbm");
- value::label_8 n;
- image2d<bool> out = labeling::fill_holes(pic, c4(), n);
+ image2d<value::int_u8> input;
+ io::pgm::load(input, MILENA_IMG_DIR "/lena.pgm");
+
+ image2d<bool> bin = scribo::binarization::sauvola(input, 101);
+
+ image2d<bool> ref;
+ io::pbm::load(ref, SCRIBO_TESTS_DIR "binarization/sauvola.ref.pbm");
+
+ mln_assertion(bin == ref);
}
diff --git a/scribo/tests/binarization/sauvola.ref.pbm
b/scribo/tests/binarization/sauvola.ref.pbm
new file mode 100644
index 0000000000000000000000000000000000000000..6730ad45546f12a6e4dd166c41395689594bc2d1
GIT binary patch
literal 32884
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
Yn;N{gq35|3-mI*f&idB>-Ut8x0P<7s-v9sr
literal 0
HcmV?d00001
diff --git a/milena/tests/labeling/fill_holes.cc
b/scribo/tests/binarization/sauvola_ms.cc
similarity index 72%
copy from milena/tests/labeling/fill_holes.cc
copy to scribo/tests/binarization/sauvola_ms.cc
index bbf55b8..31d0f96 100644
--- a/milena/tests/labeling/fill_holes.cc
+++ b/scribo/tests/binarization/sauvola_ms.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2011 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -24,28 +24,30 @@
// executable file might be covered by the GNU General Public License.
/// \file
-///
-/// Test of labeling::fill_holes.
-///
-/// \fixme Write a Test!
#include <mln/core/image/image2d.hh>
+#include <mln/data/compare.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/io/pgm/load.hh>
#include <mln/io/pbm/load.hh>
-#include <mln/core/alias/neighb2d.hh>
-#include <mln/labeling/fill_holes.hh>
-#include <mln/value/label_8.hh>
-
-#include <mln/debug/println.hh>
#include <mln/io/pbm/save.hh>
-#include "tests/data.hh"
+#include <scribo/binarization/sauvola_ms.hh>
+#include "tests/data.hh"
int main()
{
using namespace mln;
- image2d<bool> pic = io::pbm::load(MLN_IMG_DIR "/picasso.pbm");
- value::label_8 n;
- image2d<bool> out = labeling::fill_holes(pic, c4(), n);
+ image2d<value::int_u8> input;
+ io::pgm::load(input, MILENA_IMG_DIR "/lena.pgm");
+
+ image2d<bool> bin = scribo::binarization::sauvola_ms(input, 101, 2);
+
+ io::pbm::save(bin, "res.pbm");
+ image2d<bool> ref;
+ io::pbm::load(ref, SCRIBO_TESTS_DIR "/binarization/sauvola_ms.ref.pbm");
+
+ mln_assertion(bin == ref);
}
diff --git a/scribo/tests/binarization/sauvola_ms.ref.pbm
b/scribo/tests/binarization/sauvola_ms.ref.pbm
new file mode 100644
index 0000000000000000000000000000000000000000..685efe7175c19cbcabd696fe357bd4a69401db06
GIT binary patch
literal 32884
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
literal 0
HcmV?d00001
diff --git a/scribo/tests/data.hh.in b/scribo/tests/data.hh.in
index 501fbea..5966fba 100644
--- a/scribo/tests/data.hh.in
+++ b/scribo/tests/data.hh.in
@@ -40,4 +40,7 @@
/// \brief The absolute path to the test directory of Scribo.
# define SCRIBO_TESTS_DIR "@abs_top_srcdir@/scribo/tests/"
+/// \brief The absolute path to the img directory of Milena.
+# define MILENA_IMG_DIR "@abs_top_srcdir@/milena/img"
+
#endif // ! SCRIBO_TESTS_DATA_HH
--
1.5.6.5