* README.green: Update documentation.
Implement a primary demonstrator with watershed labeling.
* demo/labeling/watershed: New directory.
* demo/labeling/watershed/Makefile.am: New makefile.
* demo/labeling/watershed/watershed.cc: New demo source.
* demo/labeling/watershed/gaussian.sh: New calibrate tools.
Implement a secondary demonstrator with regional maxima labeling.
* demo/labeling/regional_maxima: New directory.
* demo/labeling/regional_maxima/Makefile.am: New makefile.
* demo/labeling/regional_maxima/regional_maxima.cc: New demo source.
* demo/labeling/regional_maxima/threshold.txt: New threshold map file.
Implement the same demonstrator with directory scanning.
* exp/labeling/regional_maxima: New directory.
* exp/labeling/regional_maxima/Makefile.am: New makefile.
* exp/labeling/regional_maxima/regional_maxima.cc: New demo source.
* exp/labeling/regional_maxima/threshold.txt: New threshold map file.
Implement r/g projection.
* mln/display: New directory.
* mln/display/display_histo.hh: New library file.
* mln/display/project_histo.hh: New library file.
Give minimal code for using r/w projection.
* use/display/display_histo: New directory.
* use/display/display_histo/Makefile.am: New Makefile.
* use/display/display_histo/display_histo.cc: New source.
Divide the secondary demonstrator in four binaries in order to test it.
Implement the quantified RGB histogram.
* tools/labeling/histo: New directory.
* tools/labeling/histo/Makefile.am: new makefile.
* tools/labeling/histo/histo.cc: New source.
Filter the quantified RGB histogram by morphological volume attribute.
* tools/labeling/opening: New directory.
* tools/labeling/opening/Makefile.am: New makfile.
* tools/labeling/opening/opening.cc: New source.
Labeling the resulting histogram.
* tools/labeling/regmax: New directory.
* tools/labeling/regmax/Makefile: New directory.
* tools/labeling/regmax/regmax.cc: New source.
Propagate labels in the labeling histogram.
* tools/labeling/iz: New directory.
* tools/labeling/iz/Makefile: New directory.
* tools/labeling/iz/iz.cc: New source.
Import documentation directory.
* doc: New directory.
Import annotating search notes.
* doc/annotating/class.txt: New documentation text file.
* doc/annotating/syntheseMillet.txt: New documentation text file.
* doc/annotating/testMillet2008: New documentation text file.
Import milena learning examples.
* doc/examples: New directory.
* doc/examples/hello_world: New directory.
* doc/examples/hello_world/Makefile.am: New makefile.
* doc/examples/hello_world/hellow_world.cc: New source file.
* doc/examples/hello_world/print.cc: New source file.
* doc/examples/hello_milena: New directory.
* doc/examples/hello_milena/Makefile.am: New makefile.
* doc/examples/hello_milena/hello_milena.cc: New source file.
* doc/examples/learn_milena: New directory.
* doc/examples/learn_milena/Makefile.am: New makefile.
* doc/examples/learn_milena/learn_milena.cc: New source file.
* doc/examples/otsu: New directory.
* doc/examples/otsu/Makefile.am: New makefile.
* doc/examples/otsu/otsu.cc: New source file.
* doc/examples/frac: New directory.
* doc/examples/frac/Makefile.am: New makefile.
* doc/examples/frac/frac.cc: New source file.
* doc/examples/frac/frac.hh: New source file.
* doc/examples/frac/sign_prod.hh: New source file.
* doc/examples/frac/gcd.hh: New source file.
* doc/examples/accu_color: New directory.
* doc/examples/accu_color/accu_color.cc: New source file.
* doc/examples/io: New directory.
* doc/examples/io/Makefile.am: New makefile.
* doc/examples/io/io.cc: New source file.
Write down the basis of the quick tour summary documentation.
* doc/quick_tour: New specific directory.
* doc/quick_tour/quick_tour.tex: New documentation work.
Write down 3d currently used formulaes.
* doc/formulae: New specific directory.
* doc/formulae/formulae.tex: New recipe of 3d formulae.
---
scribo/sandbox/green/ChangeLog | 1083 ++++++++++++++++++++
scribo/sandbox/green/README.green | 346 ++++++-
.../regional_maxima}/Makefile.am | 0
.../labeling/regional_maxima/regional_maxima.cc | 198 ++++
.../demo/labeling/regional_maxima/thresholds.txt | 0
.../kmean1d => labeling/watershed}/Makefile.am | 0
.../green/demo/labeling/watershed}/gaussian.sh | 0
.../green/demo/labeling/watershed/watershed.cc | 360 +++++++
.../sandbox/green/doc/annotating/class.txt | 0
.../green/doc/annotating/syntheseMillet2008.txt | 0
.../sandbox/green/doc/annotating/testMillet2008 | 0
.../green/doc/examples/accu_color/accu_color.cc | 0
.../sandbox/green/doc/examples/frac/Makefile.am | 0
.../sandbox/green/doc/examples/frac/frac.cc | 0
.../sandbox/green/doc/examples/frac/frac.hh | 0
.../sandbox/green/doc/examples/frac/gcd.hh | 0
.../sandbox/green/doc/examples/frac/sign_prod.hh | 0
.../green/doc/examples/hello_milena/Makefile.am | 0
.../doc/examples/hello_milena/hello_milena.cc | 0
.../green/doc/examples/hello_world}/Makefile.am | 0
.../green/doc/examples/hello_world/hello_world.cc | 0
.../green/doc/examples/hello_world/print.cc | 0
.../sandbox/green/doc/examples/io/Makefile.am | 0
.../sandbox/green/doc/examples/io/io.cc | 0
.../green/doc/examples/learn_milena}/Makefile.am | 0
.../doc/examples/learn_milena/learn_milena.cc | 0
.../sandbox/green/doc/examples/otsu}/Makefile.am | 0
.../sandbox/green/doc/examples/otsu/otsu.cc | 0
.../sandbox/green/doc/examples/stats}/Makefile.am | 0
.../sandbox/green/doc/examples/stats/stats.cc | 0
.../sandbox/green/doc/formulae/formulae.tex | 0
.../sandbox/green/doc/quick_tour/quick_tour.tex | 0
.../sandbox/green/exp/regional_maxima/Makefile.am | 153 +++
.../green/exp/regional_maxima/regional_maxima.cc | 196 ++++
.../green/exp}/regional_maxima/thresholds.txt | 0
scribo/sandbox/green/mln/display/display_histo.hh | 149 +++-
scribo/sandbox/green/mln/display/project_histo.hh | 178 +++-
.../sandbox/green/tools/labeling/histo/Makefile.am | 153 +++
scribo/sandbox/green/tools/labeling/histo/histo.cc | 204 ++++
scribo/sandbox/green/tools/labeling/iz/Makefile.am | 153 +++
scribo/sandbox/green/tools/labeling/iz/iz.cc | 495 +++++++++
.../green/tools/labeling/opening/Makefile.am | 153 +++
.../green/tools/labeling/opening/opening.cc | 174 ++++
.../green/tools/labeling/regmax/Makefile.am | 153 +++
.../sandbox/green/tools/labeling/regmax/regmax.cc | 428 ++++++++
.../histo1d => display/display_histo}/Makefile.am | 0
.../use/display/display_histo/display_histo.cc | 86 ++
47 files changed, 4614 insertions(+), 48 deletions(-)
copy scribo/sandbox/green/demo/{clustering/kmean1d =>
labeling/regional_maxima}/Makefile.am (100%)
create mode 100644 scribo/sandbox/green/demo/labeling/regional_maxima/regional_maxima.cc
copy {milena => scribo}/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
(100%)
copy scribo/sandbox/green/demo/{clustering/kmean1d => labeling/watershed}/Makefile.am
(100%)
copy {milena/sandbox/green/tests/accu/stat/histo1d =>
scribo/sandbox/green/demo/labeling/watershed}/gaussian.sh (100%)
create mode 100644 scribo/sandbox/green/demo/labeling/watershed/watershed.cc
copy {milena => scribo}/sandbox/green/doc/annotating/class.txt (100%)
copy {milena => scribo}/sandbox/green/doc/annotating/syntheseMillet2008.txt (100%)
copy {milena => scribo}/sandbox/green/doc/annotating/testMillet2008 (100%)
copy {milena => scribo}/sandbox/green/doc/examples/accu_color/accu_color.cc (100%)
copy {milena => scribo}/sandbox/green/doc/examples/frac/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/frac/frac.cc (100%)
copy {milena => scribo}/sandbox/green/doc/examples/frac/frac.hh (100%)
copy {milena => scribo}/sandbox/green/doc/examples/frac/gcd.hh (100%)
copy {milena => scribo}/sandbox/green/doc/examples/frac/sign_prod.hh (100%)
copy {milena => scribo}/sandbox/green/doc/examples/hello_milena/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/hello_milena/hello_milena.cc
(100%)
copy {milena/sandbox/green/doc/examples/hello_milena =>
scribo/sandbox/green/doc/examples/hello_world}/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/hello_world/hello_world.cc (100%)
copy {milena => scribo}/sandbox/green/doc/examples/hello_world/print.cc (100%)
copy {milena => scribo}/sandbox/green/doc/examples/io/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/io/io.cc (100%)
copy {milena/sandbox/green/doc/examples/hello_milena =>
scribo/sandbox/green/doc/examples/learn_milena}/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/learn_milena/learn_milena.cc
(100%)
copy {milena/sandbox/green/doc/examples/hello_milena =>
scribo/sandbox/green/doc/examples/otsu}/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/otsu/otsu.cc (100%)
copy {milena/sandbox/green/doc/examples/hello_milena =>
scribo/sandbox/green/doc/examples/stats}/Makefile.am (100%)
copy {milena => scribo}/sandbox/green/doc/examples/stats/stats.cc (100%)
copy {milena => scribo}/sandbox/green/doc/formulae/formulae.tex (100%)
copy {milena => scribo}/sandbox/green/doc/quick_tour/quick_tour.tex (100%)
create mode 100644 scribo/sandbox/green/exp/regional_maxima/Makefile.am
create mode 100644 scribo/sandbox/green/exp/regional_maxima/regional_maxima.cc
copy {milena/sandbox/green/demo/labeling =>
scribo/sandbox/green/exp}/regional_maxima/thresholds.txt (100%)
create mode 100644 scribo/sandbox/green/tools/labeling/histo/Makefile.am
create mode 100644 scribo/sandbox/green/tools/labeling/histo/histo.cc
create mode 100644 scribo/sandbox/green/tools/labeling/iz/Makefile.am
create mode 100644 scribo/sandbox/green/tools/labeling/iz/iz.cc
create mode 100644 scribo/sandbox/green/tools/labeling/opening/Makefile.am
create mode 100644 scribo/sandbox/green/tools/labeling/opening/opening.cc
create mode 100644 scribo/sandbox/green/tools/labeling/regmax/Makefile.am
create mode 100644 scribo/sandbox/green/tools/labeling/regmax/regmax.cc
copy scribo/sandbox/green/use/{accu/stat/histo1d => display/display_histo}/Makefile.am
(100%)
create mode 100644 scribo/sandbox/green/use/display/display_histo/display_histo.cc
diff --git a/scribo/sandbox/green/ChangeLog b/scribo/sandbox/green/ChangeLog
index 9e9b7d6..5e4cb27 100644
--- a/scribo/sandbox/green/ChangeLog
+++ b/scribo/sandbox/green/ChangeLog
@@ -1,3 +1,1086 @@
+2010-07-07 Yann Jacquelet <jacquelet(a)lrde.epita.fr>
+
+ Import regional maxima sources from milena green's sandbox.
+
+ * README.green: Update documentation.
+
+ Implement a primary demonstrator with watershed labeling.
+
+ * demo/labeling/watershed: New directory.
+ * demo/labeling/watershed/Makefile.am: New makefile.
+ * demo/labeling/watershed/watershed.cc: New demo source.
+ * demo/labeling/watershed/gaussian.sh: New calibrate tools.
+
+ Implement a secondary demonstrator with regional maxima labeling.
+
+ * demo/labeling/regional_maxima: New directory.
+ * demo/labeling/regional_maxima/Makefile.am: New makefile.
+ * demo/labeling/regional_maxima/regional_maxima.cc: New demo source.
+ * demo/labeling/regional_maxima/threshold.txt: New threshold map file.
+
+ Implement the same demonstrator with directory scanning.
+
+ * exp/labeling/regional_maxima: New directory.
+ * exp/labeling/regional_maxima/Makefile.am: New makefile.
+ * exp/labeling/regional_maxima/regional_maxima.cc: New demo source.
+ * exp/labeling/regional_maxima/threshold.txt: New threshold map file.
+
+ Implement r/g projection.
+
+ * mln/display: New directory.
+ * mln/display/display_histo.hh: New library file.
+ * mln/display/project_histo.hh: New library file.
+
+ Give minimal code for using r/w projection.
+
+ * use/display/display_histo: New directory.
+ * use/display/display_histo/Makefile.am: New Makefile.
+ * use/display/display_histo/display_histo.cc: New source.
+
+ Divide the secondary demonstrator in four binaries in order to test it.
+
+ Implement the quantified RGB histogram.
+
+ * tools/labeling/histo: New directory.
+ * tools/labeling/histo/Makefile.am: new makefile.
+ * tools/labeling/histo/histo.cc: New source.
+
+ Filter the quantified RGB histogram by morphological volume attribute.
+
+ * tools/labeling/opening: New directory.
+ * tools/labeling/opening/Makefile.am: New makfile.
+ * tools/labeling/opening/opening.cc: New source.
+
+ Labeling the resulting histogram.
+
+ * tools/labeling/regmax: New directory.
+ * tools/labeling/regmax/Makefile: New directory.
+ * tools/labeling/regmax/regmax.cc: New source.
+
+ Propagate labels in the labeling histogram.
+
+ * tools/labeling/iz: New directory.
+ * tools/labeling/iz/Makefile: New directory.
+ * tools/labeling/iz/iz.cc: New source.
+
+ Import documentation directory.
+
+ * doc: New directory.
+
+ Import experimentation backups.
+
+ * doc/labeling: New directory.
+
+ * doc/labeling/cmp_methode: New directory.
+ * doc/labeling/cmp_method/h0_input.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h2_mean.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h2_merge.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h3_mean.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h3_merge.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h4_mean.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h4_merge.pgm.gz: New img file
+ * doc/labeling/cmp_method/h5_mean.pgm.gz: New img file.
+ * doc/labeling/cmp_method/h5_merge.pgm.gz: New img file.
+ * doc/labeling/cmp_method/i2_mean.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i2_merge.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i3_mean.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i3_merge.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i4_mean.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i4_merge.ppm.gz: New img file
+ * doc/labeling/cmp_method/i5_mean.ppm.gz: New img file.
+ * doc/labeling/cmp_method/i5_merge.ppm.gz: New img file.
+ * doc/labeling/cmp_method/l2_input.pgm.gz: New img file.
+ * doc/labeling/cmp_method/l3_input.pgm.gz: New img file.
+ * doc/labeling/cmp_method/l4_input.pgm.gz: New img file.
+ * doc/labeling/cmp_method/l5_input.pgm.gz: New img file.
+ * doc/labeling/cmp_method/s2_histo.txt.gz: New txt file.
+ * doc/labeling/cmp_method/s3_histo.txt.gz: New txt file.
+ * doc/labeling/cmp_method/s4_histo.txt.gz: New txt file.
+ * doc/labeling/cmp_method/s5_histo.txt.gz: New txt file.
+ * doc/labeling/cmp_method/reponse_theo.eml.gz: New email.
+ * doc/labeling/cmp_method/synthese.txt.gz: New experiment doc.
+
+ * doc/labeling/cmp_quant: New directory.
+ * doc/labeling/cmp_quant/h0_input.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q2.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q3.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q4.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q5.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q6.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q7.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_mean_q8.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q2.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q3.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q4.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q5.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q6.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q7.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/h5_merge_q8.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q2.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q3.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q4.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q5.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q6.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q7.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_mean_q8.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q2.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q3.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q4.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q5.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q6.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q7.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/i5_merge_q8.ppm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q2.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q3.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q4.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q5.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q6.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q7.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/l5_input_q8.pgm.gz: New img file.
+ * doc/labeling/cmp_quant/s5_histo_q2.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q3.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q4.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q5.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q6.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q7.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/s5_histo_q8.txt.gz: New txt file.
+ * doc/labeling/cmp_quant/synthese.txt.gz: New experiment doc.
+
+ * doc/labeling/mp00411c: New directory.
+ * doc/labeling/mp00411c/colormap_all_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/colormap_all_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/colormap_thick_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/colormap_thick_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/colormap_thin_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/colormap_thin_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/histo_all_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/histo_all_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/histo_thick_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/histo_thick_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/histo_thin_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/histo_thin_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_all_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_all_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_thick_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_thick_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_thin_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/iz_thin_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_all_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_all_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_thick_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_thick_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_thin_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/labeled_thin_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/mean3_all_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean3_all_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean3_thick_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean3_thick_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean3_thin_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean3_thin_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_all_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_all_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_thick_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_thick_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_thin_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mean4_thin_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/mp00411c.ppm.gz: New input file.
+ * doc/labeling/mp00411c/mp00411c_thin.pbm.gz: New gradient mask.
+ * doc/labeling/mp00411c/mp00411c_thick.pbm.gz: New gradient mask.
+ * doc/labeling/mp00411c/mp00411c.sh.gz: New script shell.
+ * doc/labeling/mp00411c/opened_all_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/opened_all_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/opened_thick_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/opened_thick_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/opened_thin_q4.dump.gz: New dump file.
+ * doc/labeling/mp00411c/opened_thin_q5.dump.gz: New dump file.
+ * doc/labeling/mp00411c/proj1_all_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj1_all_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj1_thick_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj1_thick_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj1_thin_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj1_thin_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_all_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_all_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_thick_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_thick_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_thin_q4.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj2_thin_q5.pgm.gz: New pgm file.
+ * doc/labeling/mp00411c/proj3_all_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj3_all_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj3_thick_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj3_thick_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj3_thin_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj3_thin_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_all_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_all_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_thick_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_thick_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_thin_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/proj4_thin_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/quant_q4.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/quant_q5.ppm.gz: New ppm file.
+ * doc/labeling/mp00411c/stat3_all_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat3_all_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat3_thick_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat3_thick_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat3_thin_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat3_thin_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_all_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_all_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_thick_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_thick_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_thin_q4.txt.gz: New txt file.
+ * doc/labeling/mp00411c/stat4_thin_q5.txt.gz: New txt file.
+ * doc/labeling/mp00411c/synthese.txt.gz: New txt file.
+
+ * doc/labeling/mp00307c_bis: New directory.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q4_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_all_q5_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q4_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thin_q5_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q4_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r06f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r06h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r18f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r18h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r26f.txt: New colormap.
+ * doc/labeling/mp00307c_bis/colormap_thick_q5_r26h.txt: New colormap.
+ * doc/labeling/mp00307c_bis/histo_all_q4.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_all_q5.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_all_q8.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thin_q4.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thin_q5.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thin_q8.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thick_q4.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thick_q5.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/histo_thick_q8.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r06h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r18h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q4_r26h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r06h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r18h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_all_q5_r26h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r06h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r18h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q4_r26h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r06h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r18h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26f_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26f_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26f_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26h_i06.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26h_i18.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thin_q5_r26h_i26.dump.gz: New lbl propag.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r06h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r18h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q4_r26h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r06h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r18h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26f_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26f_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26f_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26h_i06.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26h_i18.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/iz_thick_q5_r26h_i26.dump.gz: New lbl prop.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q4_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_all_q5_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q4_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thin_q5_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q4_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r06f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r06h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r18f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r18h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r28f.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/labeled_thick_q5_r28h.dump.gz: New histo.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q4_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_all_q5_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q4_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thin_q5_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q4_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r06f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r06h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r18f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r18h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r26f.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean3_thick_q5_r26h.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r06h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r18h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q4_r26h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r06h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r18h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_all_q5_r26h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r06h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r18h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q4_r26h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r06h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r18h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26f_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26f_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26f_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26h_i06.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26h_i18.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thin_q5_r26h_i26.ppm.gz: New mean img.
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r06h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r18h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q4_r26h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r06h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r18h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26f_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26f_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26f_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26h_i06.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26h_i18.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mean4_thick_q5_r26h_i26.ppm.gz: New mean .
+ * doc/labeling/mp00307c_bis/mp00307c.ppm.gz: New input img.
+ * doc/labeling/mp00307c_bis/mp00307c.sh.gz: New script shell.
+ * doc/labeling/mp00307c_bis/mp00307c_thick.pgm.gz: New mask.
+ * doc/labeling/mp00307c_bis/mp00307c_thin.pgm.gz: New mask.
+ * doc/labeling/mp00307c_bis/opened_all_q4.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_all_q5.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_all_q8.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thin_q4.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thin_q5.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thin_q8.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thick_q4.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thick_q5.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/opened_thick_q8.dump.gz: New filtered histo.
+ * doc/labeling/mp00307c_bis/proj1_all_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_all_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_all_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_all_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_all_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_all_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thin_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj1_thick_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_all_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thin_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q4.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q4.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q5.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q5.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q8.pgm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj2_thick_q8.ppm.gz: New r/g projection.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q4_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_all_q5_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q4_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thin_q5_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q4_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r06f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r06h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r18f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r18h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r26f.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj3_thick_q5_r26h.ppm.gz: New r/g proj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q4_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_all_q5_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q4_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thin_q5_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q4_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r06h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r18h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26f_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26f_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26f_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26h_i06.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26h_i18.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/proj4_thick_q5_r26h_i26.ppm.gz: New rg prj.
+ * doc/labeling/mp00307c_bis/quant_q4.ppm.gz: New quantified img.
+ * doc/labeling/mp00307c_bis/quant_q5.ppm.gz: New quantified img.
+ * doc/labeling/mp00307c_bis/quant_q8.ppm.gz: New quantified img.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q4_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_all_q5_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q4_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thin_q5_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q4_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r06f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r06h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r18f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r18h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r26f.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats3_thick_q5_r26h.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q4_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_all_q5_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q4_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thin_q5_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q4_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r06h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r18h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26f_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26f_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26f_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26h_i06.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26h_i18.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/stats4_thick_q5_r26h_i26.ppm.gz: New stats.
+ * doc/labeling/mp00307c_bis/synthese.txt.gz: New synthesis file.
+
+
+ * doc/labeling/mp00042c: New directory.
+ * doc/labeling/mp00042c/histo_all.dump.gz: New histo.
+ * doc/labeling/mp00042c/histo_thick.dump.gz: New histo.
+ * doc/labeling/mp00042c/histo_thin.dump.gz: New histo.
+ * doc/labeling/mp00042c/labeled_all.dump.gz: New labeled histo.
+ * doc/labeling/mp00042c/labeled_thick.dump.gz: New labeled histo.
+ * doc/labeling/mp00042c/labeled_thin.dump.gz: New labeled histo.
+ * doc/labeling/mp00042c/mean_all.dump.gz: New mean img.
+ * doc/labeling/mp00042c/mean_thin.dump.gz: New mean img.
+ * doc/labeling/mp00042c/mean_thick.dump.gz: New mean img.
+ * doc/labeling/mp00042c/mp00042c.ppm.gz: New input img.
+ * doc/labeling/mp00042c/mp00042c.sh.gz: New script shell.
+ * doc/labeling/mp00042c/mp00042c_thick.gz: New mask.
+ * doc/labeling/mp00042c/mp00042c_thin.gz: New mask.
+ * doc/labeling/mp00042c/opened_all.gz: New filtered histo.
+ * doc/labeling/mp00042c/opened_thin.gz: New filtered histo.
+ * doc/labeling/mp00042c/opened_thick.gz: New filtered histo.
+ * doc/labeling/mp00042c/pal_all.gz: New colormap.
+ * doc/labeling/mp00042c/pal_thin.gz: New colormap.
+ * doc/labeling/mp00042c/pal_thick.gz: New colormap.
+ * doc/labeling/mp00042c/proj1.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj2.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj3.ppm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj2_all.pgm.gz: New r/g projection
+ * doc/labeling/mp00042c/proj2_thin.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj2_thick.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj3_all.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj3_thin.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj3_thick.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj_all.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj_thick.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/proj_thin.pgm.gz: New r/g projection.
+ * doc/labeling/mp00042c/quant.ppm.gz: New quantified img.
+
+ * doc/labeling/mp00307c: New directory.
+ * doc/labeling/mp00307c/colormap_all.txt.tgz: New colormap.
+ * doc/labeling/mp00307c/colormap_thin.txt.tgz: New colormap.
+ * doc/labeling/mp00307c/colormap_thick.txt.tgz: New colormap.
+ * doc/labeling/mp00307c/histo_all.dump.tgz: New histo.
+ * doc/labeling/mp00307c/histo_thin.dump.tgz: New histo.
+ * doc/labeling/mp00307c/histo_thick.dump.tgz: New histo.
+ * doc/labeling/mp00307c/iz_all.dump.tgz: New label propagation..
+ * doc/labeling/mp00307c/iz_thick.dump.tgz: New label propagation..
+ * doc/labeling/mp00307c/labeled_all.dump.tgz: New label histo.
+ * doc/labeling/mp00307c/labeled_thin.dump.tgz: New label histo.
+ * doc/labeling/mp00307c/labeled_thick.dump.tgz: New label histo.
+ * doc/labeling/mp00307c/mean3_all.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mean3_thin.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mean3_thick.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mean4_all.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mean4_thin.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mean4_thick.ppm.tgz: New mean img.
+ * doc/labeling/mp00307c/mp00307.ppm.tgz: New input img.
+ * doc/labeling/mp00307c/mp00307.sh.tgz: New script shell.
+ * doc/labeling/mp00307c/mp00307_thin.pbm.tgz: New mask.
+ * doc/labeling/mp00307c/mp00307_thick.pbm.tgz: New mask.
+ * doc/labeling/mp00307c/opened_all.dump.tgz: New filtered img.
+ * doc/labeling/mp00307c/opened_thin.dump.tgz: New filtered img.
+ * doc/labeling/mp00307c/opened_thick.dump.tgz: New filtered img.
+ * doc/labeling/mp00307c/proj1_all.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj1_all.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj1_thin.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj1_thin.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj1_thick.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj1_thick.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_all.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_all.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_thin.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_thin.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_thick.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj2_thick.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_all.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_all.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_thin.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_thin.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_thick.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj3_thick.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_all.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_all.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_thin.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_thin.ppm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_thick.pgm.tgz: New r/g projection.
+ * doc/labeling/mp00307c/proj4_thick.ppm.tgz: New r/g projection
+ * doc/labeling/mp00307c/quant.ppm.tgz: New quantified img
+ * doc/labeling/mp00307c/stats3_all.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/stats3_thin.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/stats3_thick.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/stats4_all.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/stats4_thin.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/stats4_thick.txt.tgz: New stats file.
+ * doc/labeling/mp00307c/synthese.txt.tgz: New synthesis file.
+
+ Import materials for next tests.
+
+ * doc/labeling/mp00215c: New directory.
+ * doc/labeling/mp00215c/mp00215c.ppm.gz: New color input img.
+ * doc/labeling/mp00215c/mp00215c_thick.pbm.gz: New thick mask.
+ * doc/labeling/mp00215c/mp00215c_thin.pbm.gz: New thin mask.
+
+ * doc/labeling/mp00234c: New directory.
+ * doc/labeling/mp00234c/mp00234c.ppm.gz: New color input img.
+ * doc/labeling/mp00234c/mp00234c_thick.pbm.gz: New thick mask.
+ * doc/labeling/mp00234c/mp00234c_thin.pbm.gz: New thin mask.
+
+ * doc/labeling/mp00248c: New directory.
+ * doc/labeling/mp00248c/mp00248c.ppm.gz: New color input img.
+ * doc/labeling/mp00248c/mp00248c_thick.pbm.gz: New thick mask.
+ * doc/labeling/mp00248c/mp00248c_thin.pbm.gz: New thin mask.
+
+ * doc/labeling/mp00031c: New directory.
+ * doc/labeling/mp00031c/mp00031c.ppm.gz: New color input img.
+ * doc/labeling/mp00031c/mp00031c_thick.pbm.gz: New thick mask.
+ * doc/labeling/mp00031c/mp00031c_thin.pbm.gz: New thin mask.
+
+ * doc/labeling/mp00083c: New directory.
+ * doc/labeling/mp00083c/mp00083c.ppm.gz: New color input img.
+ * doc/labeling/mp00083c/mp00083c_thick.pbm.gz: New thick mask.
+ * doc/labeling/mp00083c/mp00083c_thin.pbm.gz: New thin mask.
+
+ Import annotating search notes.
+
+ * doc/annotating/class.txt: New documentation text file.
+ * doc/annotating/syntheseMillet.txt: New documentation text file.
+ * doc/annotating/testMillet2008: New documentation text file.
+
+ Import milena learning examples.
+
+ * doc/examples: New directory.
+
+ * doc/examples/hello_world: New directory.
+ * doc/examples/hello_world/Makefile.am: New makefile.
+ * doc/examples/hello_world/hellow_world.cc: New source file.
+ * doc/examples/hello_world/print.cc: New source file.
+
+ * doc/examples/hello_milena: New directory.
+ * doc/examples/hello_milena/Makefile.am: New makefile.
+ * doc/examples/hello_milena/hello_milena.cc: New source file.
+
+ * doc/examples/learn_milena: New directory.
+ * doc/examples/learn_milena/Makefile.am: New makefile.
+ * doc/examples/learn_milena/learn_milena.cc: New source file.
+
+ * doc/examples/otsu: New directory.
+ * doc/examples/otsu/Makefile.am: New makefile.
+ * doc/examples/otsu/otsu.cc: New source file.
+
+ * doc/examples/frac: New directory.
+ * doc/examples/frac/Makefile.am: New makefile.
+ * doc/examples/frac/frac.cc: New source file.
+ * doc/examples/frac/frac.hh: New source file.
+ * doc/examples/frac/sign_prod.hh: New source file.
+ * doc/examples/frac/gcd.hh: New source file.
+
+ * doc/examples/accu_color: New directory.
+ * doc/examples/accu_color/accu_color.cc: New source file.
+
+ * doc/examples/io: New directory.
+ * doc/examples/io/Makefile.am: New makefile.
+ * doc/examples/io/io.cc: New source file.
+
+ Write down the basis of the quick tour summary documentation.
+
+ * doc/quick_tour: New specific directory.
+ * doc/quick_tour/quick_tour.tex: New documentation work.
+
+ Write down 3d currently used formulaes.
+
+ * doc/formulae: New specific directory.
+ * doc/formulae/formulae.tex: New recipe of 3d formulae.
+
+
2010-06-30 Yann Jacquelet <jacquelet(a)lrde.epita.fr>
Add some futur materials on regional maxima.
diff --git a/scribo/sandbox/green/README.green b/scribo/sandbox/green/README.green
index 02d8654..7886914 100644
--- a/scribo/sandbox/green/README.green
+++ b/scribo/sandbox/green/README.green
@@ -236,13 +236,94 @@ n'importe quel algorithme type huffman (tous les archiveurs en
possède un).
VIII VISUALISATION HISTOGRAMMES 3D
----------------------------------
-==> to do
-
-
-* demo/accu/stat/histo2d
-
-* mln/display/dispay_histo.hh
-* mln/display/project_histo.hh
+Les histogrammes sur lesquels nous sommes amenés à travailler sont en
+3d. Nous étudions des images couleurs dans l'espace RGB, donc
+l'histogramme dans cet espace possède 3 dimensions (une par axe, R, G
+et B) et la cellule désignée par cette position RGB renfermera le nombre
+de pixels de l'image ayant exactement cette couleur. Il est très
+difficile de bien visualiser ces images, car elles sont en 3d. Gnuplot
+nous donne qu'une aide très limitée, car il faut afficher 3 axes et la
+force de la cellule, ce qui fait en fait quatre informations Ã
+afficher. Il est possible de jouer avec les couleurs, mais il n'y a
+pas de représentation très utile, on peut afficher le nuage des
+couleurs pour percevoir sa forme générale, mais l'interprétation ne
+peut pas vraiment aller plus loin. C'est pourquoi, nous proposons une
+représentation plus pertinente. C'est Théo qui a roulé sa bosse en
+classification qui a developpé ce genre de technique, je ne fais que
+réutilliser les mêmes analyses en beaucoup moins fins que ce qu'il a
+déjà pu développer par ailleurs.
+
+La première idée est de gommer une dimension, et c'est possible de le
+faire car dans une image RGB, souvent l'axe bleu est fortement
+correllé avec l'axe vert. Cela dépend beaucoup de la formation des
+images et pour des images synthétiques, il n'y a aucune raison que
+ce soit le cas. C'est juste une propriété qui s'applique pour les
+images naturelles. La forte corrélation obtenue ne veut pas dire qu'il
+y a exactement les mêmes informations, juste que dans l'ensemble on
+note une relative redondance (du point de vue statistique). Pour t'en
+convaincre, tu peux regarder sous gimp, les histogrammes sur les
+différents canaux et tu observeras qu'il y a deux canaux (le vert et
+bleu) pour lesquels les histogrammes sont presque identiques.
+
+La dernière étape est de réaliser un traitement sur la dimension qui a
+été supprimée. Par exemple, sommer toutes les valeurs rencontrées ou
+ne retenir que la valeur max ...
+
+Le fichier display_histo.hh joue le rôle de front hand pour les
+routines de visualisation. Il a pour rôle d'initialiser, d'instancier,
+de coordonner la chaine de visualisation. Le fichier project_histo.hh
+décrit les algorithmes au coeur de la visualisation, comment est
+construite concrêtement l'information que l'on visualise à la fin.
+
+Nous avons construit 3 sortes de projecteurs. Le premier va sommer le
+long de l'axe bleu les différentes informations
+rencontrées. Globalement, cela signifie, que plus il y a de pixels
+dans le sous espace (red=v1,green=v2) avec pour chaque pixel
+rencontrés des valeurs de bleu différentes, plus le nombre construit
+sera grand. Sur cette information, on fera passer un logarithme pour
+diminuer les pics et ne faire ressortir visuellement que les
+informations les plus saillantes. En dernier lieu, on rescalera les
+valeurs obtenues pour utiliser pleinement la dynamique d'une image de
+256 niveaux de gris. La visualisation obtenue nous donne un aperçu de
+la densité de l'espace des couleurs. On observera en très lumineux les
+endroits de forte population de couleurs et en presque noir l'absence
+de couleur dans l'image pour cette portion de l'espace RGB.
+
+Les autres techniques de visualisation sont des variantes du même
+traitement que nous allons decrire. La chaine de base consiste Ã
+parcourir la dimension bleu pour chaque point de l'espace rouge/vert
+(comme dans la première technique). Cette fois-ci, ce n'est plus la
+somme qui nous intéresse, mais la couleur la plus représentée. On va
+faire un max des valeurs obtenues en parcourant l'axe bleu. Une
+première version rapportera la position bleue qui rassemble le plus de
+pixels. Une seconde version remplacera cette position bleue par un
+label associé à une segmentation déjà effectuée dans cet espace.
+
+La dernière technique modifie la version précédente de la manière
+suivante: Nous sommes toujours interessé par le max, mais on va remplacer
+cette information directement par la couleur reconstituée (nous sommes
+sur un point particulier de l'espace red/green donc red et green sont
+connus, et on vient d'obtenir la valeur bleue la plus représentée, on
+utilisera cette valeur pour former une couleur RGB). A l'issu du
+processus, on obtient donc une image couleur. L'information obtenue
+ici, n'est plus la densité de l'histogramme, mais plutôt la couleur la
+plus représentée à cet endroit. La toute première technique et celle-ci
+sont complémentaires pour la bonne visualisation d'un histogramme
+3d. Si l'on dispose d'une segmentation de l'espace des couleurs, on
+peut trouver le label associé au bleu prédominant et récupérer dans
+une palette de couleur annexe la couleur associée au label.
+
+* mln/display/dispay_histo.hh: Front hand pour les routines de projection.
+* mln/display/project_histo.hh: Les algorithmes de visualisations.
+
+Le travail dans use ne représente que deux routines sur six de
+display_histo. Par manque de temps, je ne fais pas le reste de
+manière à insister sur d'autres points documentaires plus
+importants. Le cadre est en place et les autres routines plus
+sophistiquées faisant intervenir la segmentation de l'histogramme
+peuvent être tirées de tools/labeling/regmax par exemple.
+
+* use/display/display_histo: Visualisations des histogrammes.
IX KMEANS
@@ -388,29 +469,266 @@ tests effectués et montrent l'évolution du temps de calcul
suivant la
progression du paramètre observé (taille de l'image ou nombre de
centres).
-==> to do : le changelog + commit + give it to scribo-z branch
-
X REGIONAL MAXIMA
-----------------
-==> to do
+Pour cette partie, le temps a commencé à s'accélérer, ce qui fait
+qu'il n'y a plus de tests unitaires. Par ailleurs, comme la
+fonctionnalité n'a pas été pensée comme un élément de la librairie, il
+n'y a donc pas non plus de répertoire "use" à cet effet.
+
+
+a) Segmentation basé sur le watershed
+
+Cet exemple essaye une première méthode de filtrage de
+l'histogramme. A noter elle ne compile pas. Elle eu compilé dans le
+temps, mais le source a été tellement remanié que sa reconstruction
+doit régler encore quelques détails. Sa compilation n'a pas vraiment
+d'intérêt en soi, seule la démarche compte ici. Le temps me manque et
+je ne persisterais pas à essayer de le faire compiler à tout prix. D'autres
+sources sont beaucoup plus intéressant. Nota, gaussian.sh est un gnuplot
+script shell qui sert à calibrer le filtrage de l'histogramme. Il permet
+de déterminer visuellement la taille de la fenêtre win utilisée lors de la
+convolution en fonction d'un écart type sigma donné.
+
+* demo/labeling/watershed: Demonstrator de la segmentation d'un histogramme.
+
+
+b) Second essai avec les regional_maxima
+
+Le programme actuel ne compile pas non plus. Il n'est pas d'une grande
+importance, alors du coup je le laisse tel quel. Il a servi a
+plusieurs choses, en premier à tester les regional_maxima mais en
+dernier lieu surtout à tester le filtrage par attribut (volume) qui
+semblait avoir quelques soucis. A l'heure d'aujourd'hui, je ne peux
+toujours pas dire s'il fonctionne convenablement ou non, il semble que
+parfois des anomalies se produisent à ce niveau, mais elles peuvent
+aussi bien être générées par un problème interne à mon programme.
+
+* demo/labeling/regional_maxima: Testeur du filtrage par attribut de volume.
+
+
+c) Déplacement du programme b) dans exp.
+
+Même programme que b) mais qui compile.
+
+* exp/labeling/regional_maxima: Testeur du filtrage par attribut de volume.
+
+
+d) Sources importantes ==> regional_maxima
+
+Il y avait une autre version des regional_maxima ou toute la chaine était
+présente, si j'avais davantage de temps, je l'aurais réecrite. Il semble
+qu'elle se soit perdue lors de la migration de SVN vers GIT. Aucune importance.
+Les outils "up to date" sont ceux dont les sources sont dans tools. La classe
+outil représente des binaires un peu plus travaillé au niveau de l'interface
+texte, en gros ils prennent plein de paramètres et génèrent des résultats
+intermédiaires. Chaque outil à son usage ...
+
+
+Ce qu'il faut savoir sur l'outil histo. Tout d'abord le programme
+prend 7 ou 8 arguments et c'est le dernier qui est optionnel. Les
+arguments sont l'image couleur à partir de laquelle on veut extraire
+l'histogramme couleur (3d), le degré de quantification que l'on veut
+utiliser (sous échantillonnnage de l'image), le chemin de l'image
+couleur quantifiée résultante après analyse, le chemin de
+l'histogramme produit (réutilisé par les autres outils), la
+visualisation rouge/verte de l'histogramme (brute) et la visualisation
+augmentée de ce même histogramme avec les maxima dessus. Se reporter Ã
+la documentation des histogrammes pour avoir plus d'information sur ce
+sujet. Le dernier paramètre optionnel est un masque à appliquer sur
+les pixels de l'image d'entrée. La chaine de traitement de l'outil,
+commence par sous échantillonner l'image en n bits, n < 8, puis
+construit l'histogramme 3d à partir des pixels présents dans le masque,
+si ce dernier existe et enfin sauvegarde des résultats et des images
+servant à la visualisation.
+
+* tools/labeling/histo: Construction de l'histogramme.
+
+
+Ce qu'il faut savoir sur l'outil de filtrage de l'histogramme. Tout
+d'abord, il prend en paramètre 6 arguments obligatoires. Les arguments
+sont la quantification utilisée par l'outil de création de
+l'histogramme, le chemin de l'histogramme à filtrer, le seuil utilisé
+pour le filtrage (c'est le volume minimal en dessous duquel
+l'information est jugée comme du bruit et donc ne doit pas passer), le
+chemin de l'histogramme filtré, le chemin de la projection en densité
+de l'histogramme et le chemin de la projection en couleurs
+majoritaires de l'histogramme. Se reporter au chapitre sur la
+visualisation pour comprendre les différentes projections. Le filtrage
+est un traitement très simple, il applique uniquement l'algorithme
+morphologique d'ouverture sur les attributs de volume. Imagine un
+histogramme en 1d, l'attribut de volume est alors la surface sous la
+courbe de l'histogramme. Une ouverture volumique consiste à supprimer
+tous les pics ayant un volume inférieur au seuil. Cela fonctionne très
+bien en général, toutefois, il y a des cas où les informations
+retournées ne sont pas celles attendues. Concrêtement, des composantes
+de volume inférieur au seuil sont retrouvées plus loin dans la chaine
+de traitement, ce qui contredit l'usage de l'ouverture
+morphologique. Il est difficile de définir ce qui se passe vraiment,
+il est possible qu'il y ait un bug ou simplement que le reste de ma
+chaine induise quelque fois ce résultat étrange. Honnêtement, je ne
+sais pas ce qui se passe. Le cas n'arrive pas fréquemment, donc il est
+très difficile d'isoler l'erreur.
+
+* tools/labeling/opening: Filtrage de l'histogramme.
+
+
+Ce qu'il faut savoir sur l'outil de labellisation. Tout d'abord, il
+prend 11 arguments dont le dernier est optionel. Les arguments sont
+l'image originale (nécessaire pour calculer la couleur moyenne des
+labels ==> réalité augmentée), la quantification utilisée
+précédemment, l'image préalablement quantifiée, l'histogramme
+original, l'histogramme filtré, le voisinage sur lequel effectué les
+opérations (c6, c18 ou c26), l'histogramme segmenté en 3d, la
+projection red/green associée, la colormap, l'image reconstruite des
+moyennes associé à chaque label et éventuellement un fichier décrivant
+les statistiques associés aux labels (couleur moyenne associé au
+label, plus nombre de pixels concernés dans l'image, plus pourcentage
+absolu et pourcentage sans tenir compte du fond). Le seul appel
+intéressant est la labellisation de l'histogramme filtré qui produit
+une image 3d de label. Tout le reste est de la tuyauterie pour faire
+de la rélatité augmentée. Par exemple pour formée l'image des moyennes
+associées à chaque label, il est nécessaire de construire l'image 2d
+des labels qui fait intervenir elle-même l'image d'entrée quantifiée
+et l'image originale. Idem pour la construction de la
+colormap. L'outil segmente l'histogramme filtré par la détermination
+des maxima régionnaux, autrement dit des zones de très fortes
+densités. Ces zones sont en général très petites, quelques pixels pas
+plus. C'est pourquoi l'outil suivant va nous servir à les étendre un
+peu.
+
+* tools/labeling/regmax: Segmentation de l'histogramme.
+
+
+Petite suprise désagréable, l'outil iz ne compile plus. La raison en
+est toute simple, il y a eu du mouvement dans les fonctions
+mln::transform::influence_zone_geodesic(). Un revamp un peu violent,
+avec une version
+mln::transform::influence_zone_geodesic_saturated(). J'ai corrigé le
+changement d'appel, mais cela ne suffit pas. Dans la méthode
+mln::transform::influence_zone_geodesic_fastest(), l.127, tu utilises
+la méthode at() pour une image 2d et là pas de chance, moi j'utilise
+cet algorithme pour une image de labels 3d (nous sommes dans un espace
+RGB quantifié en n bits, n < 8). Je ne veux surtout rien détruire dans
+scribo, donc je te laisse effectuer les changements qui s'imposent et
+je continue la documentation.
+
+Ce qu'il faut savoir sur iz. Tout d'abord cette routine prend 12
+arguments dont le dernier est optionel. Les arguments sont
+l'histogramme labelisé par l'outil précédent, la profondeur utilisée
+pour l'influence par zone géodésique (0 signifie l'infini), puis vient
+le voisinage 3d utilisé pour la propagation, puis l'image initiale,
+puis le degrée de quantification utilisé par tous les outils, puis le
+dump de l'histogramme, la colormap (utilisée pour la projection r/g
+avec segmentation, puis l'histogramme labelisé après propagation nommé
+iz et enfin la projection r/g, l'image reconstruite à l'aide des
+moyennes des classes et le fichier de statistiques intégrant la
+propagation des classes. La propagation a pour vocation d'agrandir les
+classes obtenues jusqu'Ã maintenant. C'est une information que l'on
+voit bien avec les changements dans les projections r/g.
+
+* tools/labeling/iz: Propagation des classes par zone d'influence.
+
+
+Comme le paramétrage est difficile, il est conseillé de relire les
+scripts des jeux de tests qui coordonnent l'appel de ces routines avec
+une sucession de paramètres cohérents. Je sais ce que tu vas me dire,
+c'est mal, il ne faut pas mettre d'images sur le dépot git. Dans
+l'absolu, je suis d'accord, mais aujourd'hui, le code iz est cassé et
+rejouer ces tests peut prendre énormément de temps, donc par facilité,
+je me contente des résultats que j'avais archivé et que tu seras
+content de trouver pour en inclure une partie dans ton rapport.
+
+Tout d'abord un jeu de répertoire de test en instance d'être lancé. Le
+répertoire porte le nom de l'image sur laquelle est effectué le
+test. On y trouvera l'image originale pleine résolution, et les deux
+masques de gradient fin et un peu plus épais. Pour faire le test, il
+suffit d'écrire le script comme dans doc/labeling/mp00307.
+
+* doc/labeling/mp00215c
+* doc/labeling/mp00234c
+* doc/labeling/mp00248c
+* doc/labeling/ta00031c
+* doc/labeling/ta00083c
+
+
+Puis, nous avons les tous premiers tests qui ont servi pour déterminer
+la quantification à utiliser et la méthode de propagation (infinie ou
+saturée). Il y a longtemps, pour ces tests, je disposais d'une chaine
+complète mais cette dernière c'est perdu dans la migration entre svn
+et git. Il n'y a donc pas de script shell qui lance les outils, par
+contre il existe un fichier de synthese qui explique exactement ce qui
+a avait été lancé et avec quels paramètres, histoire de pouvoir rejouer le test.
+
+* doc/labeling/cmp_method: Test sur le type de propagation à utiliser.
+* doc/labelling/cmp_quant: Test sur la quantification a utiliser.
+
+
+Puis, nous avons les tests effectués à l'aide d'un script. Lire les
+scripts pour situer correctement les binaires outils utilisés. Le
+premier jeu test avait pour but d'étudier la combinatoire des options
+et de choisir ensuite les paramètres qui vont bien. Il n'y a pas de
+certitude complète en la matière. Lire attentivement le fichier
+synthèse. Tout ces éléments ont été validés par théo. Je ne me rapelle
+plus du détail, mais j'ai rédigé tout ce que je pouvais. Le dernier
+répertoire n'a pas de fichier synthèse, je pense que l'étude était du
+même gabarit que le test précédent. J'en étais à tester la routine sur
+un maximum d'images pour voir si le jeu réduit de couleurs obtenues
+correspondait à nos attentes ou non. Les paramètres stables sont Ã
+rechercher dans les derniers répertoires mp00042c et mp00307c.
+
+* doc/labeling/mp00307c_bis: Test sur un grand nombre de combinaisons.
+* doc/labeling/mp00411c: Test sur l'altération des statistiques.
+* doc/labeling/mp00042c: Test sur la representativité des couleurs trouvées.
+* doc/labeling/mp00307c: Test sur la representativité des couleurs trouvées.
+
+
+Faire le changelog, il y a de l'aide dans git/doc/Changelog
+... et commiter
XI ANNOTATING
--------------
+--------------
==> to do
-a) La sauvegarde des images au format gnuplot shell
-* mln/io/plot/save_image_sh.hh: Librairie sauvegarde format gnuplot shell.
+* doc/annotating
+
+
-to do ...
+XI AUTRES ASPECTS DOCUMENTAIRES
+-------------------------------
+Ces exemples de codes sont livrés tels quels sans aucune documentation
+de ma part. Si tu as besoin de quelque chose, sert toi, tu les
+remanieras à ta sauce. Il n'y a pas de raison de les documenter, se
+serait disperser mes efforts vainement.
+* doc/examples/accu_color: Petit programme pour se bidouiller avec la couleur.
+* doc/examples/frac: Librairie pour manipuler des fractions sous milena.
+* doc/examples/hello_milena: Petit exemple allant avec la doc de milena.
+* doc/examples/hello_world: Test de la plateforme c++.
+* doc/examples/io: Rien de vraiment intéressant dans l'état actuel.
+* doc/examples/learn_milena: Autre exemple de base avec milena.
+* doc/examples/otsu: Petit programme Otsu.
+* doc/examples/stats: Exemple de manipulation d'accumulateurs.
+Voici deux exemples sous LaTex. Un jeu de test avec la confection de
+vecteur et de matrices pour relater les forrmules connues en espace
+3d. La version actuelle est dégradée par rapport à ce que j'avais pu
+écrire. J'étais arrivé à la mise au point d'un extracteur de valeurs
+propres mais je n'ai jamais pu retrouver cette version là , surement
+une erreur sous svn. Le second document devait présenter la
+documentation quick tour sous milena, mais j'avoue que c'est un
+lamentable échec, je n'ai pas pris le temps de le faire. Je pense que
+l'idée d'une documentation collaborative permettrait de répartir
+l'effort.
+* doc/formulae: LaTex directory.
+* doc/quick_tour: LaTex directory.
diff --git a/scribo/sandbox/green/demo/clustering/kmean1d/Makefile.am
b/scribo/sandbox/green/demo/labeling/regional_maxima/Makefile.am
similarity index 100%
copy from scribo/sandbox/green/demo/clustering/kmean1d/Makefile.am
copy to scribo/sandbox/green/demo/labeling/regional_maxima/Makefile.am
diff --git a/scribo/sandbox/green/demo/labeling/regional_maxima/regional_maxima.cc
b/scribo/sandbox/green/demo/labeling/regional_maxima/regional_maxima.cc
new file mode 100644
index 0000000..d0c524b
--- /dev/null
+++ b/scribo/sandbox/green/demo/labeling/regional_maxima/regional_maxima.cc
@@ -0,0 +1,198 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// This demonstrator is aimed to experiment the regional maxima
+/// method. regional_maxima.It first test the 3d histogram from an
+/// image and the number of colors which results. And in fact, doesn't
+/// use the regional_maxima routine. Too many parameters must be fixed
+/// and parts of the code has been commented. The last action of this
+/// program consists in counting the number of colors of each image in a
+/// directory. This source has been used to test the annotating image base.
+///
+/// \fixme At this time, the source is in a transitional step. It doesn't
+/// compile, something wrong with boost library. It doesn't matter, that's not
+/// an important file.
+
+
+#include <iostream>
+#include <sstream>
+#include <boost/filesystem.hpp>
+
+#include <mln/img_path.hh>
+
+#include <mln/accu/math/sum.hh>
+#include <mln/accu/math/count.hh>
+#include <mln/accu/stat/histo3d_rgb.hh>
+#include <mln/accu/stat/mean.hh>
+#include <mln/accu/stat/variance.hh>
+
+#include <mln/algebra/vec.hh>
+
+#include <mln/arith/diff_abs.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/alias/neighb3d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+#include <mln/core/image/dmorph/image_if.hh>
+#include <mln/core/routine/initialize.hh>
+
+#include <mln/data/compute.hh>
+#include <mln/data/fill.hh>
+#include <mln/data/transform.hh>
+
+#include <mln/fun/v2v/rgb8_to_rgbn.hh>
+
+#include <mln/io/pgm/load.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/ppm/save.hh>
+
+#include <mln/labeling/regional_maxima.hh>
+#include <mln/labeling/mean_values.hh>
+#include <mln/labeling/compute.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/morpho/opening/volume.hh>
+#include <mln/morpho/elementary/dilation.hh>
+
+#include <mln/opt/at.hh>
+
+#include <mln/pw/cst.hh>
+
+#include <mln/util/array.hh>
+#include <mln/util/timer.hh>
+
+#include <mln/value/label_8.hh>
+#include <mln/value/rgb8.hh>
+#include <mln/value/rgb.hh>
+#include <mln/value/int_u.hh>
+
+
+/// \brief This is the count method.
+///
+/// \param[in] image the colored image.
+///
+/// This function loads a color image (ppm) and count the colors after
+/// using the min volume processing on the 3d histogram. Percentage
+/// thresholding is in test. The file threshold.txt establishes the link
+/// between percentage and size in image.
+///
+// n < 8, n is the degree of quantification
+template <unsigned n>
+unsigned count_image_color(const std::string& image)
+{
+ typedef mln::value::label_8 t_lbl8;
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::image3d<t_lbl8> t_image3d_lbl8;
+ typedef mln::image2d<t_lbl8> t_image2d_lbl8;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::image2d<unsigned> t_histo2d;
+ typedef mln::fun::v2v::rgb8_to_rgbn<n> t_rgb8_to_rgbn;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+ typedef mln::accu::meta::math::count t_count_fun;
+
+ t_image2d_rgb8 input_rgb8;
+ t_image2d_rgbn input_rgbn;
+ t_image2d_rgbn output_rgbn;
+ t_histo3d histo;
+ t_histo3d opened;
+ t_image3d_lbl8 label;
+ t_image2d_lbl8 label_img;
+ t_image3d_lbl8 dilated;
+ t_lbl8 n_labels;
+
+ mln::io::ppm::load(input_rgb8, image.c_str());
+
+ unsigned nb_pixel = input_rgb8.ncols() * input_rgb8.nrows();
+ unsigned min_volume = (unsigned)(nb_pixel * 0.054);
+
+ input_rgbn = mln::data::transform(input_rgb8, t_rgb8_to_rgbn());
+ histo = mln::data::compute(t_histo3d_fun(), input_rgbn);
+ return mln::data::compute(t_count_fun(), histo);
+
+ // return nb_pixel;
+ // opened = mln::morpho::opening::volume(histo, mln::c6(), min_volume);
+ // label = mln::labeling::regional_maxima(opened, mln::c6(), n_labels);
+ // return n_labels;
+}
+
+/// \brief The main function aimed at looping over the whole directory.
+///
+/// The main function is used to take care of file part in this
+/// sofware. It manages the directory scanning aspect while the last
+/// function does the image processing aspect. Statistics are
+/// generated (mean and variance) about the number of colors after using
+/// the min_volume routine. Some strange things happens with that routine
+/// sometimes.
+int main()
+{
+ typedef boost::filesystem::path t_path;
+ //typedef boost::filesystem::initial_path<t_path()> t_init_path;
+ typedef boost::filesystem::directory_iterator t_iter_path;
+
+ t_path full_path(ANNOTATING_1_TYPED_IMG_PATH);
+
+ std::cout << "entering " << full_path << std::endl;
+
+ if (//1 < argc &&
+ boost::filesystem::exists(full_path) &&
+ boost::filesystem::is_directory(full_path))
+ {
+ boost::filesystem::system_complete(full_path);
+ const t_iter_path end_iter;
+ unsigned count = 0;
+ unsigned sum1 = 0;
+ unsigned sum2 = 0;
+
+ for (t_iter_path dir_iter(full_path); end_iter != dir_iter; ++dir_iter)
+ {
+ unsigned val = count_image_color<5>(dir_iter->path().string());
+
+ ++count;
+ sum1 += val;
+ sum2 += val*val;
+
+ std::cout << dir_iter->path().string() << " => "
<< val << std::endl;
+ }
+
+ unsigned mean = sum1 / count;
+ unsigned var = sum2 / count - mean * mean;
+
+ std::cout << "mean : " << mean << std::endl;
+ std::cout << "var : " << var << std::endl;
+ }
+
+ return 0;
+}
+
diff --git a/milena/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
b/scribo/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
similarity index 100%
copy from milena/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
copy to scribo/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
diff --git a/scribo/sandbox/green/demo/clustering/kmean1d/Makefile.am
b/scribo/sandbox/green/demo/labeling/watershed/Makefile.am
similarity index 100%
copy from scribo/sandbox/green/demo/clustering/kmean1d/Makefile.am
copy to scribo/sandbox/green/demo/labeling/watershed/Makefile.am
diff --git a/milena/sandbox/green/tests/accu/stat/histo1d/gaussian.sh
b/scribo/sandbox/green/demo/labeling/watershed/gaussian.sh
similarity index 100%
copy from milena/sandbox/green/tests/accu/stat/histo1d/gaussian.sh
copy to scribo/sandbox/green/demo/labeling/watershed/gaussian.sh
diff --git a/scribo/sandbox/green/demo/labeling/watershed/watershed.cc
b/scribo/sandbox/green/demo/labeling/watershed/watershed.cc
new file mode 100644
index 0000000..a9289f7
--- /dev/null
+++ b/scribo/sandbox/green/demo/labeling/watershed/watershed.cc
@@ -0,0 +1,360 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// This demonstrator is the first step before using
+/// regional_maxima. Its purpose is to work on histogram filtering and
+/// on the whole image processing chain.
+///
+/// \fixme: this source doesn't compile. I've no time to fix it. It's not
+/// so important because it's just a basic sample, just keep in mind the
+/// method to reach the result, it will be reuse for regional_maxima.
+
+#include <iostream>
+#include <sstream>
+
+#include <mln/accu/stat/histo1d.hh>
+
+#include <mln/arith/revert.hh>
+
+#include <mln/core/alias/neighb1d.hh>
+#include <mln/core/alias/window1d.hh>
+#include <mln/core/macros.hh>
+#include <mln/core/image/image1d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/routine/initialize.hh>
+
+#include <mln/data/compute.hh>
+#include <mln/data/transform.hh>
+
+#include <mln/io/pgm/load.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/io/plot/save_image_sh.hh>
+
+#include <mln/labeling/colorize.hh>
+#include <mln/labeling/mean_values.hh>
+#include <mln/labeling/regional_maxima.hh>
+
+#include <mln/linear/convolve.hh>
+//#include <mln/linear/gaussian.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/morpho/elementary/closing.hh>
+#include <mln/morpho/elementary/dilation.hh>
+#include <mln/morpho/elementary/opening.hh>
+#include <mln/morpho/opening/structural.hh>
+#include <mln/morpho/watershed/flooding.hh>
+
+#include <mln/img_path.hh>
+
+#include <mln/value/int_u8.hh>
+#include <mln/value/rgb8.hh>
+#include <mln/value/label_8.hh>
+
+#include <mln/win/disk1d.hh>
+
+
+/// \brief Compute the gaussian probability to obtain a given value.
+///
+/// \param[in] x the value from which we want the probability.
+/// \param[in] mean the mean parameter of the gaussian distribution.
+/// \param[in] sigma the sqrt(variance) parameter of the gaussian.
+/// \return the probability to obtain the x value.
+///
+/// Implements the standard 1d equation of the gaussian.
+double gaussian_distribution(const double x,
+ const double mean,
+ const double sigma)
+{
+ double num = exp(-0.5*mln::math::sqr((x - mean)/sigma));
+ double denom = sigma*mln::math::sqrt(2*mln::math::pi);
+ double result = num/denom;
+
+ return result;
+}
+
+
+/// \brief Make a 1d gaussian filter.
+///
+/// \param[out] ws the window (filter) where to put the probability values.
+/// \param[in] size the size of the filter.
+/// \param[in] sigma the gaussian parameter for the standard deviation.
+/// \return the probability to obtain the x value.
+///
+/// Approach the gaussian distribution for a few discrete sites, and
+/// then normilize the results to be sure that the sum obtain 1.
+void gaussian_filter(double ws[], const unsigned size, const double sigma)
+{
+ int h = size/2;
+
+ for (int i = -h; i <= h; ++i)
+ {
+ ws[i+h] = gaussian_distribution(i, 0.0, sigma);
+ }
+
+ double sum = 0.0;
+
+ for (unsigned i = 0; i < size; ++i)
+ sum += ws[i];
+
+ for (unsigned i = 0; i < size; ++i)
+ ws[i] /= sum;
+}
+
+
+/// \brief Merge input image with label one.
+///
+/// \param[in] input the window (filter) where to put the probability values.
+/// \param[in] label the size of the filter.
+/// \return the merged image.
+///
+/// This function build a new image in which the input pixels are
+/// replaced by the label associated to their grey level.
+mln::image2d<mln::value::label_8>
+merge(const mln::image2d<mln::value::int_u8>& input,
+ const mln::image1d<mln::value::label_8>& label)
+{
+ mln_precondition(label.is_valid());
+ mln_precondition(input.is_valid());
+
+ mln::image2d<mln::value::label_8> output;
+
+ mln::initialize(output, input);
+
+ mln_piter_(mln::image2d<mln::value::int_u8>) pi(input.domain());
+ mln_piter_(mln::image2d<mln::value::label_8>) po(output.domain());
+
+ for_all_2(pi, po)
+ {
+ mln::value::int_u8 val = input(pi);
+ unsigned grp = label(mln::point1d(val));
+
+ output(po) = grp;
+ }
+
+ return output;
+}
+
+/// \brief This is the wathersed method for segmenting the histogram.
+///
+/// \param[in] image the input image.
+///
+/// The function returns nothing but writes different images on the
+/// filesystem. The 3 outputs are the image label, the random coloring
+/// of the image label and the average tone of the label image
+/// (replace every label by the grey average of the group to which
+/// it's belong to) .
+void do_demo(const std::string& image)
+{
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::label_8 t_lbl8;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::image1d<t_lbl8> t_image1d_lbl8;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_lbl8> t_image2d_lbl8;
+ typedef mln::image1d<unsigned> t_image1d_unsigned;
+
+ t_image2d_int_u8 img;
+ t_image1d_unsigned histo;
+ t_image1d_unsigned filtered;
+ t_image1d_unsigned reverted;
+ t_image1d_lbl8 label;
+ t_image2d_lbl8 output;
+ t_image2d_int_u8 mean;
+ t_image2d_rgb8 colorized;
+ t_lbl8 n_labels;
+
+
+ //---------------------------------------------------------------------------
+ // LOADING PHASE
+ //---------------------------------------------------------------------------
+ mln::io::pgm::load(img, image.c_str());
+ mln::io::pgm::save(img, "img.pgm");
+
+
+ //---------------------------------------------------------------------------
+ // HISTO COMPUTING PHASE
+ //---------------------------------------------------------------------------
+ histo = mln::data::compute(mln::accu::meta::stat::histo1d(), img);
+ mln::io::plot::save_image_sh(histo, "histo.sh");
+
+
+ //---------------------------------------------------------------------------
+ // HISTO FILTERING PHASE
+ //---------------------------------------------------------------------------
+
+ // a) GAUSSIAN FILTERING
+ double ws[41];
+ gaussian_filter(ws, 41, 6.0);
+ filtered = mln::linear::convolve(histo, mln::make::w_window1d(ws));
+
+ // b) MORPHOLOGICAL ELEMENTARY OPENING
+ // filtered = mln::morpho::elementary::opening(histo, mln::c4());
+
+ // c) MORPHOLOGICAL STRUCTURAL OPENING (C4,C8 ??)
+ // filtered = mln::morpho::opening::structural(histo, mln::win_c8p());
+
+ // d) MORPHOLOGICAL STRUCTURAL DISK OPENING (SIZE = 11/21/31/41/51 ??)
+ // mln::win::disk1d disk1d(21);
+ // filtered = mln::morpho::opening::structural(histo, disk1d);
+
+ mln::io::plot::save_image_sh(filtered, "filtered.sh");
+
+
+ //---------------------------------------------------------------------------
+ // HISTO LABELING PHASE
+ //---------------------------------------------------------------------------
+ // a) watershed
+ reverted = mln::arith::revert(histo);
+ label = mln::morpho::watershed::flooding(reverted, mln::c4(), n_labels);
+ // b) regional maxima
+ // label = mln::labeling::regional_maxima(opened, mln::c8(), n_labels);
+ mln::io::pgm::save(label, "label.pgm");
+
+
+ //---------------------------------------------------------------------------
+ // FUZZY PHASE
+ //---------------------------------------------------------------------------
+ dilated = mln::morpho::elementary::dilation(label, mln::c8());
+ mln::io::pgm::save(dilated, "dilated.pgm");
+
+
+ //---------------------------------------------------------------------------
+ // OUTPUT PHASE
+ //---------------------------------------------------------------------------
+ output = merge(house_rg8, label);
+ mean = mln::labeling::mean_values(img, label, nlabels);
+ colorized = mln::labeling::colorize(rgb8(), label);
+
+ mln::io::pgm::save(output, "output.pgm");
+ mln::io::pgm::save(mean, "mean.pgm");
+ mln::io::ppm::save(colorized, "colorized.ppm");
+}
+
+
+/// \brief This is the launcher of the method.
+///
+/// \param[in] image the input image.
+///
+/// The launcher is the good place for debugging input arguments or
+/// setting defaults one.
+void demo(const std::string& image =
SCRIBO_PGM_IMG_PATH"/mp00082c_50p.pgm")
+{
+ std::cout << "----------------------------------------" <<
std::endl;
+ std::cout << "Launching the demo with these parameters" <<
std::endl;
+ std::cout << "image : " << image <<
std::endl;
+ std::cout << "----------------------------------------" <<
std::endl;
+
+ do_demo(image);
+}
+
+
+/// \bief The usage function of the binary.
+///
+/// \param[in] argc the binary number of arguments.
+/// \param[in] args the binary array of arguments.
+///
+/// This binary requires one input image to work. It is a grey level
+/// image in pgm format.
+void usage(const int argc, const char *args[])
+{
+ std::cout << "----------------------------------------" <<
std::endl;
+ std::cout << "argc : " << argc <<
std::endl;
+
+ for (int i = 0; i < argc; ++i)
+ std::cout << "args[" << i << "] : " <<
args[i] << std::endl;
+
+ std::cout << "----------------------------------------" <<
std::endl;
+ std::cout << "usage: wateshed [image]" <<
std::endl;
+ std::cout << "pgm image (image to label)" <<
std::endl;
+ std::cout << "----------------------------------------" <<
std::endl;
+}
+
+
+/// \brief Convert a c string parameter to string object like.
+///
+/// \param[in] status the flag to prevent bad work.
+/// \param[in] arg the c string to convert in string object.
+/// \param[out] val the return string object.
+/// \return a flag to say if every thing goes well.
+///
+/// Convert a c string (char *) in string object (std::string) in order
+/// to simplify some string operations.
+bool char_to_string(const bool status, const char *arg, std::string& val)
+{
+ bool result = false;
+
+ if (status)
+ {
+ std::istringstream arg_stream(arg);
+
+ arg_stream >> val;
+
+ return !arg_stream.fail();
+ }
+
+ return result;
+}
+
+
+/// \brief Segment by the watershed method histogram space.
+///
+/// \param[in] img the input image.
+/// \return merge image.
+///
+/// This is the main entry of the program. It takes an image as input
+/// parameter and computes its histogram. The method segments the
+/// histogram in order to build color classes (even we stay in grey
+/// level). Merging image is returned where pixels have been replaced
+/// by some attribute of the class (like the average color).
+int main(const int argc, const char *args[])
+{
+ std::string image("top");
+ bool status = true;
+
+ switch (argc)
+ {
+ case 2: status = char_to_string(status, args[1], image); break;
+ case 1: status = true; break;
+ default: status = false;
+ }
+
+ if (status)
+ {
+ switch (argc)
+ {
+ case 1: demo(); break;
+ case 2: demo(image); break;
+ }
+ }
+ else
+ usage(argc, args);
+
+ return 0;
+}
diff --git a/milena/sandbox/green/doc/annotating/class.txt
b/scribo/sandbox/green/doc/annotating/class.txt
similarity index 100%
copy from milena/sandbox/green/doc/annotating/class.txt
copy to scribo/sandbox/green/doc/annotating/class.txt
diff --git a/milena/sandbox/green/doc/annotating/syntheseMillet2008.txt
b/scribo/sandbox/green/doc/annotating/syntheseMillet2008.txt
similarity index 100%
copy from milena/sandbox/green/doc/annotating/syntheseMillet2008.txt
copy to scribo/sandbox/green/doc/annotating/syntheseMillet2008.txt
diff --git a/milena/sandbox/green/doc/annotating/testMillet2008
b/scribo/sandbox/green/doc/annotating/testMillet2008
similarity index 100%
copy from milena/sandbox/green/doc/annotating/testMillet2008
copy to scribo/sandbox/green/doc/annotating/testMillet2008
diff --git a/milena/sandbox/green/doc/examples/accu_color/accu_color.cc
b/scribo/sandbox/green/doc/examples/accu_color/accu_color.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/accu_color/accu_color.cc
copy to scribo/sandbox/green/doc/examples/accu_color/accu_color.cc
diff --git a/milena/sandbox/green/doc/examples/frac/Makefile.am
b/scribo/sandbox/green/doc/examples/frac/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/frac/Makefile.am
copy to scribo/sandbox/green/doc/examples/frac/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/frac/frac.cc
b/scribo/sandbox/green/doc/examples/frac/frac.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/frac/frac.cc
copy to scribo/sandbox/green/doc/examples/frac/frac.cc
diff --git a/milena/sandbox/green/doc/examples/frac/frac.hh
b/scribo/sandbox/green/doc/examples/frac/frac.hh
similarity index 100%
copy from milena/sandbox/green/doc/examples/frac/frac.hh
copy to scribo/sandbox/green/doc/examples/frac/frac.hh
diff --git a/milena/sandbox/green/doc/examples/frac/gcd.hh
b/scribo/sandbox/green/doc/examples/frac/gcd.hh
similarity index 100%
copy from milena/sandbox/green/doc/examples/frac/gcd.hh
copy to scribo/sandbox/green/doc/examples/frac/gcd.hh
diff --git a/milena/sandbox/green/doc/examples/frac/sign_prod.hh
b/scribo/sandbox/green/doc/examples/frac/sign_prod.hh
similarity index 100%
copy from milena/sandbox/green/doc/examples/frac/sign_prod.hh
copy to scribo/sandbox/green/doc/examples/frac/sign_prod.hh
diff --git a/milena/sandbox/green/doc/examples/hello_milena/Makefile.am
b/scribo/sandbox/green/doc/examples/hello_milena/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/Makefile.am
copy to scribo/sandbox/green/doc/examples/hello_milena/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/hello_milena/hello_milena.cc
b/scribo/sandbox/green/doc/examples/hello_milena/hello_milena.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/hello_milena.cc
copy to scribo/sandbox/green/doc/examples/hello_milena/hello_milena.cc
diff --git a/milena/sandbox/green/doc/examples/hello_milena/Makefile.am
b/scribo/sandbox/green/doc/examples/hello_world/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/Makefile.am
copy to scribo/sandbox/green/doc/examples/hello_world/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/hello_world/hello_world.cc
b/scribo/sandbox/green/doc/examples/hello_world/hello_world.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_world/hello_world.cc
copy to scribo/sandbox/green/doc/examples/hello_world/hello_world.cc
diff --git a/milena/sandbox/green/doc/examples/hello_world/print.cc
b/scribo/sandbox/green/doc/examples/hello_world/print.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_world/print.cc
copy to scribo/sandbox/green/doc/examples/hello_world/print.cc
diff --git a/milena/sandbox/green/doc/examples/io/Makefile.am
b/scribo/sandbox/green/doc/examples/io/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/io/Makefile.am
copy to scribo/sandbox/green/doc/examples/io/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/io/io.cc
b/scribo/sandbox/green/doc/examples/io/io.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/io/io.cc
copy to scribo/sandbox/green/doc/examples/io/io.cc
diff --git a/milena/sandbox/green/doc/examples/hello_milena/Makefile.am
b/scribo/sandbox/green/doc/examples/learn_milena/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/Makefile.am
copy to scribo/sandbox/green/doc/examples/learn_milena/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/learn_milena/learn_milena.cc
b/scribo/sandbox/green/doc/examples/learn_milena/learn_milena.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/learn_milena/learn_milena.cc
copy to scribo/sandbox/green/doc/examples/learn_milena/learn_milena.cc
diff --git a/milena/sandbox/green/doc/examples/hello_milena/Makefile.am
b/scribo/sandbox/green/doc/examples/otsu/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/Makefile.am
copy to scribo/sandbox/green/doc/examples/otsu/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/otsu/otsu.cc
b/scribo/sandbox/green/doc/examples/otsu/otsu.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/otsu/otsu.cc
copy to scribo/sandbox/green/doc/examples/otsu/otsu.cc
diff --git a/milena/sandbox/green/doc/examples/hello_milena/Makefile.am
b/scribo/sandbox/green/doc/examples/stats/Makefile.am
similarity index 100%
copy from milena/sandbox/green/doc/examples/hello_milena/Makefile.am
copy to scribo/sandbox/green/doc/examples/stats/Makefile.am
diff --git a/milena/sandbox/green/doc/examples/stats/stats.cc
b/scribo/sandbox/green/doc/examples/stats/stats.cc
similarity index 100%
copy from milena/sandbox/green/doc/examples/stats/stats.cc
copy to scribo/sandbox/green/doc/examples/stats/stats.cc
diff --git a/milena/sandbox/green/doc/formulae/formulae.tex
b/scribo/sandbox/green/doc/formulae/formulae.tex
similarity index 100%
copy from milena/sandbox/green/doc/formulae/formulae.tex
copy to scribo/sandbox/green/doc/formulae/formulae.tex
diff --git a/milena/sandbox/green/doc/quick_tour/quick_tour.tex
b/scribo/sandbox/green/doc/quick_tour/quick_tour.tex
similarity index 100%
copy from milena/sandbox/green/doc/quick_tour/quick_tour.tex
copy to scribo/sandbox/green/doc/quick_tour/quick_tour.tex
diff --git a/scribo/sandbox/green/exp/regional_maxima/Makefile.am
b/scribo/sandbox/green/exp/regional_maxima/Makefile.am
new file mode 100644
index 0000000..68bb53e
--- /dev/null
+++ b/scribo/sandbox/green/exp/regional_maxima/Makefile.am
@@ -0,0 +1,153 @@
+#
+# Generic Makefile
+#
+
+#########
+# TOOLS #
+#########
+
+LOADLIBES= -lboost_filesystem
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+CXXFLAGS= -ggdb -O0 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O1 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O3 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+ECHO= echo
+RM= rm
+MKDIR= mkdir -p
+CP= cp
+
+SOURCE_PATTERN= green/exp
+BUILD__PATTERN= green/build/exp
+
+
+ifeq ($(findstring $(BUILD__PATTERN),$(PWD)), $(BUILD__PATTERN))
+# Case where make is done from build directory.
+SOURCE_DIR= $(subst $(BUILD__PATTERN),$(SOURCE_PATTERN),$(PWD))
+BUILD__DIR= $(PWD)/
+else
+# Case where make is done from source directory.
+SOURCE_DIR= $(PWD)/
+BUILD__DIR= $(subst $(SOURCE_PATTERN),$(BUILD__PATTERN),$(PWD))
+endif
+
+SRC= $(notdir $(wildcard $(SOURCE_DIR)/*.cc))
+OLD= $(notdir $(wildcard $(SOURCE_DIR)/*~))
+OBJ= $(patsubst %.cc,%.o,$(SRC))
+SOURCE_MAKEFILE=Makefile.am
+BUILD__MAKEFILE=Makefile
+TARGET_FILE= $(notdir $(PWD))
+SOURCE_FILES= $(notdir $(wildcard $(SOURCE_DIR)/*.*))
+BUILD__FILES= $(filter-out $(SRC) $(SOURCE_MAKEFILE), $(SOURCE_FILES))
+
+BUILD__F_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__FILES))
+SOURCE_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES))
+
+BUILD__M_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__MAKEFILE))
+SOURCE_M_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_MAKEFILE))
+
+TARGET_F_PATH= $(addprefix $(BUILD__DIR)/,$(TARGET_FILE))
+OBJ_F_PATH= $(addprefix $(BUILD__DIR)/,$(OBJ))
+SRC_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SRC))
+OLD_F_PATH= $(addprefix $(SOURCE_DIR)/,$(OLD))
+
+#############
+# BOOTSTRAP #
+#############
+
+
+bootstrap: $(BUILD__DIR) $(BUILD__F_PATH) $(BUILD__M_PATH)
+
+# Create, if nessary, the destination directory
+$(BUILD__DIR):
+ $(MKDIR) $(BUILD__DIR)
+
+# Copy, if nessary, all the files, except the Makefile.am
+$(BUILD__F_PATH): $(SOURCE_F_PATH)
+ $(CP) $(addprefix $(SOURCE_DIR),$(@F)) $@
+
+# Copy if nessary, the Makefile.am into Makefile
+$(BUILD__M_PATH): $(SOURCE_M_PATH)
+ $(CP) $(SOURCE_M_PATH) $(BUILD__M_PATH)
+
+
+#######
+# ALL #
+#######
+
+# We assume that the call is done from the build directory.
+# With the directive vpath, hidden files are found in the source directory.
+
+all: $(TARGET_F_PATH)
+
+
+$(TARGET_F_PATH): $(OBJ_F_PATH)
+ $(LINK.cc) $< $(LOADLIBES) $(LDLIBS) -o $@
+
+$(OBJ_F_PATH):$(SRC_F_PATH)
+ $(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+
+#########
+# CLEAN #
+#########
+
+# Force every time the deletion
+clean: clean_target clean_obj clean_dst clean_old #clean_make
+
+
+clean_target:
+ -@$(RM) $(TARGET_F_PATH) &> /dev/null
+
+clean_obj:
+ -@$(RM) $(OBJ_F_PATH) &> /dev/null
+
+clean_dst:
+ -@$(RM) $(BUILD_F_PATH) &> /dev/null
+
+clean_make:
+ -@$(RM) $(BUILD_M_PATH) &> /dev/null
+
+clean_old:
+ -@$(RM) $(OLD_F_PATH) &> /dev/null
+
+
+#########
+# PRINT #
+#########
+
+print: print_tools print_bootstrap
+
+print_tools:
+ @$(ECHO) "HOME = $(HOME)"
+ @$(ECHO) "INCLUDES = $(INCLUDES)"
+ @$(ECHO) "CXXFLAGS = $(CXXFLAGS)"
+ @$(ECHO) "ECHO = $(ECHO)"
+ @$(ECHO) "RM = $(RM)"
+ @$(ECHO) "MKDIR = $(MKDIR)"
+ @$(ECHO) "CP = $(CP)"
+ @$(ECHO)
+
+print_bootstrap:
+ @$(ECHO) "PWD = $(PWD)"
+ @$(ECHO) "SOURCE_PATTERN = $(SOURCE_PATTERN)"
+ @$(ECHO) "BUILD__PATTERN = $(BUILD__PATTERN)"
+ @$(ECHO) "SOURCE_DIR = $(SOURCE_DIR)"
+ @$(ECHO) "BUILD__DIR = $(BUILD__DIR)"
+ @$(ECHO) "SOURCE_MAKEFILE = $(SOURCE_MAKEFILE)"
+ @$(ECHO) "BUILD__MAKEFILE = $(BUILD__MAKEFILE)"
+ @$(ECHO) "TARGET_FILE = $(TARGET_FILE)"
+ @$(ECHO) "SOURCE_FILES = $(SOURCE_FILES)"
+ @$(ECHO) "SOURCE_F_PATH = $(SOURCE_F_PATH)"
+ @$(ECHO) "BUILD__FILES = $(BUILD__FILES)"
+ @$(ECHO) "BUILD__F_PATH = $(BUILD__F_PATH)"
+ @$(ECHO) "BUILD__M_PATH = $(BUILD__M_PATH)"
+ @$(ECHO) "SOURCE_M_PATH = $(SOURCE_M_PATH)"
+ @$(ECHO) "SRC = $(SRC)"
+ @$(ECHO) "OBJ = $(OBJ)"
+ @$(ECHO) "OLD = $(OLD)"
+ @$(ECHO) "SRC_F_PATH = $(SRC_F_PATH)"
+ @$(ECHO) "OBJ_F_PATH = $(OBJ_F_PATH)"
+ @$(ECHO) "OLD_F_PATH = $(OLD_F_PATH)"
+ @$(ECHO)
diff --git a/scribo/sandbox/green/exp/regional_maxima/regional_maxima.cc
b/scribo/sandbox/green/exp/regional_maxima/regional_maxima.cc
new file mode 100644
index 0000000..0cd8389
--- /dev/null
+++ b/scribo/sandbox/green/exp/regional_maxima/regional_maxima.cc
@@ -0,0 +1,196 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// This demonstrator is aimed to experiment the regional maxima
+/// method. regional_maxima.It first test the 3d histogram from an
+/// image and the number of colors which results. And in fact, doesn't
+/// use the regional_maxima routine. Too many parameters must be fixed
+/// and parts of the code has been commented. The last action of this
+/// program consists in counting the number of colors of each image in a
+/// directory. This source has been used to test the annotating image base.
+
+#include <iostream>
+#include <sstream>
+#include <boost/filesystem.hpp>
+
+#include <mln/img_path.hh>
+
+#include <mln/accu/math/sum.hh>
+#include <mln/accu/math/count.hh>
+#include <mln/accu/stat/histo3d_rgb.hh>
+#include <mln/accu/stat/mean.hh>
+#include <mln/accu/stat/variance.hh>
+
+#include <mln/algebra/vec.hh>
+
+#include <mln/arith/diff_abs.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/alias/neighb3d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+#include <mln/core/image/dmorph/image_if.hh>
+#include <mln/core/routine/initialize.hh>
+
+#include <mln/data/compute.hh>
+#include <mln/data/fill.hh>
+#include <mln/data/transform.hh>
+
+#include <mln/fun/v2v/rgb8_to_rgbn.hh>
+
+#include <mln/io/pgm/load.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/ppm/save.hh>
+
+#include <mln/labeling/regional_maxima.hh>
+#include <mln/labeling/mean_values.hh>
+#include <mln/labeling/compute.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/morpho/opening/volume.hh>
+#include <mln/morpho/elementary/dilation.hh>
+
+#include <mln/opt/at.hh>
+
+#include <mln/pw/cst.hh>
+
+#include <mln/util/array.hh>
+#include <mln/util/timer.hh>
+
+#include <mln/value/label_8.hh>
+#include <mln/value/rgb8.hh>
+#include <mln/value/rgb.hh>
+#include <mln/value/int_u.hh>
+
+/// \brief This is the count method.
+///
+/// \param[in] image the colored image.
+///
+/// This function loads a color image (ppm) and count the colors after
+/// using the min volume processing on the 3d histogram. Percentage
+/// thresholding is in test. The file threshold.txt establishes the link
+/// between percentage and size in image.
+///
+// n < 8, n is the degree of quantification
+template <unsigned n>
+unsigned count_image_color(const std::string& image)
+{
+ typedef mln::value::label_8 t_lbl8;
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::image3d<t_lbl8> t_image3d_lbl8;
+ typedef mln::image2d<t_lbl8> t_image2d_lbl8;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::image2d<unsigned> t_histo2d;
+ typedef mln::fun::v2v::rgb8_to_rgbn<n> t_rgb8_to_rgbn;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+ typedef mln::accu::meta::math::count t_count_fun;
+
+ t_image2d_rgb8 input_rgb8;
+ t_image2d_rgbn input_rgbn;
+ t_image2d_rgbn output_rgbn;
+ t_histo3d histo;
+ t_histo3d opened;
+ t_image3d_lbl8 label;
+ t_image2d_lbl8 label_img;
+ t_image3d_lbl8 dilated;
+ t_lbl8 n_labels;
+
+ mln::io::ppm::load(input_rgb8, image.c_str());
+
+ unsigned nb_pixel = input_rgb8.ncols() * input_rgb8.nrows();
+ unsigned min_volume = (unsigned)(nb_pixel * 0.054);
+
+ input_rgbn = mln::data::transform(input_rgb8, t_rgb8_to_rgbn());
+ histo = mln::data::compute(t_histo3d_fun(), input_rgbn);
+ return mln::data::compute(t_count_fun(), histo);
+ // return nb_pixel;
+ // opened = mln::morpho::opening::volume(histo, mln::c6(), min_volume);
+ // label = mln::labeling::regional_maxima(opened, mln::c6(), n_labels);
+ // return n_labels;
+}
+
+
+/// \brief The main function aimed at looping over the whole directory.
+///
+/// The main function is used to take care of file part in this
+/// sofware. It manages the directory scanning aspect while the last
+/// function does the image processing aspect. Statistics are
+/// generated (mean and variance) about the number of colors after using
+/// the min_volume routine. Some strange things happens with that routine
+/// sometimes.
+int main()
+{
+ typedef boost::filesystem::path t_path;
+ //typedef boost::filesystem::initial_path<t_path()> t_init_path;
+ typedef boost::filesystem::directory_iterator t_iter_path;
+
+ t_path full_path(ANNOTATING_1_TYPED_IMG_PATH);
+
+ std::cout << "entering " << full_path << std::endl;
+
+ if (//1 < argc &&
+ boost::filesystem::exists(full_path) &&
+ boost::filesystem::is_directory(full_path))
+ {
+ boost::filesystem::system_complete(full_path);
+ const t_iter_path end_iter;
+ unsigned count = 0;
+ unsigned sum1 = 0;
+ unsigned sum2 = 0;
+
+ for (t_iter_path dir_iter(full_path); end_iter != dir_iter; ++dir_iter)
+ {
+ unsigned val = count_image_color<5>(dir_iter->path().string());
+
+ ++count;
+ sum1 += val;
+ sum2 += val*val;
+
+ std::cout << dir_iter->path().string() << " => "
<< val << std::endl;
+ // FIXME NB COULEURS BRUTES
+ // FIXME NB DE COULEURS
+ // FIXME LISTE DES COULEURS
+ // IMPORTANCES
+ }
+
+ unsigned mean = sum1 / count;
+ unsigned var = sum2 / count - mean * mean;
+
+ std::cout << "mean : " << mean << std::endl;
+ std::cout << "var : " << var << std::endl;
+ }
+
+ return 0;
+}
+
diff --git a/milena/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
b/scribo/sandbox/green/exp/regional_maxima/thresholds.txt
similarity index 100%
copy from milena/sandbox/green/demo/labeling/regional_maxima/thresholds.txt
copy to scribo/sandbox/green/exp/regional_maxima/thresholds.txt
diff --git a/scribo/sandbox/green/mln/display/display_histo.hh
b/scribo/sandbox/green/mln/display/display_histo.hh
index ef47182..d48f47f 100644
--- a/scribo/sandbox/green/mln/display/display_histo.hh
+++ b/scribo/sandbox/green/mln/display/display_histo.hh
@@ -47,6 +47,64 @@
/// the blue dimension (green and blue composantes are being correlated). In
/// fact, we sum in along the blue direction. Then, we stretch value to feet
/// pgm format.
+///
+/// This is the sample code to use the red/green visualization.
+///
+/// \fixme There is a lot of routines in display_histo.hh, but only
+/// two of them have been call here. Stuff to complete.
+///
+/// #include <iostream>
+/// #include <mln/accu/stat/histo3d_rgb.hh>
+/// #include <mln/core/macros.hh>
+/// #include <mln/core/image/image2d.hh>
+/// #include <mln/core/image/image3d.hh>
+/// #include <mln/data/compute.hh>
+/// #include <mln/data/transform.hh>
+/// #include <mln/display/display_histo.hh>
+/// #include <mln/fun/v2v/rgb8_to_rgbn.hh>
+/// #include <mln/img_path.hh>
+/// #include <mln/io/ppm/load.hh>
+/// #include <mln/io/pgm/save.hh>
+/// #include <mln/io/ppm/save.hh>
+/// #include <mln/literal/colors.hh>
+/// #include <mln/value/rgb8.hh>
+/// #include <mln/value/rgb.hh>
+///
+/// int main()
+/// {
+/// typedef mln::value::int_u8 t_int_u8;
+/// typedef mln::value::int_u<4> t_int_u4;
+/// typedef mln::value::rgb8 t_rgb8;
+/// typedef mln::value::rgb<4> t_rgb4;
+/// typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+/// typedef mln::image2d<t_int_u4> t_image2d_int_u4;
+/// typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+/// typedef mln::image2d<t_rgb4> t_image2d_rgb4;
+/// typedef mln::image2d<bool> t_image2d_bool;
+/// typedef mln::image3d<unsigned> t_histo3d;
+/// typedef mln::fun::v2v::rgb8_to_rgbn<4> t_rgb8_to_rgb4;
+/// typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+///
+/// t_image2d_rgb8 i0_input; // input rgb8
+/// t_image2d_rgb4 i1_input; // input rgbn
+/// t_histo3d h1_input; // histo input
+/// t_image2d_int_u8 p1_histo1;// histo proj1
+/// t_image2d_rgb4 p1_histo2;// histo proj2
+/// t_rgb4 red(mln::literal::red);
+///
+/// mln::io::ppm::load(i0_input, OLENA_IMG_PATH"/lena.ppm");
+///
+/// i1_input = mln::data::transform(i0_input, t_rgb8_to_rgb4());
+/// h1_input = mln::data::compute(t_histo3d_fun(), i1_input);
+/// p1_histo1 = mln::display::display_histo3d_unsigned(h1_input);
+/// p1_histo2 = mln::display::display3_histo3d_unsigned(h1_input, red);
+///
+/// mln::io::pgm::save(p1_histo1, "proj1.pgm");
+/// mln::io::ppm::save(p1_histo2, "proj2.ppm");
+///
+/// return 0;
+/// }
+
namespace mln
@@ -55,26 +113,100 @@ namespace mln
namespace display
{
- // Forward declaration.
+ /// \brief Allow the visualization of the density of the 3d histogram.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space by
+ /// accumulating around the the blue dimension (green and blue
+ /// composantes are being correlated). In fact, we sum along the
+ /// blue direction and take the log of value. Then, we stretch
+ /// value to feet pgm format.
image2d<value::int_u8>
display_histo3d_unsigned(const image3d<unsigned>& histo);
+
+ /// \brief Allow the visualization of the important color of the 3d histo.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position in
+ /// this blue axis is returned in the projection image.
template <unsigned n>
image2d< value::int_u<n> >
display2_histo3d_unsigned(const image3d<unsigned>& histo,
const value::int_u<n> ambiguous_color);
+
+ /// \brief Allow the visualization of the color of the 3d segmented histo.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] label the label image to associate the result with.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position in
+ /// this blue axis is associated to a segmented label and this label
+ /// is returned in the projection image.
template <unsigned n>
image2d<value::label_8>
display2_histo3d_unsigned(const image3d<unsigned>& histo,
const image3d<value::label_8>& label,
const value::label_8 ambiguous_label);
+
+ /// \brief Allow the visualization with color of the 3d histo.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position is used
+ /// to build a rgb color and put it as a returned value in projection image.
template <unsigned n>
image2d< value::rgb<n> >
display3_histo3d_unsigned(const image3d<unsigned>& histo,
const value::rgb<n> ambiguous_color);
+
+ /// \brief Allow the visualization with color of the 3d segmented histo.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] label the label image to associte the result with.
+ /// \parameter[in] pal the color indexed list to associate to the label.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position is used
+ /// to find the label associate to it and then the color associated to
+ /// this label. That's the information we return in the projection image.
template <unsigned n>
image2d< value::rgb8 >
display3_histo3d_unsigned(const image3d<unsigned>& histo,
@@ -84,21 +216,6 @@ namespace mln
#ifndef MLN_INCLUDE_ONLY
- /// \brief Allow the visualization of a 3d histogram by projection.
- ///
- /// The 3d histogram is projected in red/green space by
- /// accumulating around the the blue dimension (green and blue
- /// composantes are being correlated). In fact, we sum along
- /// the blue direction. Then, we stretch value to feet pgm
- /// format.
- /// Direction r = 1
- /// Direction g = 2
- /// Direction b = 0
- ///
- /// \parameter[in] histo the histogram in 3d.
- /// \result return a equivalent 2d image.
-
- // FIXME : display_shape [in int_u8]
image2d<value::int_u8>
display_histo3d_unsigned(const image3d<unsigned>& histo)
{
diff --git a/scribo/sandbox/green/mln/display/project_histo.hh
b/scribo/sandbox/green/mln/display/project_histo.hh
index 30bcd6d..36a5542 100644
--- a/scribo/sandbox/green/mln/display/project_histo.hh
+++ b/scribo/sandbox/green/mln/display/project_histo.hh
@@ -49,9 +49,71 @@
/// \file
///
-/// \brief Allow the visualization of 3d histogram.
-/// The 3d histogram is projected in 2d such as the data in that direction
-/// are accumulated to the two others.
+/// \brief Allow the complete visualization of a 3d histogram by projection.
+///
+/// The 3d histogram is projected in red/green space by accumulating around the
+/// the blue dimension (green and blue composantes are being correlated). In
+/// fact, we sum in along the blue direction. Then, we stretch value to feet
+/// pgm format. This is the same preambule documentation as in display_histo
+/// because display_histo is use as a front hand for this file.
+///
+/// This is the sample code to use the red/green visualization.
+///
+/// \fixme There is a lot of routines in display_histo.hh, but only
+/// two of them have been call here. Stuff to complete.
+///
+/// #include <iostream>
+/// #include <mln/accu/stat/histo3d_rgb.hh>
+/// #include <mln/core/macros.hh>
+/// #include <mln/core/image/image2d.hh>
+/// #include <mln/core/image/image3d.hh>
+/// #include <mln/data/compute.hh>
+/// #include <mln/data/transform.hh>
+/// #include <mln/display/display_histo.hh>
+/// #include <mln/fun/v2v/rgb8_to_rgbn.hh>
+/// #include <mln/img_path.hh>
+/// #include <mln/io/ppm/load.hh>
+/// #include <mln/io/pgm/save.hh>
+/// #include <mln/io/ppm/save.hh>
+/// #include <mln/literal/colors.hh>
+/// #include <mln/value/rgb8.hh>
+/// #include <mln/value/rgb.hh>
+///
+/// int main()
+/// {
+/// typedef mln::value::int_u8 t_int_u8;
+/// typedef mln::value::int_u<4> t_int_u4;
+/// typedef mln::value::rgb8 t_rgb8;
+/// typedef mln::value::rgb<4> t_rgb4;
+/// typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+/// typedef mln::image2d<t_int_u4> t_image2d_int_u4;
+/// typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+/// typedef mln::image2d<t_rgb4> t_image2d_rgb4;
+/// typedef mln::image2d<bool> t_image2d_bool;
+/// typedef mln::image3d<unsigned> t_histo3d;
+/// typedef mln::fun::v2v::rgb8_to_rgbn<4> t_rgb8_to_rgb4;
+/// typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+///
+/// t_image2d_rgb8 i0_input; // input rgb8
+/// t_image2d_rgb4 i1_input; // input rgbn
+/// t_histo3d h1_input; // histo input
+/// t_image2d_int_u8 p1_histo1;// histo proj1
+/// t_image2d_rgb4 p1_histo2;// histo proj2
+/// t_rgb4 red(mln::literal::red);
+///
+/// mln::io::ppm::load(i0_input, OLENA_IMG_PATH"/lena.ppm");
+///
+/// i1_input = mln::data::transform(i0_input, t_rgb8_to_rgb4());
+/// h1_input = mln::data::compute(t_histo3d_fun(), i1_input);
+/// p1_histo1 = mln::display::display_histo3d_unsigned(h1_input);
+/// p1_histo2 = mln::display::display3_histo3d_unsigned(h1_input, red);
+///
+/// mln::io::pgm::save(p1_histo1, "proj1.pgm");
+/// mln::io::ppm::save(p1_histo2, "proj2.ppm");
+///
+/// return 0;
+/// }
+
namespace mln
{
@@ -59,50 +121,130 @@ namespace mln
namespace display
{
- // Forward declaration.
+ /// \brief Allow the visualization of the density of the 3d histogram.
+ ///
+ /// Parameter A is the type of accumulator, for instance, accu::math::sum.
+ /// Parameter direction is the way of the projection, for instance blue one.
+ /// Parameter V is the value we use to accumulate information.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space by
+ /// accumulating around the the blue dimension (green and blue
+ /// composantes are being correlated). In fact, we sum along the
+ /// blue direction and take the log of value. Then, we stretch
+ /// value to feet pgm format. Not limited to red/green space.
template <typename A, unsigned direction, typename V>
image2d<mln_result(A)>
project_histo(const image3d<V>& histo);
+
+ /// \brief Allow the visualization of the important color of the 3d histo.
+ ///
+ /// Parameter A is the type of accumulator, for instance, accu::math::sum.
+ /// Parameter direction is the way of the projection, for instance blue one.
+ /// Parameter V is the value we use to accumulate information.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position in
+ /// this blue axis is returned in the projection image. Not
+ /// limited to red/green space.
template <typename A, unsigned n, unsigned direction, typename V>
image2d<mln_result(A)>
project2_histo(const image3d<V>& histo,
const value::int_u<n>& ambiguous_color);
+
+ /// \brief Allow the visualization of the color of the 3d segmented histo.
+ ///
+ /// Parameter A is the type of accumulator, for instance, accu::math::sum.
+ /// Parameter direction is the way of the projection, for instance blue one.
+ /// Parameter V is the value we use to accumulate information.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] label the label image to associate the result with.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position in
+ /// this blue axis is associated to a segmented label and this label
+ /// is returned in the projection image. Not limited to red/green space.
template <unsigned n, unsigned direction, typename V>
image2d<V>
project2_histo(const image3d<unsigned>& histo,
const image3d<V>& label);
+ /// \brief Allow the visualization with color of the 3d histo.
+ ///
+ /// Parameter A is the type of accumulator, for instance, accu::math::sum.
+ /// Parameter direction is the way of the projection, for instance blue one.
+ /// Parameter V is the value we use to accumulate information.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position is
+ /// used to build a rgb color and put it as a returned value in
+ /// projection image. Not limited to red/green space.
template <unsigned n, unsigned direction>
image2d< value::rgb<n> >
project3_histo(const image3d<unsigned>& histo,
const value::rgb<n> ambiguous_color);
+ /// \brief Allow the visualization with color of the 3d segmented histo.
+ ///
+ /// Parameter A is the type of accumulator, for instance, accu::math::sum.
+ /// Parameter direction is the way of the projection, for instance blue one.
+ /// Parameter V is the value we use to accumulate information.
+ ///
+ /// Direction r = 1
+ /// Direction g = 2
+ /// Direction b = 0
+ ///
+ /// \parameter[in] histo the histogram in 3d.
+ /// \parameter[in] label the label image to associte the result with.
+ /// \parameter[in] pal the color indexed list to associate to the label.
+ /// \parameter[in] ambiguous_color the color when no max is found.
+ /// \result return the projection of the histogram in 2d.
+ ///
+ /// The 3d histogram is projected in red/green space. In the blue
+ /// direction we check the max blue component. The position is used
+ /// to find the label associate to it and then the color associated to
+ /// this label. That's the information we return in the projection image.
+ /// Not limited to red/green space.
template <unsigned n, unsigned direction>
image2d< value::rgb8 >
project3_histo(const image3d<unsigned>& histo,
const image3d<value::label_8>& label,
const util::array<algebra::vec<3, float> >& pal,
const value::rgb8 ambiguous_color);
- // FIXME ==> palette must be 1d-image not an array !!
-
# ifndef MLN_INCLUDE_ONLY
- /// \brief Allow the visualization of 3d histogram.
- ///
- /// The 3d histogram is projected in 2d such as the data in that direction
- /// are accumulated to the two others.
- ///
- /// Parameter A is the type of accumulator, for instance, accu::math::sum.
- /// Parameter direction is the way of the projection, for instance blue one.
- /// Parameter V is the value we use to accumulate information.
- ///
- /// \prameter[in] the histogram 3d.
- /// \result the 2d projection of the 3d histogram.
-
template <typename A, unsigned direction, typename V>
image2d<mln_result(A)>
project_histo(const image3d<V>& histo)
diff --git a/scribo/sandbox/green/tools/labeling/histo/Makefile.am
b/scribo/sandbox/green/tools/labeling/histo/Makefile.am
new file mode 100644
index 0000000..f03a836
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/histo/Makefile.am
@@ -0,0 +1,153 @@
+#
+# Generic Makefile
+#
+
+#########
+# TOOLS #
+#########
+
+#LOADLIBES= -lboost_filesystem
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+CXXFLAGS= -ggdb -O0 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O1 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O3 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+ECHO= echo
+RM= rm
+MKDIR= mkdir -p
+CP= cp
+
+SOURCE_PATTERN= green/tools
+BUILD__PATTERN= green/build/tools
+
+
+ifeq ($(findstring $(BUILD__PATTERN),$(PWD)), $(BUILD__PATTERN))
+# Case where make is done from build directory.
+SOURCE_DIR= $(subst $(BUILD__PATTERN),$(SOURCE_PATTERN),$(PWD))
+BUILD__DIR= $(PWD)/
+else
+# Case where make is done from source directory.
+SOURCE_DIR= $(PWD)/
+BUILD__DIR= $(subst $(SOURCE_PATTERN),$(BUILD__PATTERN),$(PWD))
+endif
+
+SRC= $(notdir $(wildcard $(SOURCE_DIR)/*.cc))
+OLD= $(notdir $(wildcard $(SOURCE_DIR)/*~))
+OBJ= $(patsubst %.cc,%.o,$(SRC))
+SOURCE_MAKEFILE=Makefile.am
+BUILD__MAKEFILE=Makefile
+TARGET_FILE= $(notdir $(PWD))
+SOURCE_FILES= $(notdir $(wildcard $(SOURCE_DIR)/*.*))
+BUILD__FILES= $(filter-out $(SRC) $(SOURCE_MAKEFILE), $(SOURCE_FILES))
+
+BUILD__F_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__FILES))
+SOURCE_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES))
+
+BUILD__M_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__MAKEFILE))
+SOURCE_M_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_MAKEFILE))
+
+TARGET_F_PATH= $(addprefix $(BUILD__DIR)/,$(TARGET_FILE))
+OBJ_F_PATH= $(addprefix $(BUILD__DIR)/,$(OBJ))
+SRC_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SRC))
+OLD_F_PATH= $(addprefix $(SOURCE_DIR)/,$(OLD))
+
+#############
+# BOOTSTRAP #
+#############
+
+
+bootstrap: $(BUILD__DIR) $(BUILD__F_PATH) $(BUILD__M_PATH)
+
+# Create, if nessary, the destination directory
+$(BUILD__DIR):
+ $(MKDIR) $(BUILD__DIR)
+
+# Copy, if nessary, all the files, except the Makefile.am
+$(BUILD__F_PATH): $(SOURCE_F_PATH)
+ $(CP) $(addprefix $(SOURCE_DIR),$(@F)) $@
+
+# Copy if nessary, the Makefile.am into Makefile
+$(BUILD__M_PATH): $(SOURCE_M_PATH)
+ $(CP) $(SOURCE_M_PATH) $(BUILD__M_PATH)
+
+
+#######
+# ALL #
+#######
+
+# We assume that the call is done from the build directory.
+# With the directive vpath, hidden files are found in the source directory.
+
+all: $(TARGET_F_PATH)
+
+
+$(TARGET_F_PATH): $(OBJ_F_PATH)
+ $(LINK.cc) $< $(LOADLIBES) $(LDLIBS) -o $@
+
+$(OBJ_F_PATH):$(SRC_F_PATH)
+ $(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+
+#########
+# CLEAN #
+#########
+
+# Force every time the deletion
+clean: clean_target clean_obj clean_dst clean_old #clean_make
+
+
+clean_target:
+ -@$(RM) $(TARGET_F_PATH) &> /dev/null
+
+clean_obj:
+ -@$(RM) $(OBJ_F_PATH) &> /dev/null
+
+clean_dst:
+ -@$(RM) $(BUILD_F_PATH) &> /dev/null
+
+clean_make:
+ -@$(RM) $(BUILD_M_PATH) &> /dev/null
+
+clean_old:
+ -@$(RM) $(OLD_F_PATH) &> /dev/null
+
+
+#########
+# PRINT #
+#########
+
+print: print_tools print_bootstrap
+
+print_tools:
+ @$(ECHO) "HOME = $(HOME)"
+ @$(ECHO) "INCLUDES = $(INCLUDES)"
+ @$(ECHO) "CXXFLAGS = $(CXXFLAGS)"
+ @$(ECHO) "ECHO = $(ECHO)"
+ @$(ECHO) "RM = $(RM)"
+ @$(ECHO) "MKDIR = $(MKDIR)"
+ @$(ECHO) "CP = $(CP)"
+ @$(ECHO)
+
+print_bootstrap:
+ @$(ECHO) "PWD = $(PWD)"
+ @$(ECHO) "SOURCE_PATTERN = $(SOURCE_PATTERN)"
+ @$(ECHO) "BUILD__PATTERN = $(BUILD__PATTERN)"
+ @$(ECHO) "SOURCE_DIR = $(SOURCE_DIR)"
+ @$(ECHO) "BUILD__DIR = $(BUILD__DIR)"
+ @$(ECHO) "SOURCE_MAKEFILE = $(SOURCE_MAKEFILE)"
+ @$(ECHO) "BUILD__MAKEFILE = $(BUILD__MAKEFILE)"
+ @$(ECHO) "TARGET_FILE = $(TARGET_FILE)"
+ @$(ECHO) "SOURCE_FILES = $(SOURCE_FILES)"
+ @$(ECHO) "SOURCE_F_PATH = $(SOURCE_F_PATH)"
+ @$(ECHO) "BUILD__FILES = $(BUILD__FILES)"
+ @$(ECHO) "BUILD__F_PATH = $(BUILD__F_PATH)"
+ @$(ECHO) "BUILD__M_PATH = $(BUILD__M_PATH)"
+ @$(ECHO) "SOURCE_M_PATH = $(SOURCE_M_PATH)"
+ @$(ECHO) "SRC = $(SRC)"
+ @$(ECHO) "OBJ = $(OBJ)"
+ @$(ECHO) "OLD = $(OLD)"
+ @$(ECHO) "SRC_F_PATH = $(SRC_F_PATH)"
+ @$(ECHO) "OBJ_F_PATH = $(OBJ_F_PATH)"
+ @$(ECHO) "OLD_F_PATH = $(OLD_F_PATH)"
+ @$(ECHO)
diff --git a/scribo/sandbox/green/tools/labeling/histo/histo.cc
b/scribo/sandbox/green/tools/labeling/histo/histo.cc
new file mode 100644
index 0000000..1fee9df
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/histo/histo.cc
@@ -0,0 +1,204 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// \brief This tool aimed at building 3d RGB histogram.
+///
+/// Building histogram means quantifying the input and then image computing
+/// the 3d histogram in RGB space.
+
+#include <iostream>
+
+#include <mln/accu/stat/histo3d_rgb.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+#include <mln/core/image/dmorph/image_if.hh>
+
+#include <mln/data/compute.hh>
+#include <mln/data/transform.hh>
+
+#include <mln/display/display_histo.hh>
+
+#include <mln/fun/v2v/rgb8_to_rgbn.hh>
+
+#include <mln/io/pbm/load.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/dump/save.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/save.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/opt/at.hh>
+
+#include <mln/pw/value.hh>
+
+#include <mln/value/rgb8.hh>
+#include <mln/value/rgb.hh>
+
+
+/// \brief The histogram image processing chain.
+///
+/// \param[in] input the input image.
+/// \param[out] quant the name of the resulting quantified image.
+/// \param[out] histo the name of the resulting 3d histogram.
+/// \param[out] proj1 the red/green projection of the histogram.
+/// \param[out] proj2 the red/green projection with maxima plot on.
+/// \param[in] mask the mask with selects the pixels of the input image.
+///
+/// This chain aimed at computing 3d RGB histogram of 2d RGB color
+/// quantified image. As the 3d histogram induces lots and lots of
+/// data, quantifiying the input image reduces the size of the
+/// resulting histogram. Then, dumping and projections are done.
+template <unsigned n>
+void mk_histo(const std::string& input, // in
+ const std::string& quant, // in
+ const std::string& histo, // out
+ const std::string& proj1, // out
+ const std::string& proj2, // out
+ const std::string& mask) // [in]
+{
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::int_u<n> t_int_un;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_int_un> t_image2d_int_un;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image2d<bool> t_image2d_bool;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::fun::v2v::rgb8_to_rgbn<n> t_rgb8_to_rgbn;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+
+ // START OF IMAGE PROCESSING CHAIN
+ t_image2d_rgb8 i0_input; // input rgb8
+ t_image2d_rgbn i1_input; // input rgbn
+ t_image2d_bool m0_input; // mask input
+ t_histo3d h1_input; // histo input
+ t_image2d_int_u8 p1_histo1;// histo proj1
+ t_image2d_rgbn p1_histo2;// histo proj2
+ t_rgbn red(mln::literal::red);
+
+ mln::io::ppm::load(i0_input, input.c_str());
+ i1_input = mln::data::transform(i0_input, t_rgb8_to_rgbn());
+
+ if (0 < mask.size())
+ {
+ mln::io::pbm::load(m0_input, mask.c_str());
+ h1_input = mln::data::compute(t_histo3d_fun(),
+ (i1_input | mln::pw::value(m0_input)).rw());
+ }
+ else
+ {
+ h1_input = mln::data::compute(t_histo3d_fun(), i1_input);
+ }
+ // END OF IMAGE PROCESSING CHAIN
+
+ // BEGIN DUMPING
+ p1_histo1 = mln::display::display_histo3d_unsigned(h1_input);
+ p1_histo2 = mln::display::display3_histo3d_unsigned(h1_input, red);
+
+ mln::io::ppm::save(i1_input, quant.c_str());
+ mln::io::dump::save(h1_input, histo.c_str());
+ mln::io::pgm::save(p1_histo1, proj1.c_str());
+ mln::io::ppm::save(p1_histo2, proj2.c_str());
+ // END DUMPING
+}
+
+
+/// \brief The online documentation of the tool.
+///
+/// Print the documentation of the tool with the meaning of the
+/// different parameters.
+void usage()
+{
+ std::cout << std::endl;
+ std::cout << "histo input.ppm q quant.ppm histo.dump proj.pgm"
+ << " proj.ppm [msk.pbm]" <<
std::endl;
+ std::cout << std::endl;
+ std::cout << "where :"
<< std::endl;
+ std::cout << "* [ in] input.ppm is the 8 bits color ppm image"
<< std::endl;
+ std::cout << "* [ in] q is the degree of quantification"
+ << " {2,3,4,5,6,7,8}" <<
std::endl;
+ std::cout << "* [out] quant.ppm is the q bits quantified input"
+ << " image" <<
std::endl;
+ std::cout << "* [out] histo.dump is the quantified color"
+ << " histogram" <<
std::endl;
+ std::cout << "* [out] proj.pgm is the r/g projection of the"
+ << " histogram (summing along the blue axe)" <<
std::endl;
+ std::cout << "* [out] proj.ppm is the r/g projection of the"
+ << " histogram with maxima plot on" <<
std::endl;
+ std::cout << "* [ in] msk.pbm is the mask which selects the"
+ << " pixels" <<
std::endl;
+ std::cout << std::endl;
+}
+
+
+/// \brief The main entry of the software.
+///
+/// \param[in] input the input image.
+/// \param[in] q the quantification.
+/// \param[out] quant.ppm the name of the resulting quantified image.
+/// \param[out] histo.dump the name of the resulting 3d histogram.
+/// \param[out] proj.pgm the red/green projection of the histogram.
+/// \param[out] proj.ppm the red/green projection with maxima plot on.
+/// \param[in] msk.pbm the mask with selects the pixels of the input image.
+///
+/// This is the front hand for the image processing routine. The goal of this
+/// chain is to provide 3d histogram for further analysis and to give a way to
+/// see it.
+int main(int argc, char* args[])
+{
+ if (7 == argc || 8 == argc)
+ {
+ const std::string input(args[1]); // in
+ const char q = args[2][0]; // in
+ const std::string quant(args[3]); // out
+ const std::string histo(args[4]); // out
+ const std::string proj1(args[5]); // out
+ const std::string proj2(args[6]); // out
+ const std::string mask(8 == argc? args[7] : ""); // [in]
+
+ switch(q)
+ {
+ case '2': mk_histo<2>(input, quant, histo, proj1, proj2, mask);
break;
+ case '3': mk_histo<3>(input, quant, histo, proj1, proj2, mask);
break;
+ case '4': mk_histo<4>(input, quant, histo, proj1, proj2, mask);
break;
+ case '5': mk_histo<5>(input, quant, histo, proj1, proj2, mask);
break;
+ case '6': mk_histo<6>(input, quant, histo, proj1, proj2, mask);
break;
+ case '7': mk_histo<7>(input, quant, histo, proj1, proj2, mask);
break;
+ case '8': mk_histo<8>(input, quant, histo, proj1, proj2, mask);
break;
+ default: usage(); break;
+ }
+ }
+ else
+ usage();
+
+ return 0;
+}
diff --git a/scribo/sandbox/green/tools/labeling/iz/Makefile.am
b/scribo/sandbox/green/tools/labeling/iz/Makefile.am
new file mode 100644
index 0000000..57e7ec9
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/iz/Makefile.am
@@ -0,0 +1,153 @@
+#
+# Generic Makefile
+#
+
+#########
+# TOOLS #
+#########
+
+LOADLIBES= -lboost_filesystem
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+CXXFLAGS= -ggdb -O0 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O1 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O3 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+ECHO= echo
+RM= rm
+MKDIR= mkdir -p
+CP= cp
+
+SOURCE_PATTERN= green/tools
+BUILD__PATTERN= green/build/tools
+
+
+ifeq ($(findstring $(BUILD__PATTERN),$(PWD)), $(BUILD__PATTERN))
+# Case where make is done from build directory.
+SOURCE_DIR= $(subst $(BUILD__PATTERN),$(SOURCE_PATTERN),$(PWD))
+BUILD__DIR= $(PWD)/
+else
+# Case where make is done from source directory.
+SOURCE_DIR= $(PWD)/
+BUILD__DIR= $(subst $(SOURCE_PATTERN),$(BUILD__PATTERN),$(PWD))
+endif
+
+SRC= $(notdir $(wildcard $(SOURCE_DIR)/*.cc))
+OLD= $(notdir $(wildcard $(SOURCE_DIR)/*~))
+OBJ= $(patsubst %.cc,%.o,$(SRC))
+SOURCE_MAKEFILE=Makefile.am
+BUILD__MAKEFILE=Makefile
+TARGET_FILE= $(notdir $(PWD))
+SOURCE_FILES= $(notdir $(wildcard $(SOURCE_DIR)/*.*))
+BUILD__FILES= $(filter-out $(SRC) $(SOURCE_MAKEFILE), $(SOURCE_FILES))
+
+BUILD__F_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__FILES))
+SOURCE_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES))
+
+BUILD__M_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__MAKEFILE))
+SOURCE_M_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_MAKEFILE))
+
+TARGET_F_PATH= $(addprefix $(BUILD__DIR)/,$(TARGET_FILE))
+OBJ_F_PATH= $(addprefix $(BUILD__DIR)/,$(OBJ))
+SRC_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SRC))
+OLD_F_PATH= $(addprefix $(SOURCE_DIR)/,$(OLD))
+
+#############
+# BOOTSTRAP #
+#############
+
+
+bootstrap: $(BUILD__DIR) $(BUILD__F_PATH) $(BUILD__M_PATH)
+
+# Create, if nessary, the destination directory
+$(BUILD__DIR):
+ $(MKDIR) $(BUILD__DIR)
+
+# Copy, if nessary, all the files, except the Makefile.am
+$(BUILD__F_PATH): $(SOURCE_F_PATH)
+ $(CP) $(addprefix $(SOURCE_DIR),$(@F)) $@
+
+# Copy if nessary, the Makefile.am into Makefile
+$(BUILD__M_PATH): $(SOURCE_M_PATH)
+ $(CP) $(SOURCE_M_PATH) $(BUILD__M_PATH)
+
+
+#######
+# ALL #
+#######
+
+# We assume that the call is done from the build directory.
+# With the directive vpath, hidden files are found in the source directory.
+
+all: $(TARGET_F_PATH)
+
+
+$(TARGET_F_PATH): $(OBJ_F_PATH)
+ $(LINK.cc) $< $(LOADLIBES) $(LDLIBS) -o $@
+
+$(OBJ_F_PATH):$(SRC_F_PATH)
+ $(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+
+#########
+# CLEAN #
+#########
+
+# Force every time the deletion
+clean: clean_target clean_obj clean_dst clean_old #clean_make
+
+
+clean_target:
+ -@$(RM) $(TARGET_F_PATH) &> /dev/null
+
+clean_obj:
+ -@$(RM) $(OBJ_F_PATH) &> /dev/null
+
+clean_dst:
+ -@$(RM) $(BUILD_F_PATH) &> /dev/null
+
+clean_make:
+ -@$(RM) $(BUILD_M_PATH) &> /dev/null
+
+clean_old:
+ -@$(RM) $(OLD_F_PATH) &> /dev/null
+
+
+#########
+# PRINT #
+#########
+
+print: print_tools print_bootstrap
+
+print_tools:
+ @$(ECHO) "HOME = $(HOME)"
+ @$(ECHO) "INCLUDES = $(INCLUDES)"
+ @$(ECHO) "CXXFLAGS = $(CXXFLAGS)"
+ @$(ECHO) "ECHO = $(ECHO)"
+ @$(ECHO) "RM = $(RM)"
+ @$(ECHO) "MKDIR = $(MKDIR)"
+ @$(ECHO) "CP = $(CP)"
+ @$(ECHO)
+
+print_bootstrap:
+ @$(ECHO) "PWD = $(PWD)"
+ @$(ECHO) "SOURCE_PATTERN = $(SOURCE_PATTERN)"
+ @$(ECHO) "BUILD__PATTERN = $(BUILD__PATTERN)"
+ @$(ECHO) "SOURCE_DIR = $(SOURCE_DIR)"
+ @$(ECHO) "BUILD__DIR = $(BUILD__DIR)"
+ @$(ECHO) "SOURCE_MAKEFILE = $(SOURCE_MAKEFILE)"
+ @$(ECHO) "BUILD__MAKEFILE = $(BUILD__MAKEFILE)"
+ @$(ECHO) "TARGET_FILE = $(TARGET_FILE)"
+ @$(ECHO) "SOURCE_FILES = $(SOURCE_FILES)"
+ @$(ECHO) "SOURCE_F_PATH = $(SOURCE_F_PATH)"
+ @$(ECHO) "BUILD__FILES = $(BUILD__FILES)"
+ @$(ECHO) "BUILD__F_PATH = $(BUILD__F_PATH)"
+ @$(ECHO) "BUILD__M_PATH = $(BUILD__M_PATH)"
+ @$(ECHO) "SOURCE_M_PATH = $(SOURCE_M_PATH)"
+ @$(ECHO) "SRC = $(SRC)"
+ @$(ECHO) "OBJ = $(OBJ)"
+ @$(ECHO) "OLD = $(OLD)"
+ @$(ECHO) "SRC_F_PATH = $(SRC_F_PATH)"
+ @$(ECHO) "OBJ_F_PATH = $(OBJ_F_PATH)"
+ @$(ECHO) "OLD_F_PATH = $(OLD_F_PATH)"
+ @$(ECHO)
diff --git a/scribo/sandbox/green/tools/labeling/iz/iz.cc
b/scribo/sandbox/green/tools/labeling/iz/iz.cc
new file mode 100644
index 0000000..f977898
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/iz/iz.cc
@@ -0,0 +1,495 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// \brief This tool aimed at propagating segmented labels over the background.
+///
+/// Because regional maxima are very small regions, we need to make
+/// them growing to be representative in the color space.
+///
+/// \fixme Sorry, this source doesn't compile. The fact is the
+/// influence_zone_geodesic has changed and fastest version is more
+/// attentive to 2d image than 3d. That's why l.127 it call a 2d version of the
+/// method at() and it's make trouble with my code that uses a 3d image.
+
+#include <iostream>
+#include <fstream>
+#include <boost/format.hpp>
+
+#include <mln/accu/stat/histo3d_rgb.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/alias/neighb3d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+
+#include <mln/data/compute.hh>
+
+#include <mln/display/display_histo.hh>
+
+#include <mln/io/dump/load.hh>
+#include <mln/io/dump/save.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/io/pgm/load.hh>
+#include <mln/io/pgm/save.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/labeling/compute.hh>
+#include <mln/labeling/mean_values.hh>
+
+#include <mln/transform/influence_zone_geodesic.hh>
+#include <mln/transform/influence_zone_geodesic_saturated.hh>
+
+#include <mln/value/int_u8.hh>
+
+/// \ brief Compute the 2d labeled image.
+///
+/// Compute the 2d labeled image with the 2d labeled histogram and
+/// the input image.
+///
+/// \fixme Need to put it in mln library. Nothing to do here.
+template <unsigned n>
+struct t_labeling_rgbn : mln::Function_v2v< t_labeling_rgbn<n> >
+{
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::value::label_8 t_lbl8;
+ typedef t_rgbn argument;
+ typedef t_lbl8 result;
+ typedef mln::image3d<t_lbl8> t_label;
+
+ const t_label& _label;
+
+ t_labeling_rgbn(const t_label& label) : _label(label) {}
+
+ result operator()(const argument& c) const
+ {
+ t_lbl8 tmp = mln::opt::at(_label, c.blue(), c.red(), c.green());
+
+ return tmp;
+ }
+};
+
+/// \brief Compute and dump stats.
+///
+/// \param[in] i_input_rgb8 the 2d rgb input image.
+/// \param[in] l_input_lbl8 the 2d labeled image.
+/// \param[in] h_histo_rgbn the quantified histogram.
+/// \param[in] l_histo_lbl8 the labeled quantified histogram.
+/// \param[in] n_labels the number of labels (number of regions).
+/// \param[in] the name of the logging file for the stats.
+///
+/// Every segmented color has got it's own label. For each label, we
+/// compute the mean in the r/g/b channels, the total of pixels, the
+/// percentage of pixels in the image and the percentage without counting
+/// the background (label 0).
+void compute_stats(const mln::image2d<mln::value::rgb8>& i_input_rgb8,
+ const mln::image2d<mln::value::label_8>& l_input_lbl8,
+ const mln::image3d<unsigned>& h_histo_rgbn,
+ const mln::image3d<mln::value::label_8>& l_histo_lbl8,
+ const mln::value::label_8& n_labels,
+ const std::string& log)
+{
+ typedef mln::algebra::vec<3,float> t_vec3f;
+ typedef mln::accu::math::sum<unsigned,unsigned> t_sum;
+ typedef mln::accu::stat::mean<t_vec3f,t_vec3f,t_vec3f> t_mean;
+ typedef mln::util::array<unsigned> t_count_array;
+ typedef mln::util::array<t_vec3f> t_mean_array;
+
+ mln::util::array<float> abs((unsigned)(n_labels)+1);
+ mln::util::array<float> rel((unsigned)(n_labels)+1);
+ unsigned nb = 0;
+
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ abs[i] = 0.0;
+ rel[i] = 0.0;
+ }
+
+ // COMPUTE THE SUM
+ t_count_array count = mln::labeling::compute(t_sum(),
+ h_histo_rgbn,
+ l_histo_lbl8,
+ n_labels);
+
+ // COMPUTE THE TOTAL
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ unsigned c = count[i];
+ nb += c;
+ }
+
+ // COMPUTE THE PERCENTAGES
+ for (unsigned i = 0; i <= n_labels; ++i)
+ if (0 < count[i])
+ {
+ abs[i] = ((float)count[i] / nb)*100.0;
+ rel[i] = ((float)count[i] / (nb - count[0]))*100.0;
+ }
+
+ // COMPUTE THE MEAN
+
+ t_mean_array mean = mln::labeling::compute(t_mean(),
+ i_input_rgb8,
+ l_input_lbl8,
+ n_labels);
+
+ // CORRECT 0 LABEL STATS
+ rel[0] = 0;
+ mean[0][0] = 255.0;
+ mean[0][1] = 255.0;
+ mean[0][2] = 0.0;
+
+ // PRINT STATS
+ std::ofstream log_stream(log.c_str());
+
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ const t_vec3f& mean_v = mean[i];
+
+ log_stream << boost::format("%2i|"
+ "r = %6.2f, g = %6.2f, b = %6.2f |"
+ "c = %7i, %%i = %5.2f, %%c = %5.2f")
+ % i
+ % mean_v[0]
+ % mean_v[1]
+ % mean_v[2]
+ % count[i]
+ % abs[i]
+ % rel[i]
+ << std::endl;
+ }
+
+ log_stream << std::endl << std::endl;
+ log_stream.flush();
+ log_stream.close();
+}
+
+
+/// \brief Verify that a marker is present on the stream.
+///
+/// \param[in] stream the input stream.
+/// \param[in] expected the expected character to be on the stream.
+///
+/// \return true if the expected character was on the stream, else false.
+///
+/// This routine enables to read structured colormap file and to
+/// follow the structure while reading colors.
+bool expect(std::istream& stream, const std::string expected)
+{
+ bool result;
+ std::string got;
+
+ stream >> got;
+
+ result = (got == expected);
+
+ return result;
+}
+
+/// \brief Read a line of the colormap.
+///
+/// \param[in] stream the input stream.
+/// \param[out] color the output color read in the current line.
+///
+/// \return the modified streams.
+///
+/// This routine splits a line in differents marks in order to read
+/// the R/G/B channels of the output color.
+std::istream& operator>>(std::istream& stream,
+ mln::algebra::vec<3,float>& color)
+{
+ unsigned lbl;
+
+ stream >> lbl;
+ if (expect(stream, std::string("|")) &&
+ expect(stream, std::string("r")) &&
+ expect(stream, std::string("=")))
+ {
+ stream >> color[0];
+
+ if (expect(stream, std::string(",")) &&
+ expect(stream, std::string("g")) &&
+ expect(stream, std::string("=")))
+ {
+ stream >> color[1];
+
+ if (expect(stream, std::string(",")) &&
+ expect(stream, std::string("b")) &&
+ expect(stream, std::string("=")))
+ {
+ stream >> color[2];
+ }
+ }
+ }
+
+ return stream;
+}
+
+
+/// \brief Load the colormap.
+///
+/// \param[out] m2_label the memory representation of the colormap.
+/// \param[in] colormap the name of the file where the colormap is stocked.
+///
+/// This routine coordonates parsing actions in the colormap file.
+void load(mln::util::array< mln::algebra::vec<3,float> >& m2_label,
+ const char *colormap)
+{
+ typedef mln::algebra::vec<3,float> t_vec3f;
+ typedef mln::util::array<t_vec3f> t_mean_array;
+
+ std::ifstream stream(colormap);
+ std::string buffer;
+
+ getline(stream, buffer);
+
+ while (0 < buffer.size())
+ {
+ std::stringstream line(buffer);
+ t_vec3f mean_v;
+
+ line >> mean_v;
+
+ m2_label.append(mean_v);
+
+ getline(stream, buffer);
+ }
+
+ stream.close();
+}
+
+/// \brief The image processing routine.
+///
+/// \param[in] labeled the name of the 3d labeled histogram.
+/// \param[in] d the depth for the zone influence transformation, 0 eq infinite.
+/// \param[in] nbh the neighbouring (c6|c18|c26).
+/// \param[in] input the 8 bit color ppm input image.
+/// \param[in] quant the name of quantified RGB input image.
+/// \param[in] histo the name of the 3d RGB quantified histogram.
+/// \param[in] colormap the name of the colormap for labels.
+/// \param[out] iz is the iz labeled 3d histogram.
+/// \param[out] proj the red/green projection of the segmented histogram.
+/// \param[out] mean the name of the mean rebuilded image.
+/// \param[out] stats the name of the statistics file (optional).
+///
+/// The core routine starts with image loading, then calls the rigth
+/// iz version and then dumps the results, computes the stats and
+/// makes r/g projection. The role of the iz routine is to propagated
+/// labels around the regional maxima to enlarge the small previous
+/// obtained regions.
+template<unsigned n>
+void mk_iz(const std::string& labeled, // in
+ const unsigned d, // in
+ const mln::neighb3d& nbh, // in
+ const std::string& input, // in
+ const std::string& quant, // in
+ const std::string& histo, // in
+ const std::string& colormap,// in
+ const std::string& iz, // out
+ const std::string& proj, // out
+ const std::string& mean, // out
+ const std::string& stats) // [out]
+{
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::label_8 t_lbl8;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::algebra::vec<3,float> t_v3f;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image2d<t_lbl8> t_image2d_lbl8;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::image3d<t_lbl8> t_image3d_lbl8;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+ typedef mln::accu::stat::mean<t_v3f,t_v3f,t_v3f> t_mean;
+ typedef mln::util::array<t_v3f> t_mean_array;
+
+ // START OF IMAGE PROCESSING CHAIN
+ t_image2d_rgb8 i0_input; // input img
+ t_image2d_rgbn i1_input; // quant img
+ t_histo3d h1_input; // histo input
+ t_histo3d h2_input; // histo input
+ t_image2d_int_u8 p1_histo; // histo proj
+ t_image2d_rgb8 p3_histo; // histo proj
+ t_image3d_lbl8 l2_histo; // label histo
+ t_image3d_lbl8 l3_histo; // iz label hist
+ t_mean_array m2_label; // colormap
+ t_mean_array m3_label; // colormap
+ t_image2d_lbl8 l3_input; // label input
+ t_image2d_rgb8 i3_mean; // reconstructed
+
+ t_lbl8 n_lbl; // nb labels
+ t_rgb8 red(mln::literal::red);
+
+ mln::io::dump::load(l2_histo, labeled.c_str());
+ mln::io::ppm::load(i0_input, input.c_str());
+ mln::io::ppm::load(i1_input, quant.c_str());
+ mln::io::dump::load(h1_input, histo.c_str());
+ load(m2_label, colormap.c_str());
+
+ if (0 == d)
+ {
+ l3_histo = mln::transform::influence_zone_geodesic(l2_histo, nbh);
+ }
+ else
+ {
+ l3_histo =mln::transform::influence_zone_geodesic_saturated(l2_histo,nbh,d);
+ }
+ // END OF IMAGE PROCESSING CHAIN
+
+ // BEGIN DUMPING
+
+ n_lbl = (t_lbl8)(m2_label.size()-1);
+
+ l3_input = mln::data::transform(i1_input, t_labeling_rgbn<n>(l3_histo));
+ i3_mean = mln::labeling::mean_values(i0_input, l3_input, n_lbl);
+ m3_label = mln::labeling::compute(t_mean(), i0_input, l3_input, n_lbl);
+
+ // CORRECT 0 LABEL STATS
+ m3_label[0][0] = 255.0;
+ m3_label[0][1] = 255.0;
+ m3_label[0][2] = 0.0;
+
+ p3_histo = mln::display::display3_histo3d_unsigned<n>(h1_input,
+ l3_histo,
+ m3_label,
+ red);
+ mln::io::dump::save(l3_input, iz.c_str());
+ mln::io::ppm::save(p3_histo, proj.c_str());
+ mln::io::ppm::save(i3_mean, mean.c_str());
+
+ if (0 < stats.size())
+ compute_stats(i0_input, l3_input, h1_input, l3_histo, n_lbl, stats);
+
+ // END DUMPING
+}
+
+
+/// \brief The online documentation of the tool.
+///
+/// Print the documentation of the tool with the meaning of the
+/// different parameters.
+void usage()
+{
+ std::cout << std::endl;
+ std::cout << "iz labeled.dump d nbh input.ppm q quant.ppm"
+ << " histo.dump colormap.txt iz.dump proj.ppm"
+ << " mean.ppm [stats.txt]" <<
std::endl;
+ std::cout << std::endl;
+ std::cout << "where :"
<< std::endl;
+ std::cout << "* [ in] labeled.dump is the labeled 3d histogram"
<< std::endl;
+ std::cout << "* [ in] d is the depth for the zone influence"
+ << " transformation (0 means infinite)" <<
std::endl;
+ std::cout << "* [ in] nbh is the 3d neighbourhood {6,18,26}"
<< std::endl;
+ std::cout << "* [ in] input.ppm is the 8 bits color ppm image"
<< std::endl;
+ std::cout << "* [ in] q is the degree of quantification"
+ << " {2,3,4,5,6,7,8}" <<
std::endl;
+ std::cout << "* [ in] quant.ppm is the q bits quantified input"
+ << " image" <<
std::endl;
+ std::cout << "* [ in] histo.dump is the quantified color"
+ << " histogram" <<
std::endl;
+ std::cout << "* [ in] colormap.txt is the colormap for labels"
<< std::endl;
+ std::cout << "* [out] iz.dump is the iz labeled 3d histogram"
<< std::endl;
+ std::cout << "* [out] proj.ppm is the r/g projection of the"
+ << " histogram with maxima label plot on" <<
std::endl;
+ std::cout << "* [out] mean.ppm is the mean reconstructed image"
<< std::endl;
+ std::cout << "* [out] stats.txt is the statistical label
report"<< std::endl;
+ std::cout << std::endl;
+}
+
+/// \brief The main entry of the software.
+///
+/// \param[in] labeled.dump the name of the 3d labeled histogram.
+/// \param[in] d the depth for the zone influence transformation, 0 eq infinite.
+/// \param[in] nbh the code for the neighbouring (6|18|26).
+/// \param[in] input.ppm the 8 bit color ppm input image.
+/// \param[in] q is the degree of quantification {2,3,4,5,6,7,8}.
+/// \param[in] quant.ppm the name of quantified RGB input image.
+/// \param[in] histo.dump the name of the 3d RGB quantified histogram.
+/// \param[in] colormap.txt the name of the colormap for labels.
+/// \param[out] iz.dump is the iz labeled 3d histogram.
+/// \param[out] proj.ppm the red/green projection of the segmented histogram.
+/// \param[out] mean.ppm the name of the mean rebuilded image.
+/// \param[out] stats.txt the name of the statistics file (optional).
+///
+/// This is the front hand for the image processing routine. The goal of this
+/// chain is to provide 3d histogram for further analysis and to give a way to
+/// see it.
+int main(int argc, char* args[])
+{
+ if (12 == argc || 13 == argc)
+ {
+ const std::string labeled(args[1]); // in
+ const unsigned d = atoi(args[2]); // in
+ const char nbh = args[3][0]; // in
+ const std::string input(args[4]); // in
+ const char q = args[5][0]; // in
+ const std::string quant(args[6]); // in
+ const std::string histo(args[7]); // in
+ const std::string colormap(args[8]); // in
+ const std::string iz(args[9]); // out
+ const std::string proj(args[10]); // out
+ const std::string mean(args[11]); // out
+ const std::string stats(13 == argc? args[12] : ""); // [out]
+
+
+ mln::neighb3d neighbourhood;
+
+ switch (nbh)
+ {
+ case '6': neighbourhood = mln::c6(); break;
+ case '1': neighbourhood = mln::c18(); break;
+ case '2': neighbourhood = mln::c26(); break;
+ default: usage(); return 0; // force usage and quit
+ }
+
+ switch (q)
+ {
+ case '2' : mk_iz<2>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '3' : mk_iz<3>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '4' : mk_iz<4>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '5' : mk_iz<5>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '6' : mk_iz<6>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '7' : mk_iz<7>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ case '8' : mk_iz<8>(labeled,d,neighbourhood,input,quant,
+ histo,colormap,iz,proj,mean,stats);break;
+ default: usage(); break;
+ }
+ }
+ else
+ usage();
+
+ return 0;
+}
diff --git a/scribo/sandbox/green/tools/labeling/opening/Makefile.am
b/scribo/sandbox/green/tools/labeling/opening/Makefile.am
new file mode 100644
index 0000000..f03a836
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/opening/Makefile.am
@@ -0,0 +1,153 @@
+#
+# Generic Makefile
+#
+
+#########
+# TOOLS #
+#########
+
+#LOADLIBES= -lboost_filesystem
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+CXXFLAGS= -ggdb -O0 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O1 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O3 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+ECHO= echo
+RM= rm
+MKDIR= mkdir -p
+CP= cp
+
+SOURCE_PATTERN= green/tools
+BUILD__PATTERN= green/build/tools
+
+
+ifeq ($(findstring $(BUILD__PATTERN),$(PWD)), $(BUILD__PATTERN))
+# Case where make is done from build directory.
+SOURCE_DIR= $(subst $(BUILD__PATTERN),$(SOURCE_PATTERN),$(PWD))
+BUILD__DIR= $(PWD)/
+else
+# Case where make is done from source directory.
+SOURCE_DIR= $(PWD)/
+BUILD__DIR= $(subst $(SOURCE_PATTERN),$(BUILD__PATTERN),$(PWD))
+endif
+
+SRC= $(notdir $(wildcard $(SOURCE_DIR)/*.cc))
+OLD= $(notdir $(wildcard $(SOURCE_DIR)/*~))
+OBJ= $(patsubst %.cc,%.o,$(SRC))
+SOURCE_MAKEFILE=Makefile.am
+BUILD__MAKEFILE=Makefile
+TARGET_FILE= $(notdir $(PWD))
+SOURCE_FILES= $(notdir $(wildcard $(SOURCE_DIR)/*.*))
+BUILD__FILES= $(filter-out $(SRC) $(SOURCE_MAKEFILE), $(SOURCE_FILES))
+
+BUILD__F_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__FILES))
+SOURCE_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES))
+
+BUILD__M_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__MAKEFILE))
+SOURCE_M_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_MAKEFILE))
+
+TARGET_F_PATH= $(addprefix $(BUILD__DIR)/,$(TARGET_FILE))
+OBJ_F_PATH= $(addprefix $(BUILD__DIR)/,$(OBJ))
+SRC_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SRC))
+OLD_F_PATH= $(addprefix $(SOURCE_DIR)/,$(OLD))
+
+#############
+# BOOTSTRAP #
+#############
+
+
+bootstrap: $(BUILD__DIR) $(BUILD__F_PATH) $(BUILD__M_PATH)
+
+# Create, if nessary, the destination directory
+$(BUILD__DIR):
+ $(MKDIR) $(BUILD__DIR)
+
+# Copy, if nessary, all the files, except the Makefile.am
+$(BUILD__F_PATH): $(SOURCE_F_PATH)
+ $(CP) $(addprefix $(SOURCE_DIR),$(@F)) $@
+
+# Copy if nessary, the Makefile.am into Makefile
+$(BUILD__M_PATH): $(SOURCE_M_PATH)
+ $(CP) $(SOURCE_M_PATH) $(BUILD__M_PATH)
+
+
+#######
+# ALL #
+#######
+
+# We assume that the call is done from the build directory.
+# With the directive vpath, hidden files are found in the source directory.
+
+all: $(TARGET_F_PATH)
+
+
+$(TARGET_F_PATH): $(OBJ_F_PATH)
+ $(LINK.cc) $< $(LOADLIBES) $(LDLIBS) -o $@
+
+$(OBJ_F_PATH):$(SRC_F_PATH)
+ $(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+
+#########
+# CLEAN #
+#########
+
+# Force every time the deletion
+clean: clean_target clean_obj clean_dst clean_old #clean_make
+
+
+clean_target:
+ -@$(RM) $(TARGET_F_PATH) &> /dev/null
+
+clean_obj:
+ -@$(RM) $(OBJ_F_PATH) &> /dev/null
+
+clean_dst:
+ -@$(RM) $(BUILD_F_PATH) &> /dev/null
+
+clean_make:
+ -@$(RM) $(BUILD_M_PATH) &> /dev/null
+
+clean_old:
+ -@$(RM) $(OLD_F_PATH) &> /dev/null
+
+
+#########
+# PRINT #
+#########
+
+print: print_tools print_bootstrap
+
+print_tools:
+ @$(ECHO) "HOME = $(HOME)"
+ @$(ECHO) "INCLUDES = $(INCLUDES)"
+ @$(ECHO) "CXXFLAGS = $(CXXFLAGS)"
+ @$(ECHO) "ECHO = $(ECHO)"
+ @$(ECHO) "RM = $(RM)"
+ @$(ECHO) "MKDIR = $(MKDIR)"
+ @$(ECHO) "CP = $(CP)"
+ @$(ECHO)
+
+print_bootstrap:
+ @$(ECHO) "PWD = $(PWD)"
+ @$(ECHO) "SOURCE_PATTERN = $(SOURCE_PATTERN)"
+ @$(ECHO) "BUILD__PATTERN = $(BUILD__PATTERN)"
+ @$(ECHO) "SOURCE_DIR = $(SOURCE_DIR)"
+ @$(ECHO) "BUILD__DIR = $(BUILD__DIR)"
+ @$(ECHO) "SOURCE_MAKEFILE = $(SOURCE_MAKEFILE)"
+ @$(ECHO) "BUILD__MAKEFILE = $(BUILD__MAKEFILE)"
+ @$(ECHO) "TARGET_FILE = $(TARGET_FILE)"
+ @$(ECHO) "SOURCE_FILES = $(SOURCE_FILES)"
+ @$(ECHO) "SOURCE_F_PATH = $(SOURCE_F_PATH)"
+ @$(ECHO) "BUILD__FILES = $(BUILD__FILES)"
+ @$(ECHO) "BUILD__F_PATH = $(BUILD__F_PATH)"
+ @$(ECHO) "BUILD__M_PATH = $(BUILD__M_PATH)"
+ @$(ECHO) "SOURCE_M_PATH = $(SOURCE_M_PATH)"
+ @$(ECHO) "SRC = $(SRC)"
+ @$(ECHO) "OBJ = $(OBJ)"
+ @$(ECHO) "OLD = $(OLD)"
+ @$(ECHO) "SRC_F_PATH = $(SRC_F_PATH)"
+ @$(ECHO) "OBJ_F_PATH = $(OBJ_F_PATH)"
+ @$(ECHO) "OLD_F_PATH = $(OLD_F_PATH)"
+ @$(ECHO)
diff --git a/scribo/sandbox/green/tools/labeling/opening/opening.cc
b/scribo/sandbox/green/tools/labeling/opening/opening.cc
new file mode 100644
index 0000000..c4f1cb9
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/opening/opening.cc
@@ -0,0 +1,174 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// \brief This tool aimed at filtering the previous 3d RGB histogram.
+///
+/// The current filtering is managed with morphological volume attribute.
+///
+/// \fixme I don't know if the volume attribute do well it's
+/// job. Sometimes, there is something strange happened. I know it's
+/// related to that part of processing but i can't tell where it is wrong.
+
+#include <iostream>
+
+#include <mln/accu/stat/histo3d_rgb.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/alias/neighb3d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+
+#include <mln/data/compute.hh>
+
+#include <mln/display/display_histo.hh>
+
+#include <mln/io/dump/load.hh>
+#include <mln/io/dump/save.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/io/pgm/save.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/morpho/opening/volume.hh>
+
+#include <mln/value/rgb.hh>
+#include <mln/value/int_u8.hh>
+
+/// \brief The histogram image processing chain.
+///
+/// \param[in] histo the name of the input histogram to filter.
+/// \param[in] min_vol the minimum volume threshold to leave in the image.
+/// \param[out] opened the name of the filtered histogram.
+/// \param[out] proj1 the red/green projection of the histogram.
+/// \param[out] proj2 the red/green projection with maxima plot on.
+///
+/// This chain aimed at filtering 3d RGB histogram by volume
+/// morphological attribute. The threshold indicates the minimum
+/// volume information to leave, otherwhise information with less
+/// volume attribute is discarded. Then, dumping and
+/// projections are done.
+template <unsigned n>
+void mk_opening(const std::string& histo, // in
+ const unsigned min_vol, // in
+ const std::string& opened, // out
+ const std::string& proj1, // out
+ const std::string& proj2) // out
+{
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+
+ // START OF IMAGE PROCESSING CHAIN
+ t_histo3d h1_input; // histo input
+ t_histo3d h2_input; // histo input
+ t_image2d_int_u8 p1_histo1;// histo proj1
+ t_image2d_rgbn p1_histo2;// histo proj2
+ t_rgbn red(mln::literal::red);
+
+ mln::io::dump::load(h1_input, histo.c_str());
+ h2_input = mln::morpho::opening::volume(h1_input, mln::c6(), min_vol);
+ // END OF IMAGE PROCESSING CHAIN
+
+ // BEGIN DUMPING
+ p1_histo1 = mln::display::display_histo3d_unsigned(h2_input);
+ p1_histo2 = mln::display::display3_histo3d_unsigned(h2_input, red);
+ mln::io::dump::save(h2_input, opened.c_str());
+ mln::io::pgm::save(p1_histo1, proj1.c_str());
+ mln::io::ppm::save(p1_histo2, proj2.c_str());
+ // END DUMPING
+}
+
+
+/// \brief The online documentation of the tool.
+///
+/// Print the documentation of the tool with the meaning of the
+/// different parameters.
+void usage()
+{
+ std::cout << std::endl;
+ std::cout << "opening q histo.dump v opened.dump proj.pgm"
+ << " proj.ppm" <<
std::endl;
+ std::cout << std::endl;
+ std::cout << "where :"
<< std::endl;
+ std::cout << "* [ in] q is the degree of quantification"
+ << " {2,3,4,5,6,7,8}" <<
std::endl;
+ std::cout << "* [ in] histo.dump is the quantified color"
+ << " histogram" <<
std::endl;
+ std::cout << "* [ in] v is the minimum size (in pixels) of"
+ << " each composant" <<
std::endl;
+ std::cout << "* [out] opened.dump is the filtered histogram"
<< std::endl;
+ std::cout << "* [out] proj.pgm is the r/g projection of the"
+ << " histogram (summing along the blue axe)" <<
std::endl;
+ std::cout << "* [out] proj.ppm is the r/g projection of the"
+ << " histogram with maxima plot on" <<
std::endl;
+ std::cout << std::endl;
+}
+
+
+/// \brief The main entry of the software.
+///
+/// \param[in] q the quantification previously used.
+/// \param[in] histo the name of the 3d RGB histogram to filter.
+/// \param[in] min_vol the threshold of the morphological filtering.
+/// \param[out] opened.dump the name of the resulting 3d histogram.
+/// \param[out] proj.pgm the red/green projection of the histogram.
+/// \param[out] proj2.ppm the red/green projection with maxima plot on.
+///
+/// This is the front hand for the image processing routine. The goal of this
+/// chain is to filter 3d histogram for further analysis and to give a way to
+/// see it.
+int main(int argc, char* args[])
+{
+ if (7 == argc)
+ {
+ const char q = args[1][0]; // in
+ const std::string histo(args[2]); // in
+ const unsigned min_vol = atoi(args[3]); // in
+ const std::string opened(args[4]); // out
+ const std::string proj1(args[5]); // out
+ const std::string proj2(args[6]); // out
+
+ switch(q)
+ {
+ case '2': mk_opening<2>(histo, min_vol, opened, proj1, proj2);
break;
+ case '3': mk_opening<3>(histo, min_vol, opened, proj1, proj2);
break;
+ case '4': mk_opening<4>(histo, min_vol, opened, proj1, proj2);
break;
+ case '5': mk_opening<5>(histo, min_vol, opened, proj1, proj2);
break;
+ case '6': mk_opening<6>(histo, min_vol, opened, proj1, proj2);
break;
+ case '7': mk_opening<7>(histo, min_vol, opened, proj1, proj2);
break;
+ case '8': mk_opening<8>(histo, min_vol, opened, proj1, proj2);
break;
+ default: usage(); break;
+ }
+ }
+ else
+ usage();
+
+ return 0;
+}
diff --git a/scribo/sandbox/green/tools/labeling/regmax/Makefile.am
b/scribo/sandbox/green/tools/labeling/regmax/Makefile.am
new file mode 100644
index 0000000..f03a836
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/regmax/Makefile.am
@@ -0,0 +1,153 @@
+#
+# Generic Makefile
+#
+
+#########
+# TOOLS #
+#########
+
+#LOADLIBES= -lboost_filesystem
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+CXXFLAGS= -ggdb -O0 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O1 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+#CXXFLAGS= -DNDEBUG -O3 -Wall -W -pedantic -ansi -pipe $(INCLUDES)
+ECHO= echo
+RM= rm
+MKDIR= mkdir -p
+CP= cp
+
+SOURCE_PATTERN= green/tools
+BUILD__PATTERN= green/build/tools
+
+
+ifeq ($(findstring $(BUILD__PATTERN),$(PWD)), $(BUILD__PATTERN))
+# Case where make is done from build directory.
+SOURCE_DIR= $(subst $(BUILD__PATTERN),$(SOURCE_PATTERN),$(PWD))
+BUILD__DIR= $(PWD)/
+else
+# Case where make is done from source directory.
+SOURCE_DIR= $(PWD)/
+BUILD__DIR= $(subst $(SOURCE_PATTERN),$(BUILD__PATTERN),$(PWD))
+endif
+
+SRC= $(notdir $(wildcard $(SOURCE_DIR)/*.cc))
+OLD= $(notdir $(wildcard $(SOURCE_DIR)/*~))
+OBJ= $(patsubst %.cc,%.o,$(SRC))
+SOURCE_MAKEFILE=Makefile.am
+BUILD__MAKEFILE=Makefile
+TARGET_FILE= $(notdir $(PWD))
+SOURCE_FILES= $(notdir $(wildcard $(SOURCE_DIR)/*.*))
+BUILD__FILES= $(filter-out $(SRC) $(SOURCE_MAKEFILE), $(SOURCE_FILES))
+
+BUILD__F_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__FILES))
+SOURCE_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES))
+
+BUILD__M_PATH= $(addprefix $(BUILD__DIR)/,$(BUILD__MAKEFILE))
+SOURCE_M_PATH= $(addprefix $(SOURCE_DIR)/,$(SOURCE_MAKEFILE))
+
+TARGET_F_PATH= $(addprefix $(BUILD__DIR)/,$(TARGET_FILE))
+OBJ_F_PATH= $(addprefix $(BUILD__DIR)/,$(OBJ))
+SRC_F_PATH= $(addprefix $(SOURCE_DIR)/,$(SRC))
+OLD_F_PATH= $(addprefix $(SOURCE_DIR)/,$(OLD))
+
+#############
+# BOOTSTRAP #
+#############
+
+
+bootstrap: $(BUILD__DIR) $(BUILD__F_PATH) $(BUILD__M_PATH)
+
+# Create, if nessary, the destination directory
+$(BUILD__DIR):
+ $(MKDIR) $(BUILD__DIR)
+
+# Copy, if nessary, all the files, except the Makefile.am
+$(BUILD__F_PATH): $(SOURCE_F_PATH)
+ $(CP) $(addprefix $(SOURCE_DIR),$(@F)) $@
+
+# Copy if nessary, the Makefile.am into Makefile
+$(BUILD__M_PATH): $(SOURCE_M_PATH)
+ $(CP) $(SOURCE_M_PATH) $(BUILD__M_PATH)
+
+
+#######
+# ALL #
+#######
+
+# We assume that the call is done from the build directory.
+# With the directive vpath, hidden files are found in the source directory.
+
+all: $(TARGET_F_PATH)
+
+
+$(TARGET_F_PATH): $(OBJ_F_PATH)
+ $(LINK.cc) $< $(LOADLIBES) $(LDLIBS) -o $@
+
+$(OBJ_F_PATH):$(SRC_F_PATH)
+ $(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+
+#########
+# CLEAN #
+#########
+
+# Force every time the deletion
+clean: clean_target clean_obj clean_dst clean_old #clean_make
+
+
+clean_target:
+ -@$(RM) $(TARGET_F_PATH) &> /dev/null
+
+clean_obj:
+ -@$(RM) $(OBJ_F_PATH) &> /dev/null
+
+clean_dst:
+ -@$(RM) $(BUILD_F_PATH) &> /dev/null
+
+clean_make:
+ -@$(RM) $(BUILD_M_PATH) &> /dev/null
+
+clean_old:
+ -@$(RM) $(OLD_F_PATH) &> /dev/null
+
+
+#########
+# PRINT #
+#########
+
+print: print_tools print_bootstrap
+
+print_tools:
+ @$(ECHO) "HOME = $(HOME)"
+ @$(ECHO) "INCLUDES = $(INCLUDES)"
+ @$(ECHO) "CXXFLAGS = $(CXXFLAGS)"
+ @$(ECHO) "ECHO = $(ECHO)"
+ @$(ECHO) "RM = $(RM)"
+ @$(ECHO) "MKDIR = $(MKDIR)"
+ @$(ECHO) "CP = $(CP)"
+ @$(ECHO)
+
+print_bootstrap:
+ @$(ECHO) "PWD = $(PWD)"
+ @$(ECHO) "SOURCE_PATTERN = $(SOURCE_PATTERN)"
+ @$(ECHO) "BUILD__PATTERN = $(BUILD__PATTERN)"
+ @$(ECHO) "SOURCE_DIR = $(SOURCE_DIR)"
+ @$(ECHO) "BUILD__DIR = $(BUILD__DIR)"
+ @$(ECHO) "SOURCE_MAKEFILE = $(SOURCE_MAKEFILE)"
+ @$(ECHO) "BUILD__MAKEFILE = $(BUILD__MAKEFILE)"
+ @$(ECHO) "TARGET_FILE = $(TARGET_FILE)"
+ @$(ECHO) "SOURCE_FILES = $(SOURCE_FILES)"
+ @$(ECHO) "SOURCE_F_PATH = $(SOURCE_F_PATH)"
+ @$(ECHO) "BUILD__FILES = $(BUILD__FILES)"
+ @$(ECHO) "BUILD__F_PATH = $(BUILD__F_PATH)"
+ @$(ECHO) "BUILD__M_PATH = $(BUILD__M_PATH)"
+ @$(ECHO) "SOURCE_M_PATH = $(SOURCE_M_PATH)"
+ @$(ECHO) "SRC = $(SRC)"
+ @$(ECHO) "OBJ = $(OBJ)"
+ @$(ECHO) "OLD = $(OLD)"
+ @$(ECHO) "SRC_F_PATH = $(SRC_F_PATH)"
+ @$(ECHO) "OBJ_F_PATH = $(OBJ_F_PATH)"
+ @$(ECHO) "OLD_F_PATH = $(OLD_F_PATH)"
+ @$(ECHO)
diff --git a/scribo/sandbox/green/tools/labeling/regmax/regmax.cc
b/scribo/sandbox/green/tools/labeling/regmax/regmax.cc
new file mode 100644
index 0000000..1fc9976
--- /dev/null
+++ b/scribo/sandbox/green/tools/labeling/regmax/regmax.cc
@@ -0,0 +1,428 @@
+// Copyright (C) 2007, 2008, 2009, 2010 EPITA 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.
+
+/// \file
+///
+/// \brief This tool aimed at segmenting the histogram.
+///
+/// The current segmentation of the histogram is done by finding the
+/// regional maxima. Regional maxima are isolated small regions inside
+/// the background (label 0).
+
+#include <iostream>
+#include <fstream>
+#include <boost/format.hpp>
+
+#include <mln/accu/stat/histo3d_rgb.hh>
+#include <mln/accu/stat/mean.hh>
+
+#include <mln/algebra/vec.hh>
+
+#include <mln/core/macros.hh>
+#include <mln/core/alias/neighb3d.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+
+#include <mln/data/compute.hh>
+
+#include <mln/debug/println.hh>
+#include <mln/display/display_histo.hh>
+
+#include <mln/io/dump/load.hh>
+#include <mln/io/dump/save.hh>
+#include <mln/io/pgm/load.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/ppm/save.hh>
+
+#include <mln/labeling/regional_maxima.hh>
+#include <mln/labeling/compute.hh>
+#include <mln/labeling/mean_values.hh>
+
+#include <mln/literal/colors.hh>
+
+#include <mln/morpho/opening/volume.hh>
+
+#include <mln/value/label_8.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/value/rgb8.hh>
+
+#include <mln/util/array.hh>
+
+/// \ brief Compute the 2d labeled image.
+///
+/// Compute the 2d labeled image with the 2d labeled histogram and
+/// the input image.
+///
+/// \fixme Need to put it in mln library. Nothing to do here.
+template <unsigned n>
+struct t_labeling_rgbn : mln::Function_v2v< t_labeling_rgbn<n> >
+{
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::value::label_8 t_lbl8;
+ typedef t_rgbn argument;
+ typedef t_lbl8 result;
+ typedef mln::image3d<t_lbl8> t_label;
+
+ const t_label& _label;
+
+ t_labeling_rgbn(const t_label& label) : _label(label) {}
+
+ result operator()(const argument& c) const
+ {
+ t_lbl8 tmp = mln::opt::at(_label, c.blue(), c.red(), c.green());
+
+ return tmp;
+ }
+};
+
+
+/// \brief Compute and dump stats.
+///
+/// \param[in] i_input_rgb8 the 2d rgb input image.
+/// \param[in] l_input_lbl8 the 2d labeled image.
+/// \param[in] h_histo_rgbn the quantified histogram.
+/// \param[in] l_histo_lbl8 the labeled quantified histogram.
+/// \param[in] n_labels the number of labels (number of regions).
+/// \param[in] the name of the logging file for the stats.
+///
+/// Every segmented color has got it's own label. For each label, we
+/// compute the mean in the r/g/b channels, the total of pixels, the
+/// percentage of pixels in the image and the percentage without counting
+/// the background (label 0).
+void compute_stats(const mln::image2d<mln::value::rgb8>& i_input_rgb8,
+ const mln::image2d<mln::value::label_8>& l_input_lbl8,
+ const mln::image3d<unsigned>& h_histo_rgbn,
+ const mln::image3d<mln::value::label_8>& l_histo_lbl8,
+ const mln::value::label_8& n_labels,
+ const std::string& log)
+{
+ typedef mln::algebra::vec<3,float> t_vec3f;
+ typedef mln::accu::math::sum<unsigned,unsigned> t_sum;
+ typedef mln::accu::stat::mean<t_vec3f,t_vec3f,t_vec3f> t_mean;
+ typedef mln::util::array<unsigned> t_count_array;
+ typedef mln::util::array<t_vec3f> t_mean_array;
+
+ mln::util::array<float> abs((unsigned)(n_labels)+1);
+ mln::util::array<float> rel((unsigned)(n_labels)+1);
+ unsigned nb = 0;
+
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ abs[i] = 0.0;
+ rel[i] = 0.0;
+ }
+
+ // COMPUTE THE SUM
+ t_count_array count = mln::labeling::compute(t_sum(),
+ h_histo_rgbn,
+ l_histo_lbl8,
+ n_labels);
+
+ // COMPUTE THE TOTAL
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ unsigned c = count[i];
+ nb += c;
+ }
+
+ // COMPUTE THE PERCENTAGES
+ for (unsigned i = 0; i <= n_labels; ++i)
+ if (0 < count[i])
+ {
+ abs[i] = ((float)count[i] / nb)*100.0;
+ rel[i] = ((float)count[i] / (nb - count[0]))*100.0;
+ }
+
+ // COMPUTE THE MEAN
+
+ t_mean_array mean = mln::labeling::compute(t_mean(),
+ i_input_rgb8,
+ l_input_lbl8,
+ n_labels);
+
+ // CORRECT 0 LABEL STATS
+ rel[0] = 0;
+ mean[0][0] = 255.0;
+ mean[0][1] = 255.0;
+ mean[0][2] = 0.0;
+
+ // PRINT STATS
+ std::ofstream log_stream(log.c_str());
+
+ for (unsigned i = 0; i <= n_labels; ++i)
+ {
+ const t_vec3f& mean_v = mean[i];
+
+ log_stream << boost::format("%2i|"
+ "r = %6.2f, g = %6.2f, b = %6.2f |"
+ "c = %7i, %%i = %5.2f, %%c = %5.2f")
+ % i
+ % mean_v[0]
+ % mean_v[1]
+ % mean_v[2]
+ % count[i]
+ % abs[i]
+ % rel[i]
+ << std::endl;
+ }
+
+ log_stream << std::endl << std::endl;
+ log_stream.flush();
+ log_stream.close();
+}
+
+
+
+/// \brief Dump the colormap.
+///
+/// \param[in] m2_label the internal representation of the colormap.
+/// \param[in] colormap the name of the colormap in the filesystem.
+///
+/// Take an dynamic array of 3d vector which represents the colormap.
+/// Use boost formatting to dump it properly.
+void save(mln::util::array< mln::algebra::vec<3,float> >& m2_label,
+ const char *colormap)
+{
+ typedef mln::algebra::vec<3,float> t_vec3f;
+ typedef mln::util::array<t_vec3f> t_mean_array;
+
+ std::ofstream stream(colormap);
+
+ for (unsigned i = 0; i < m2_label.size(); ++i)
+ {
+ const t_vec3f& mean_v = m2_label[i];
+
+ stream << boost::format("%2i | r = %6.2f, g = %6.2f, b = %6.2f")
+ % i
+ % mean_v[0]
+ % mean_v[1]
+ % mean_v[2]
+ << std::endl;
+ }
+
+ stream.flush();
+ stream.close();
+}
+
+
+/// \brief The regmax image processing chain.
+///
+/// \param[in] input the name of the RGB input image.
+/// \param[in] quant the name of quantified RGB input image.
+/// \param[in] histo the name of the 3d RGB histogram to filter.
+/// \param[in] opened the name of 3d histogram.
+/// \param[in] nbh the neighbouring (c6|c18|c26).
+/// \param[out] labeled the 3d labeled histogram.
+/// \param[out] proj the red/green projection of the segmented histogram.
+/// \param[out] colormap the name of the colormap produced.
+/// \param[out] mean the name of the mean rebuilded image.
+/// \param[out] stats the name of the statistics (optional).
+///
+/// This is the core routine of this file. First every input file
+/// (images or histograms) are loaded. Then regional labeling is
+/// done. And finally, every colormap dumping, stats saving,
+/// projection is done.
+template <unsigned n>
+void mk_regmax(const std::string& input, // in
+ const std::string& quant, // in
+ const std::string& histo, // in
+ const std::string& opened, // in
+ const mln::neighb3d& nbh, // in
+ const std::string& labeled, // out
+ const std::string& proj, // out
+ const std::string& colormap,// out
+ const std::string& mean, // out
+ const std::string& stats) // [out]
+{
+ typedef mln::value::label_8 t_lbl8;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<n> t_rgbn;
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::int_u<n> t_int_un;
+ typedef mln::algebra::vec<3,float> t_v3f;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_int_un> t_image2d_int_un;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgbn> t_image2d_rgbn;
+ typedef mln::image3d<t_lbl8> t_image3d_lbl8;
+ typedef mln::image2d<t_lbl8> t_image2d_lbl8;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+ typedef mln::accu::stat::mean<t_v3f,t_v3f,t_v3f> t_mean;
+ typedef mln::util::array<t_v3f> t_mean_array;
+
+ t_image2d_rgb8 i0_input; // input img
+ t_image2d_rgbn i1_input; // quant img
+ t_histo3d h1_input; // input histo
+ t_histo3d h2_input; // opened histo
+ t_image2d_rgb8 p2_label; // histo proj
+ t_image3d_lbl8 l2_histo; // label histo
+ t_image2d_lbl8 l2_input; // label input
+ t_mean_array m2_label; // colormap
+ t_image2d_rgb8 i2_mean; // reconstructed
+
+ t_lbl8 n_lbl; // nb class
+ t_rgb8 red(mln::literal::red);
+
+
+ // BEGIN LOADING
+ mln::io::ppm::load(i0_input, input.c_str());
+ mln::io::ppm::load(i1_input, quant.c_str());
+ mln::io::dump::load(h1_input, histo.c_str());
+ mln::io::dump::load(h2_input, opened.c_str());
+ // END LOADING
+
+ // BEGIN IMAGE PROCESSING
+ l2_histo = mln::labeling::regional_maxima(h2_input, nbh, n_lbl);
+ // END IMAGE PROCESSING
+
+ // BEGIN SAVING
+ mln::io::dump::save(l2_histo, labeled.c_str());
+
+ l2_input = mln::data::transform(i1_input, t_labeling_rgbn<n>(l2_histo));
+ i2_mean = mln::labeling::mean_values(i0_input, l2_input, n_lbl);
+ m2_label = mln::labeling::compute(t_mean(), i0_input, l2_input, n_lbl);
+
+ // CORRECT 0 LABEL STATS
+ m2_label[0][0] = 255.0;
+ m2_label[0][1] = 255.0;
+ m2_label[0][2] = 0.0;
+
+ p2_label =mln::display::display3_histo3d_unsigned<n>(h1_input,
+ l2_histo,
+ m2_label,
+ red);
+
+ mln::io::ppm::save(p2_label, proj.c_str());
+ save(m2_label, colormap.c_str());
+ mln::io::ppm::save(i2_mean, mean.c_str());
+
+ if (0 < stats.size())
+ compute_stats(i0_input, l2_input, h1_input, l2_histo, n_lbl, stats);
+
+ // END SAVING
+}
+
+
+/// \brief The online documentation of the tool.
+///
+/// Print the documentation of the tool with the meaning of the
+/// different parameters.
+void usage()
+{
+ std::cout << std::endl;
+ std::cout << "regmax input.ppm q quant.ppm histo.dump"
+ << " opened.dump nbh labeled.dump proj.ppm"
+ << " colormap.txt mean.ppm [stats.txt]" <<
std::endl;
+ std::cout << std::endl;
+ std::cout << "where :"
<< std::endl;
+ std::cout << "* [ in] input.ppm is the 8 bits color ppm image"
<< std::endl;
+ std::cout << "* [ in] q is the degree of quantification"
+ << " {2,3,4,5,6,7,8}" <<
std::endl;
+ std::cout << "* [ in] quant.ppm is the q bits quantified input"
+ << " image" <<
std::endl;
+ std::cout << "* [ in] histo.dump is the quantified color"
+ << " histogram" <<
std::endl;
+ std::cout << "* [ in] opened.dump is the filtered histogram"
<< std::endl;
+ std::cout << "* [ in] nbh is the 3d neighbourhood {6,18,26}"
<< std::endl;
+ std::cout << "* [out] labeled.dump is the labeled 3d histogram"
<< std::endl;
+ std::cout << "* [out] proj.ppm is the r/g projection of the"
+ << " histogram with maxima label plot on" <<
std::endl;
+ std::cout << "* [out] colormap.txt is the colormap for labels"
<< std::endl;
+ std::cout << "* [out] mean.ppm is the mean reconstructed image"
<< std::endl;
+ std::cout << "* [out] stats.txt is the statistical label
report"<< std::endl;
+ std::cout << std::endl;
+}
+
+
+/// \brief The main entry of the software.
+///
+/// \param[in] input.ppm the name of the RGB input image.
+/// \param[in] q the quantification previously used.
+/// \param[in] quant.ppm the name of quantified RGB input image.
+/// \param[in] histo.dump the name of the 3d RGB histogram to filter.
+/// \param[in] opened.dump the name of 3d histogram.
+/// \param[in] nbh the code for the neighbouring (6|18|26).
+/// \param[out] labeled.dump the 3d labeled histogram.
+/// \param[out] proj.ppm the red/green projection of the segmented histogram.
+/// \param[out] colormap.txt the name of the colormap produced.
+/// \param[out] mean.ppm the name of the mean rebuilded image.
+/// \param[out] stats.txt the name of the statistics file (optional).
+///
+/// This is the front hand for the image processing routine. The goal of this
+/// chain is to segment the 3d histogram.
+int main(int argc, char* args[])
+{
+ if (11 == argc || 12 == argc)
+ {
+ const std::string input(args[1]); // in
+ const char q = args[2][0]; // in
+ const std::string quant(args[3]); // in
+ const std::string histo(args[4]); // in
+ const std::string opened(args[5]); // in
+ const char nbh = args[6][0]; // in
+ const std::string labeled(args[7]); // out
+ const std::string proj(args[8]); // out
+ const std::string colormap(args[9]);// out
+ const std::string mean(args[10]); // out
+ const std::string stats(12 == argc? args[11] : ""); // [out]
+
+
+ mln::neighb3d neighbourhood;
+
+ switch (nbh)
+ {
+ case '6': neighbourhood = mln::c6(); break;
+ case '1': neighbourhood = mln::c18(); break;
+ case '2': neighbourhood = mln::c26(); break;
+ default: usage(); return 0; // force usage and quit
+ }
+
+ switch (q)
+ {
+
+ case '2': mk_regmax<2>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '3': mk_regmax<3>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '4': mk_regmax<4>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '5': mk_regmax<5>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '6': mk_regmax<6>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '7': mk_regmax<7>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ case '8': mk_regmax<8>(input,quant,histo,opened,neighbourhood,
+ labeled,proj,colormap,mean,stats); break;
+ default: usage(); break;
+ }
+ }
+ else
+ usage();
+
+ return 0;
+}
diff --git a/scribo/sandbox/green/use/accu/stat/histo1d/Makefile.am
b/scribo/sandbox/green/use/display/display_histo/Makefile.am
similarity index 100%
copy from scribo/sandbox/green/use/accu/stat/histo1d/Makefile.am
copy to scribo/sandbox/green/use/display/display_histo/Makefile.am
diff --git a/scribo/sandbox/green/use/display/display_histo/display_histo.cc
b/scribo/sandbox/green/use/display/display_histo/display_histo.cc
new file mode 100644
index 0000000..090b609
--- /dev/null
+++ b/scribo/sandbox/green/use/display/display_histo/display_histo.cc
@@ -0,0 +1,86 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2009 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.
+
+/// \file
+///
+/// \brief Sample code to use the red/green visualization.
+///
+/// \fixme There is a lot of routines in display_histo.hh, but only
+/// two of them have been call here. It's a poor job from me, but i've
+/// the time to do it know.
+
+#include <iostream>
+#include <mln/accu/stat/histo3d_rgb.hh>
+#include <mln/core/macros.hh>
+#include <mln/core/image/image2d.hh>
+#include <mln/core/image/image3d.hh>
+#include <mln/data/compute.hh>
+#include <mln/data/transform.hh>
+#include <mln/display/display_histo.hh>
+#include <mln/fun/v2v/rgb8_to_rgbn.hh>
+#include <mln/img_path.hh>
+#include <mln/io/ppm/load.hh>
+#include <mln/io/pgm/save.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/literal/colors.hh>
+#include <mln/value/rgb8.hh>
+#include <mln/value/rgb.hh>
+
+int main()
+{
+ typedef mln::value::int_u8 t_int_u8;
+ typedef mln::value::int_u<4> t_int_u4;
+ typedef mln::value::rgb8 t_rgb8;
+ typedef mln::value::rgb<4> t_rgb4;
+ typedef mln::image2d<t_int_u8> t_image2d_int_u8;
+ typedef mln::image2d<t_int_u4> t_image2d_int_u4;
+ typedef mln::image2d<t_rgb8> t_image2d_rgb8;
+ typedef mln::image2d<t_rgb4> t_image2d_rgb4;
+ typedef mln::image2d<bool> t_image2d_bool;
+ typedef mln::image3d<unsigned> t_histo3d;
+ typedef mln::fun::v2v::rgb8_to_rgbn<4> t_rgb8_to_rgb4;
+ typedef mln::accu::meta::stat::histo3d_rgb t_histo3d_fun;
+
+ t_image2d_rgb8 i0_input; // input rgb8
+ t_image2d_rgb4 i1_input; // input rgbn
+ t_histo3d h1_input; // histo input
+ t_image2d_int_u8 p1_histo1;// histo proj1
+ t_image2d_rgb4 p1_histo2;// histo proj2
+ t_rgb4 red(mln::literal::red);
+
+ mln::io::ppm::load(i0_input, OLENA_IMG_PATH"/lena.ppm");
+
+ i1_input = mln::data::transform(i0_input, t_rgb8_to_rgb4());
+ h1_input = mln::data::compute(t_histo3d_fun(), i1_input);
+ p1_histo1 = mln::display::display_histo3d_unsigned(h1_input);
+ p1_histo2 = mln::display::display3_histo3d_unsigned(h1_input, red);
+
+ mln::io::pgm::save(p1_histo1, "proj1.pgm");
+ mln::io::ppm::save(p1_histo2, "proj2.ppm");
+
+ return 0;
+}
--
1.5.6.5