* 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
* 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
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch embed-libiberty has been updated
discards 03b9cbf2a4bcbc88cc07e3b1b2eef6adb8b800c2 (commit)
discards f921a73388e0145472fd2ef1a788940865a398ba (commit)
discards 6a4c5949ce3038a7b6d3fcc68e4b4a3e457cfc68 (commit)
discards 2a6d9c0fbd5f548a25dcfbcddaecc60fb8c69344 (commit)
discards d919f5832bc0ea4e69815721e90150be45da8670 (commit)
discards 39fc68ecfd97fc03fdb79a0b04bda05bc4fef28d (commit)
discards 8091ab545d88dbb9f32d8e43d701590aee789ed7 (commit)
discards da8a0abae64574c16a28000821e987d29dd1918c (commit)
discards 7db887d6e192dcf9c9835d85530bc1a7c96b0072 (commit)
discards 489eda8c8e46fe33c2cf92bda565a1db86d7747b (commit)
discards 72885505b3647af5a1412a5fb7cbe4a4640cb167 (commit)
discards 057eb205c8f1dadc40851f48395a5e3118df50a7 (commit)
discards dad02b15ec254743b1671cbdb31e634e6d3336db (commit)
discards 8629f8ff3e604e540fe0349dd0ce2a420b968633 (commit)
discards d175073d628a36f2aa9789220f3f4cb463647c82 (commit)
discards fc1f455d294243bcb7dcefd4cd2ad14691413e31 (commit)
discards 7d199c04616894eb113abb07594c5388ed11cff0 (commit)
discards eb3778a94c8aa0211ee47e532e539dbf832abbfc (commit)
via c23c47928224c69eeadc539f85400749495706a0 (commit)
via d3cd1aa0a318cd998d6da9a2c13e9c5831116ed6 (commit)
via 45f7112e908c9e32cf6a0f33ead120ff0c53b63f (commit)
via de87f38439ee6a1d61806244caf726a5c8e9d368 (commit)
via cf101e3de813d028e91b9224fc275d97bd6d73d7 (commit)
via c1521eb5c4e1e5d92a5ddeab2c1960a0a9bc5626 (commit)
via 85c3c299100259475187ef55822cbed60ec48ddf (commit)
via 3c6ea49295e43bbb51829774fa7528552ccf49c5 (commit)
via a534a0c2055445d4e9a5de82a3844f4019eff29d (commit)
via 39035156ae679b8fb412b3239846359623dd4581 (commit)
via ecf4b207cfe6a69cd2f951df7a0fa388623fc6ed (commit)
via 3dc3c53940a3b5635815b29fa65a3a77d1466d57 (commit)
via 9c195f901dd07a27e2cb4f2fb180e323e66a00e2 (commit)
via 5daaf29cc5e5cafdefc65b1f2fa1cc796c1efa62 (commit)
via a695fd417f604281ef94e5403030079035d9d76a (commit)
via 9fd487f8e7db3287d5d483dd1e834e7748f29c75 (commit)
via dce5b55bdcaa1e09232d5931884d6e69f0feb7b7 (commit)
via 5545f9c9a4e977c3b55f50f0bec8b7d5eea11aa0 (commit)
via 4d7c62bba7e1bc8e11fc4d05f502575eeac314b2 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (03b9cbf2a4bcbc88cc07e3b1b2eef6adb8b800c2)
\
N -- N -- N (c23c47928224c69eeadc539f85400749495706a0)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
c23c479 Mention Libiberty in Extatica's AUTHORS, NEWS and README.
d3cd1aa Work around a defect in Libiberty's `configure.ac' (in Olena).
45f7112 Work around a defect in Libiberty's `configure.ac' (in Extatica).
de87f38 Fix the distribution of Libiberty.
cf101e3 Fix cleaning rules in Libiberty.
c1521eb Make Libiberty compatible with Automake.
85c3c29 Have Extatica use the embedded GNU Libiberty.
3c6ea49 Add extatica/libiberty/.gitignore.
a534a0c Tailor GNU Libiberty for Extatica.
3903515 Add GNU Libiberty files from CVS GNU Binutils.
-----------------------------------------------------------------------
Summary of changes:
extatica/ChangeLog | 20 +++++++++++++++-----
1 files changed, 15 insertions(+), 5 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch extatica has been updated
discards 72885505b3647af5a1412a5fb7cbe4a4640cb167 (commit)
discards 057eb205c8f1dadc40851f48395a5e3118df50a7 (commit)
discards dad02b15ec254743b1671cbdb31e634e6d3336db (commit)
discards 8629f8ff3e604e540fe0349dd0ce2a420b968633 (commit)
discards d175073d628a36f2aa9789220f3f4cb463647c82 (commit)
discards fc1f455d294243bcb7dcefd4cd2ad14691413e31 (commit)
discards 7d199c04616894eb113abb07594c5388ed11cff0 (commit)
discards eb3778a94c8aa0211ee47e532e539dbf832abbfc (commit)
via ecf4b207cfe6a69cd2f951df7a0fa388623fc6ed (commit)
via 3dc3c53940a3b5635815b29fa65a3a77d1466d57 (commit)
via 9c195f901dd07a27e2cb4f2fb180e323e66a00e2 (commit)
via 5daaf29cc5e5cafdefc65b1f2fa1cc796c1efa62 (commit)
via a695fd417f604281ef94e5403030079035d9d76a (commit)
via 9fd487f8e7db3287d5d483dd1e834e7748f29c75 (commit)
via dce5b55bdcaa1e09232d5931884d6e69f0feb7b7 (commit)
via 5545f9c9a4e977c3b55f50f0bec8b7d5eea11aa0 (commit)
via 4d7c62bba7e1bc8e11fc4d05f502575eeac314b2 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (72885505b3647af5a1412a5fb7cbe4a4640cb167)
\
N -- N -- N (ecf4b207cfe6a69cd2f951df7a0fa388623fc6ed)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
ecf4b20 Update and augment Extatica's AUTHORS, NEWS and README.
3dc3c53 Replace shared Autoconf macros by symlinks in Extatica.
9c195f9 Bundle Extatica with Olena.
5daaf29 Prepare Extatica to be bundled with Olena.
a695fd4 Properly configure xtc-config.
9fd487f Cleanup and aesthetic changes.
dce5b55 Rename Dyn as Extatica within the project.
5545f9c Add support for configuration option `--with-milena' in Extatica.
4d7c62b Fix the distribution of Extatica.
-----------------------------------------------------------------------
Summary of changes:
extatica/AUTHORS | 17 ++-
extatica/ChangeLog | 9 +-
extatica/NEWS | 16 ++-
extatica/README | 345 ++++++++++++++++++++++++++++++++++++++++---
extatica/config/Makefile.am | 3 -
5 files changed, 359 insertions(+), 31 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
* AUTHORS: Add details.
* NEWS: Update.
* README: Update and add instructions and information.
---
extatica/AUTHORS | 17 +++-
extatica/ChangeLog | 8 ++
extatica/NEWS | 16 ++-
extatica/README | 345 ++++++++++++++++++++++++++++++++++++++++++++++++----
4 files changed, 359 insertions(+), 27 deletions(-)
diff --git a/extatica/AUTHORS b/extatica/AUTHORS
index 98ed64d..cbae6fe 100644
--- a/extatica/AUTHORS
+++ b/extatica/AUTHORS
@@ -4,21 +4,36 @@ This package was written by and with the assistance of
Active LRDE Staff.
==================
+* Thierry Géraud theo(a)lrde.epita.fr
+ - Original idea and implementation.
+
* Roland Levillain roland(a)lrde.epita.fr
+ - Project maintainer.
+ - Revival of the `dynamic-use-of-static-c++' prototype.
+ - Integration of a third-party C++ implementation of the MD5 algorithm.
+ - Progressive conversion of Ruby parts into C++ code.
+ - Addition of a few wrappers around Milena.
+ - First experiments with SWIG and Python.
+ - Modernization of the package and renaming as ``Extatica''.
================================
Past contributors of LRDE Staff.
================================
* Alexandre Duret-Lutz adl(a)lrde.epita.fr
-* Thierry Géraud theo(a)lrde.epita.fr
+ - Original idea and implementation.
=========
Students.
=========
* Nicolas Pouillard
+ - Initial work on the `dynamic-use-of-static-c++' prototype
+ (dynamic-static bridge).
+
* Damien Thivolle
+ - Initial work on the `dynamic-use-of-static-c++' prototype
+ (dynamic-static bridge).
.. Local Variables:
diff --git a/extatica/ChangeLog b/extatica/ChangeLog
index 141c0b6..8a3a34e 100644
--- a/extatica/ChangeLog
+++ b/extatica/ChangeLog
@@ -1,3 +1,11 @@
+2010-11-09 Roland Levillain <roland(a)lrde.epita.fr>
+
+ Update and augment Extatica's AUTHORS, NEWS and README.
+
+ * AUTHORS: Add details.
+ * NEWS: Update.
+ * README: Update and add instructions and information.
+
2010-11-10 Roland Levillain <roland(a)lrde.epita.fr>
Prepare Extatica to be bundled with Olena.
diff --git a/extatica/NEWS b/extatica/NEWS
index 8eebf76..4066a0f 100644
--- a/extatica/NEWS
+++ b/extatica/NEWS
@@ -1,6 +1,18 @@
* Extatica 0.1a MONTH DAY, YEAR
- * Initial public release.
+ * First public release.
+
+ * Revival of the `dynamic-use-of-static-c++' prototype,
+ modernization of the infrastructure, and renaming as
+ ``Extatica''.
+
+ * Better handling of extra dependencies of the package: many
+ Ruby parts have been turned into C++ code; dependencies (MD5)
+ have been integrated into the project.
+
+ * First experiments with Milena: addition of a few wrappers
+ around Milena routines; first ``dynamic'' Python wrappers
+ over Milena using SWIG and Extatica.
Local Variables:
@@ -10,7 +22,7 @@ End:
----
-Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE)
+Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE).
This file is part of Olena.
diff --git a/extatica/README b/extatica/README
index 78ef1eb..34d76f2 100644
--- a/extatica/README
+++ b/extatica/README
@@ -1,31 +1,328 @@
-HOW TO USE THIS PROJECT
+Copyright (C) 2005, 2009, 2010 EPITA Research and Development
+Laboratory (LRDE).
- Note: These instructions have been updated since this project has
- been re-integrated into the Olena repository (October 2009).
- However, they will probably evolve again, since the project should
- eventually become a part of the Olena distribution. The biggest
- change will probably be to run things from the parent directory
- (Olena's) and enable a configure flag to activate this module.
+This file is part of Olena.
-From the repository:
+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.
- # Initialize the build system.
- ./bootstrap
+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.
- # Make a build dir.
- mkdir _build && cd _build
+You should have received a copy of the GNU General Public License
+along with Olena. If not, see <http://www.gnu.org/licenses/>.
- # Configure the build for your system.
- ../configure
+The complete GNU General Public License Notice can also be found in
+the 'COPYING' file in the root directory.
- # You can also use the file `config.site' shipped with the
- # distribution, though it is a bit old. `config.site' tries to use
- # more efficient tools (g++-4.0 and ccache). It also enables
- # configure's caching mechanism. With `--prefix' you can set the
- # destination (here, `../_install').
- CONFIG_SITE=`pwd`/../config.site ../configure --prefix=`pwd`/../_install
- # You may want to add the `bin/' directory to your path, but it is
- # no longer mandatory (`xtc-config' from `bin/' used to be required
- # by programs compiled with our system).
- export PATH=$PATH:`pwd`/bin
+========================
+Introduction to Extatica
+========================
+
+Extatica is a part of Olena_, a generic and efficient platform
+dedicated to image processing.
+
+.. _Olena: http://olena.lrde.epita.fr
+
+Extatica is a dynamic-static C++ bridge, enabling users to generate,
+compile and link C++ functions and methods at run time. Extatica
+features a simple yet powerful C++ Just-In-Time (JIT) compiling
+engine. A common use case is the execution of C++ template routines
+that are not already compiled.
+
+The name of project comes from the phrase ``ex static'' (from the
+static [world]); add the canonical `-a' suffix to make it Olena-ish,
+and you get Extatica.
+
+Extatica can be used to provide dynamic services over the C++
+front-end directly, or indirectly (e.g., through a SWIG-based
+wrapper). This way, other languages or environment can benefit from
+the power of C++ JIT compiling.
+
+Extatica is currently distributed as a standalone package, but like
+other Olena sub-projects, it will eventually come in two flavors: as a
+standalone package and as a component of the Olena meta-package.
+
+
+=====================
+Detailed Instructions
+=====================
+
+-----------------
+Required Software
+-----------------
+
+Here is a non-exhaustive list of required software required to build
+Extatica successfully.
+
+ * to compile the user examples:
+
+ - a POSIX shell, like Bash
+
+ - a decent C++ compiler, like GNU C++
+
+ - a `make' utility, like GNU `make'
+
+ - Ruby 1.8.6 or greater.
+
+ * if you want to build the SWIG Python bindings, you will also need:
+
+ - the Simplified Wrapper and Interface Generator (SWIG_).
+
+ - Python_
+
+.. _SWIG: http://www.swig.org
+
+.. _Python: http://www.python.org
+
+You also need a working Milena_ install (Milena is shipped with
+Olena).
+
+.. _Milena: http://olena.lrde.epita.fr
+
+
+-------------
+Configuration
+-------------
+
+In order to prepare the build process, you need to configure the source
+tree.
+
+ Assuming your Extatica distribution is uncompressed in directory
+`extatica-1.1', follow these steps:
+
+ % cd extatica-1.1
+ % mkdir _build
+ % cd _build
+ % ../configure
+
+ The build process can be altered by a number of options you can pass
+to the `configure' script. The following sections describe them.
+
+
+Milena path
+===========
+
+Extatica requires the Milena library. If Extatica's `configure' is
+unable to find your installation of Milena, or if you want to use a
+specific installation, you must help `configure' find it using the
+`--with-milena' flag. For instance, if you have installed Milena in
+`$HOME/local', replace the call to `configure' from the previous
+section by this command:
+
+ % ../configure --with-milena=$HOME/local
+
+GNU Libiberty
+=============
+
+Extatica depends on GNU Libiberty, which is part of GNU Binutils (and
+GCC). If `configure' cannot find Libiberty, you can pass the path to
+the library (usually named `libiberty.a') through `LDFLAGS', e.g.
+
+ % ../configure LDFLAGS="-L/opt/local/lib"
+
+Installation Path
+=================
+
+By default, Extatica is installed in the standard "local" directory of
+your system. This is usually `/usr/local' under Unix.
+
+ You can change this path with the following flag:
+
+ --prefix=<installation prefix>
+
+
+Compiler Selection and Compilation Flags
+========================================
+
+By default, `configure' will try to use the first C++ compiler it
+encounters on your system. If `CXX' is not set, it will look, in order,
+for:
+
+ - the value of the `CXX' environment variable,
+
+ - the GNU C++ compiler (`g++'),
+
+ - the `c++' or `gpp' commands on your system,
+
+ - `aCC', the HP-UX standard C++ compiler,
+
+ - the `CC', `cxx', `cc++' or `cl' commands on your system,
+
+ - KAI's C++ compiler (`KCC'),
+
+ - `RCC', `xlC_r' or `xlC'.
+
+ You can override the detection system by passing your favorite
+compiler name to `configure', as follows:
+
+ % ../configure CXX=<your-favorite-C++-compiler>
+
+ As an alternative, you can also set the environment variable `CXX'.
+
+
+ For some compilers (GNU g++ and Intel's icpc to some extent) ,
+`configure' will use default CXXFLAGS. You can override the default
+C++ flags by giving `configure' your selection of flags:
+
+ % ../configure CXXFLAGS="<your-favorite-C++-flags>"
+
+
+ Extatica uses some C components: likewise, you can set set the C
+compiler and the C compilation flags by setting `CC' and `CFLAGS'
+respectively:
+
+ % ../configure CC=<your-favorite-C-compiler>
+
+ % ../configure CFLAGS="<your-favorite-C-flags>"
+
+You can of course use all of these all together:
+
+ % ../configure CC="<C-compiler>" CFLAGS="<C-flags>" \
+ CXX="<C++-compiler>" CXXFLAGS="<C++-flags>"
+
+
+--------
+Building
+--------
+
+Once your build directory is `configure'd, you can run
+
+ % make
+
+to build Extatica.
+
+
+ Additionally, you can build and run the test suite with:
+
+ % make check
+
+However, this process is time- and memory- consuming, and you probably
+do not need it except if you are developing/debugging Extatica.
+
+
+----------
+Installing
+----------
+
+To install Extatica on your system, run:
+
+ % make install
+
+from the build directory.
+
+ If not overridden with `--prefix', this will install:
+
+ * the `xtc-config' script in `/usr/local/bin',
+
+ * Extatica headers in `/usr/local/include',
+
+ * Extatica libraries in `/usr/local/lib',
+
+ * Python bindings in `/usr/local/lib/python2.x/site-packages'.
+
+ * Extatica boilerplate code in `/usr/local/share/extatica'.
+
+
+ You can later remove Extatica from your system by running
+
+ % make uninstall
+
+from the build directory (if you have kept it). We recommend the use
+of GNU Stow (or any similar program) during the installation of Extatica,
+to make the uninstallation of Extatica easier.
+
+
+=====================
+Layout of the Tarball
+=====================
+
+The Extatica project directory layout is as follows:
+
+_config
+ Auxiliary tools used by the GNU Build System during ``configure``
+ and ``make`` stages.
+
+bin
+ Scripts used by the build system or Extatica.
+
+config
+ Extra Autoconf macros and generators.
+
+data
+ Extatica template used to generate wrappers.
+
+libltdl
+ Third-party library used to load dynamic modules.
+
+libmd5
+ Third-party library providing a C++ implementation of the MD5 algorithm.
+
+src
+ Code of libextatica.
+
+ wrappers
+ Code to generate wrappers around libraries (currently, Milena).
+
+swig
+
+ python
+ SWIG Python bindings.
+
+test
+ Extatica's test suite.
+
+
+===================
+Supported Platforms
+===================
+
+Extatica has been tested on the following configurations:
+
+=========================== =============================================
+System Compiler
+=========================== =============================================
+GNU/Linux on IA-32 g++ (GNU GCC) 4.4
+Mac OS X (10.6) on IA-32 g++ (GNU GCC) 4.2.1
+=========================== =============================================
+
+
+See Also
+========
+
+There are other sources of interest in the distribution.
+
+- Headline news about the project can be found in the file ``NEWS`` at
+ the root of the source tree.
+
+
+License
+=======
+
+Extatica is released under the GNU General Public License. See the file
+``COPYING`` (at the root of the source tree) for details.
+
+
+Contacts
+========
+
+The team can be reached by mail at olena(a)lrde.epita.fr. The snail
+mail address follows.
+
+* Olena - LRDE
+
+ | Laboratoire de Recherche et Développement de l'EPITA (LRDE)
+ | 14-16 rue Voltaire
+ | FR-94276 Le Kremlin-Bicêtre CEDEX
+ | France
+
+
+
+.. Local Variables:
+.. mode: rst
+.. ispell-local-dictionary: "american"
+.. End:
--
1.5.6.5