* mln/accu/stat/histo1d.hh: New header file.
* mln/accu/stat/histo2d.hh: New header file.
* mln/accu/stat/histo3d_hsl.hh: New header file.
* mln/accu/stat/histo3d_rgb.hh: New header file.
* mln/clustering/k_mean.hh: New header file.
* mln/clustering/kmean1d.hh: New header file.
* mln/clustering/kmean2d.hh: New header file.
* mln/clustering/kmean3d.hh: New header file.
* mln/clustering/kmean_rgb.hh: New header file.
* mln/display/display_histo.hh: New header file.
* mln/display/project_histo.hh: New header file.
* mln/fun/p2b/achromatic.hh: New header file.
* mln/fun/p2b/component_equals.hh: New header file.
* mln/fun/v2v/achromatism.hh: New header file.
* mln/fun/v2v/hue_concentration.hh: New header file.
* mln/fun/v2v/int_u16_to_int_u14.hh: New header file.
* mln/fun/v2v/int_u16_to_int_u14.hh: New header file.
* mln/fun/v2v/log.hh: New header file.
* mln/fun/v2v/rg_to_rgb.hh: New header file.
* mln/fun/v2v/rgb8_to_int_u8: New header file.
* mln/fun/v2v/rgb_to_achromastism_map.hh: New header file.
* mln/fun/v2v/rgb_to_hsv.hh: New header file.
* mln/fun/v2v/rgb_to_hue_map.hh: New header file.
* mln/fun/v2v/rgb_to_saturation_map.hh: New header file.
* mln/fun/v2v/rgb_to_value_map.hh: New header file.
* mln/img_path.hh: New header file.
* mln/io/plot/save_image_sh.hh: New header file.
* mln/math/cell.hh: New header file.
* mln/math/floor.hh: New header file.
* tests/accu/stat/histo1d/Makefile.am: New makefile.
* tests/accu/stat/histo1d/histo1d.cc: New source.
* tests/accu/stat/histo2d/Makefile.am: New makefile.
* tests/accu/stat/histo2d/histo2d.cc: New source.
---
scribo/sandbox/green/ChangeLog | 9 +
scribo/sandbox/green/README | 223 ++++++++++++++++++--
scribo/sandbox/green/mln/accu/stat/histo1d.hh | 1 -
scribo/sandbox/green/mln/accu/stat/histo2d.hh | 9 +-
scribo/sandbox/green/mln/accu/stat/histo3d_hsl.hh | 1 +
scribo/sandbox/green/mln/accu/stat/histo3d_rgb.hh | 2 +
.../sandbox/green/use/accu/stat/histo1d/histo1d.cc | 2 -
7 files changed, 224 insertions(+), 23 deletions(-)
diff --git a/scribo/sandbox/green/ChangeLog b/scribo/sandbox/green/ChangeLog
index 7bb6646..b557ccf 100644
--- a/scribo/sandbox/green/ChangeLog
+++ b/scribo/sandbox/green/ChangeLog
@@ -159,6 +159,15 @@
2010-06-21 Yann Jacquelet <jacquelet(a)lrde.epita.fr>
+ Save histogram library.
+
+ * mln/accu/histo/histo1d.hh: New header file.
+ * mln/accu/histo/histo2d.hh: New header file.
+ * mln/accu/histo/histo3d_rgb.hh: New header file.
+ * mln/accu/histo/histo3d_hsl.hh: New header file.
+
+2010-06-21 Yann Jacquelet <jacquelet(a)lrde.epita.fr>
+
Simple integration test.
* README: New text file.
diff --git a/scribo/sandbox/green/README b/scribo/sandbox/green/README
index 4eb71b7..3efe50d 100644
--- a/scribo/sandbox/green/README
+++ b/scribo/sandbox/green/README
@@ -1,32 +1,219 @@
-Le travail est classé dans deux répertoires ok et ko.
-Le répertoire ok correspond aux sources qui ont été reprises et retestées.
-Le répertoire ko correspond aux sources qui ont été juste transférées.
+I ARBORESCENCE
+--------------
-La première brique logicielle importante sur laquelle s'appuie mes travaux est
-la création d'histogrammes sous forme d'image.
+bench ==> Comparaison d'algorithmes d'un point de vue temps d'exécution.
+bug ==> Bug rencontrés dans milena et archivés sous forme de programme.
+build ==> Répertoire d'exécution, non sauvé dans git.
+demo ==> Première version d'un algorithme pour voir son comportement.
+doc ==> Documentation tex ou code minimal pour de petits exemples.
+exp ==> Version avancée des algorithmes pour traitées les bases de données.
+mln ==> Partie mise en librairie milena des différents travaux.
+tests ==> Tests unitaires sur certains algorithmes.
+tools ==> Découpage de certains algorithmes pour mieux les tester séparément.
+use ==> Test de compilation, code minimal pour compiler un élément.
+II COMPILATION
+--------------
-CREATION DES HISTOGRAMMES
--------------------------
+L'unité minimale de code choisie est le répertoire.
+Donc aller dans le répertoire qui nous interesse,
+par exemple, green/demo/annotating/hsv et lancé le make
-ko/mln/accu/stat/histo1d.hh: histogramme image valeur scalaire.
-ko/mln/accu/stat/histo2d.hh: histogramme image valeur vectorielle 2d.
-ko/mln/accu/stat/histo3d_hsl.hh: histogramme image valeur vectorielle 3d (HSL).
-ko/mln/accu/stat/histo3d_rgb.hh: histogramme image valeur vectorielle 3d (RGB).
+#:~/git/olena/scribo/sandbox/green$cd demo/annotating/hsv
+#:~/git/olena/scribo/sandbox/green/demo/annotating/hsv$ make -f Makefile.am
+Cette opération créé dans build le répertoire de compilation
+green/build/demo/annotating/hsv. Dans ce répertoire aura été copié un
+Makefile et tous les fichiers qui ne sont pas des sources. Par
+exemple, des fichiers de calibration comme gaussian.sh (pour vérifier
+la mire du filtre de gaussienne) ou de la documentation à la sauvette
+sous forme de fichiers textes jetés à la va vite dans le répertoire
+pour ne pas perdre l'information recherchée. En l'occurence, ici, il
+n'y a rien à copier. Rendons-nous dans le répertoire de compilation et lançons
+le makefile.
+#:~/git/olena/scribo/sandbox/green/demo/annotating/hsv$
+cd ../../../build/demo/annotating/hsv
+#:~/git/olena/scribo/sandbox/green/build/demo/annotating/hsv$ make clean all
-ok/mln/accu/histo/histo1d.hh: histogramme image valeur scalaire entière.
-ok/mln/accu/histo/histo2d.hh: histogramme image valeur vectorielle 2d entière.
-ok/mln/accu/histo/histo3d.hh: histogramme image valeur vectorielle 3d entière.
+L'exécutable est généré par le makefile, il porte le nom du
+répertoire. Si il y a besoin de mettre à jour le makefile, le faire
+dans le répertoire des sources en éditant Makefile.am, puis en
+régénérant le Makefile dans le répertoire d'exécution par la commande
+make -f Makefile.am depuis le répertoire source.
-SAUVEGARDE DES HISTOGRAMMES
----------------------------
+III MAKEFILE
+------------
+Les makefiles utilisés sont tous les mêmes avec quelques variables
+dont le contenu change dans leur partie en-tête.
+Pour chaque répertoire, le makefile doit savoir si le chemin courant
+est un répertoire de compilation ou un répertoire de source. Pour les
+identifier, il a recours à un pattern qui malheureusemnt fait
+intervenir le nom de la branche de développement (bench,demo,bug,exp ...).
+SOURCE_PATTERN= green/demo
+BUILD__PATTERN= green/build/demo
-VISUALISATION DES HISTOGRAMMES
-------------------------------
\ No newline at end of file
+Si un makefile ne fonctionne pas, il faut vérifier ceci en premier
+lieu. Ici, le makefile doit être situé dans la branche démo.
+
+Autre élément à savoir, la compilation nécessite d'inclure la
+librairie milena, ainsi que les développements propres en vu de leur
+intégration futur dans milena, ceci est fait par un jeu d'INCLUDES1
+et INCLUDES2.
+
+INCLUDES1= -I$(HOME)/git/olena/scribo/sandbox/green
+INCLUDES2= -I$(HOME)/git/olena/milena
+INCLUDES= $(INCLUDES1) $(INCLUDES2)
+
+Suivant l'allure du compte où l'on exécute les makefiles, il faut
+revoir le chemin pour trouver des deux répertoires.
+
+Enfin, les options de compilations ne sont pas toujours les mêmes. Les
+trois lignes possibles sont toutes présentes et seule celle qui est
+utilisée n'est pas commentée. Typiquement, dans la branche de
+développement démo où les perfomances ne sont pas le problème, on
+compilera avec tout le matériel pour utiliser gdb et sans
+optimisation. A l'inverse, dans la branche d'expérimentation, où le
+code a déjà été testé, on cherche à aller vite car on exécute ce code
+sur de nombreuses images. Dans cette optique, pas de débugage, pas de
+traçage, optimisation conséquente.
+
+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)
+
+Une dernière dernière information, dans le cadre des développements
+exp, et tools, on utilise la librairie boost soit pour la
+virtualisation du filesystem, soit pour le formatage des fichiers text
+(réalisation de colonnes, mettre des entiers sur un certain nombre de
+caractères). Une ligne de chargement des librairies peut apparaitre donc.
+
+LOADLIBES= -lboost_filesystem
+
+On retrouvera les includes suivantes dans les sources:
+
+#include <boost/format.hpp>
+#include <boost/filesystem.hpp>
+
+
+IV CHEMINS DES IMAGES
+---------------------
+
+Toutes les images ont toujours été locales sur mon ordinateur. La
+politique a toujours été d'utiliser un fichier img_path pour coder les
+chemins des images. Les chemins étant plutôt long, j'ai toujours eu
+tendance à faire en sorte qu'ils soient compilés en dur (sauf pour la
+partie développement tools qui est vraiment voué à donner des
+exécutables indépendants et génériques). Le fichier mln/img_path.hh
+code la position de toutes les images dans mon arborescence. Il faudra
+donc veiller à changer tous les chemins pour les adapter au compte
+dans lequel on voudra reprendre le code. Dans le code, les références
+aux positions des images sont faites via des macros.
+
+Toutes les images sont située dans git/img. En règle générale, je ne
+traite que des images au format .pgm, .pbm et .ppm. Il m'arrive
+fréquemment de dumper des images au format .sh (gnuplot shell
+image). Pour la branche tools, nous avons utilisé les dumps de milena
+comme format de transfert d'un utilitaire à un autre. Les images sont
+classées suivant leur provenance. Nous avons tout d'abord la base
+OLENA (copie des images de tests milena), la base INIM (très peu
+utilisée voire jamais), la base ICDAR (très utilisée, surtout dans
+exp), la base AFP (très utilisée dans exp) et les bases ANNOTATING1 et
+ANNOTATING2 (pas très utilisées ni l'une, ni l'autre).
+
+La plus part du temps, sauver les résultats dans le répertoire
+d'exécution courant est largement suffisant. Parfois, il est
+nécessaire de sauvegarder de grosses quantités d'informations et de
+les classer comme dans la branche de développement exp. C'est pour
+cela, qu'un certain nombre de macros définissent des endroits pour
+sauvegarder les résultats lors d'expérimentation de grande ampleur sur
+toute la base ICDAR ou AFP.
+
+
+V GNUPLOT SCRIPT SHELL IMAGE FORMAT
+-----------------------------------
+
+J'abrège le nom du format par gnuplot shell format. En fait, c'est un
+format d'image particulier qui a besoin de gnuplot pour être lu. Il
+est donc compatible avec aucun viewer si ce n'est gnuplot, mais a la
+caractéristique d'afficher tous les points de manière visible. Par
+ailleurs, comme il s'agit d'un script gnuplot il permet d'insérer très
+facilement une fonction pour visualiser les données autrement (par
+exemple, changer d'espace: HSL, HSV). Le fichier tire son nom de la
+façon dont il fonctionne. C'est un script shell qui fait un appel à
+gnuplot et lui passe le jeu de données directement à partir de ce même
+fichier, pas besoin de faire appel à un autre fichier. Une fois
+généré, le fichier doit être modifié pour avoir les permissions
+d'exécution (chmod 755 gnuplot_shell_file.sh). Comme je trouve le format
+extrêmement pratique, il se retrouve preque partout dans mes sources.
+
+
+V MLN
+-----
+
+a) La sauvegarde des images au format gnuplot shell
+
+* mln/io/plot/save_image_sh.hh: Librairie sauvegarde format gnuplot shell.
+
+to do ...
+
+
+
+b) Les histogrammes
+
+Un des travaux demandés par théo est la réalisation d'une librairie
+d'histogramme permettant de fournir un résultat sous forme d'image.
+L'intérêt est ensuite de pouvoir filtrer directement ces histogrammes
+par les algorithmes de milena, ou encore d'étudier les valeurs
+caractéristiques par d'autres accumulateurs. Les codes réellement
+utilisés sont histo1d et histo3d RGB. Tous les autres codes sont très
+expérimentaux. Notemment, le code HSL demande de quantifier l'espace
+de comptage puisqu'il est décrit sous la forme de triplets de float
+(les autres sont inférés). Néanmoins, le code est à conserver car il
+contient une séquence d'appels pour les routines permettant de
+considérer la dimension de la teinte comme circulaire.
+
+* mln/accu/stat/histo1d.hh: Accumulateur histogramme image1d.
+* use/accu/stat/histo1d: Code minimal utilisant un histogramme 1d.
+
+* mln/accu/stat/histo2d.hh: Accumulateur histogramme image2d.
+* mln/value/rg.hh: Définition du type vectoriel 2d rouge/vert (RG).
+* mln/fun/v2v/rgb_to_rg.hh: Transformation de l'espace RGB vers l'espace RG.
+* use/accu/stat/histo2d: Code minimal utilisant un histogramme 2d.
+
+
+* mln/accu/stat/histo3d_rgb.hh: Accumulateur histogramme image3d RGB.
+* mln/accu/stat/histo3d_hsl.hh: Accumulateur histogramme image3d HSL.
+
+* use/accu/stat/histo3_rgb: Code minimal utilisant un histogramme 3d RGB.
+* use/accu/stat/histo3_hsl: Code minimal utilisant un histogramme 3d HSL.
+
+
+
+* tests/accu/stat/histo1d
+
+
+
+
+* tests/accu/stat/histo2d
+
+
+
+* use/accu/stat/histo3d_rgb
+* tests/accu/stat/histo3d_rgb
+
+* use/accu/stat/histo3d_hsl
+* tests/accu/stat/histo3d_hsl
+
+
+c) La visualisation des histogrammes 3d
+
+* demo/accu/stat/histo2d
+
+* mln/display/dispay_histo.hh
+* mln/displayproject_histo.hh
diff --git a/scribo/sandbox/green/mln/accu/stat/histo1d.hh
b/scribo/sandbox/green/mln/accu/stat/histo1d.hh
index fae94c8..7677d3b 100644
--- a/scribo/sandbox/green/mln/accu/stat/histo1d.hh
+++ b/scribo/sandbox/green/mln/accu/stat/histo1d.hh
@@ -328,7 +328,6 @@ namespace mln
# endif // ! MLN_INCLUDE_ONLY
-
} // end of namespace mln::accu::stat
} // end of namespace mln::accu
diff --git a/scribo/sandbox/green/mln/accu/stat/histo2d.hh
b/scribo/sandbox/green/mln/accu/stat/histo2d.hh
index 11a1bb3..ee4d145 100644
--- a/scribo/sandbox/green/mln/accu/stat/histo2d.hh
+++ b/scribo/sandbox/green/mln/accu/stat/histo2d.hh
@@ -80,7 +80,7 @@
# include <mln/core/alias/point2d.hh>
# include <mln/core/alias/box2d.hh>
-#include <mln/literal/zero.hh>
+# include <mln/literal/zero.hh>
# include <mln/trait/value/comp.hh>
@@ -182,6 +182,7 @@ namespace mln
histo2d();
/// \}
+
/// Manipulators.
/// \{
/// \brief Initialize the histogram with zero value.
@@ -191,13 +192,15 @@ namespace mln
/// density.
void init();
+
/// \brief Update the histogram with the RG pixel t.
- /// \param[in] t a graylevel pixel of type V.
+ /// \param[in] t a R/G pixel of type V.
///
/// The end user shouldn't call this method. In place of it, he can
/// go through the data compute interface.
void take(const argument& t);
+
/// \brief Update the histogram with an other histogram.
/// \param[in] other the other histogram.
///
@@ -269,6 +272,8 @@ namespace mln
inline
void histo2d<V>::take(const argument& t)
{
+ trace::entering("mln::accu::stat::histo2d::take");
+
// Just convert a greyscale value (int_u8 like) to a position for an
// iterator on the resulting image.
// Take care to the constructor : Point(slice, row, column)
diff --git a/scribo/sandbox/green/mln/accu/stat/histo3d_hsl.hh
b/scribo/sandbox/green/mln/accu/stat/histo3d_hsl.hh
index 35d78e2..a8888cd 100644
--- a/scribo/sandbox/green/mln/accu/stat/histo3d_hsl.hh
+++ b/scribo/sandbox/green/mln/accu/stat/histo3d_hsl.hh
@@ -168,6 +168,7 @@ namespace mln
/// \ingroup modaccuvalues
template <unsigned q, typename V>
struct histo3d_hsl :
+
public mln::accu::internal::base<image3d<unsigned>, histo3d_hsl<q,V>
>
{
typedef V argument;
diff --git a/scribo/sandbox/green/mln/accu/stat/histo3d_rgb.hh
b/scribo/sandbox/green/mln/accu/stat/histo3d_rgb.hh
index 6a48024..2fb6084 100644
--- a/scribo/sandbox/green/mln/accu/stat/histo3d_rgb.hh
+++ b/scribo/sandbox/green/mln/accu/stat/histo3d_rgb.hh
@@ -179,6 +179,7 @@ namespace mln
histo3d_rgb();
/// \}
+
/// Manipulators.
/// \{
/// \brief Initialize the histogram with zero value.
@@ -242,6 +243,7 @@ namespace mln
histo3d_rgb<V>::histo3d_rgb()
{
trace::entering("mln::accu::stat::histo3d_rgb::cstor");
+
typedef mln_trait_value_comp(V,0) comp0;
typedef mln_trait_value_comp(V,1) comp1;
typedef mln_trait_value_comp(V,2) comp2;
diff --git a/scribo/sandbox/green/use/accu/stat/histo1d/histo1d.cc
b/scribo/sandbox/green/use/accu/stat/histo1d/histo1d.cc
index af39d94..ec80ff1 100644
--- a/scribo/sandbox/green/use/accu/stat/histo1d/histo1d.cc
+++ b/scribo/sandbox/green/use/accu/stat/histo1d/histo1d.cc
@@ -36,8 +36,6 @@
#include <mln/io/pgm/load.hh>
#include <mln/value/int_u8.hh>
-
-
int main()
{
typedef mln::value::int_u8 t_int_u8;
--
1.5.6.5