Oui oui, en fait j'ai déjà intégré la nouvelle version de Greycstoration dans CImg 1.1.1beta.
CImg suit un cycle de développement tout à fait continu. Quand j'ai fini une release, je commence la prochaine, et elle est dispo sur le CVS tout de suite (et parfois aussi en archive). Ca a été le cas avec la 1.1.1beta, qui corrige déjà quelques bugs de la 1.1.0.
Greycstoration en lui-même ne va pas faire sortir une nouvelle release de CImg tout de suite, car en fait les releases sortent après un laps de temps suffisamment long entres elles (i.e un nombre significatifs d'améliorations dans CImg).
C'est pour cela aussi que j'ai voulu faire ce journal, car à mon avis, l'amélioration sur Greycstoration seul est conséquente, même si le coeur de CImg n'a pas fondamentalement changé.
Ton expérience m'intéresse pour écrire le tutorial.
Ce qui serait sympa de ta part, c'est que tu m'envoies (par e-mail) tes premières impressions d'utilisateur 'lambda' pour voir quels points je devrais éclaircir en premier dans le tutorial.
Je pensais attaquer directement le choix des options mais apparemment avoir la liste des options n'est déjà pas une mince affaire.
Pour te répondre rapidement, pour restaurer une image tu dois utiliser l'option -restore nom_de_fichier, et si tu mets l'option '-h' EN PLUS, tu obtient normalement la liste des options disponibles et un descriptif rapide dans ton terminal. Chez moi par exemple :
./greycstoration -restore toto.ppm -h
m'affiche :
-restore = submarine.jpg : Restore the image specified after '-restore'
-inpaint = NULL : Inpaint the image specified after '-inpaint'
-resize = NULL : Resize the image specified after '-resize'
-dt = 50 : Smoothing strength
-p = 0.8 : Contour preservation
-a = 0.8 : Smoothing anisotropy
-alpha = 0.5 : Noise scale
-sigma = 1 : Geometry regularity
-iter = 1 : Number of iterations
-scheme = true : Curvature-preserving scheme (0=false, 1=true)
-ng = 0 : Add gaussian noise before denoising
-nu = 0 : Add uniform noise before denoising
-ns = 0 : Add Salt&Pepper noise before denoising
-save = 0 : Iteration saving step
-visu = true : Enable/Disable visualization
-o = NULL : Output image
-prenormalize = false : Pre-normalization in [0,255]
-postnormalize = false : Post-normalization in [0,255]
-dl = 0.8 : Spatial integration step
-da = 45 : Angular integration step (in degrees)
-prec = 2 : Precision of the gaussian function
-interp = 0 : Interpolation type (0=Nearest-neighbor, 1=Linear,
Ce n'est pas très détaillé, mais ca permet déjà de jouer un peu avec l'algorithme.
En ce qui concerne les sources, je peux te donner ce lien :
qui te permettra de charger les sources du logiciel (fichier examples/greycstoration.cpp). Je prefère regrouper les sources avec CImg (http://cimg.sourceforge.net) plutôt que de les distribuer à part, avec les problèmes de mise à jour que ca peut poser.
Non ca c'est pas un problème, la licence CeCILL est compatible avec la GPL. On peut très bien redistribuer Greycstoration en GPL si on le désire.
Extrait de CeCILL :
"5.3.4 COMPATIBILITY WITH THE GNU GPL
The Licensee can include a code that is subject to the provisions of one of the versions of the GNU GPL in the Modified or unmodified Software, and distribute that entire code under the terms of the same version of the GNU GPL.
The Licensee can include the Modified or unmodified Software in a code that is subject to the provisions of one of the versions of the GNU GPL, and distribute that entire code under the terms of the same version of the GNU GPL.
"
Pourquoi pas, c'est vrai.
Mais j'avoue que concevoir l'algorithme et le programmer a déjà été un sacré boulot.
L'intégrer dans Gimp ou ImageMagick demanderait du temps que je n'ai pas forcément. J'éspère en libérant les sources que justement quelqu'un pourra prendre un peu de temps pour le faire.
C'est ce qu'à fait Victor Stinner (greffon Gimp pour la version 1.0 de greycstoration), et on ne peut que le remercier !
Toutes ces bibliothèques ont leurs avantages et leurs inconvénients, leurs styles de programmation (qui plaira ou déplaira), leurs fonctionnalités, etc...
L'important c'est d'avoir le choix, et que l'on puisse utiliser l'une ou l'autre suivant l'occasion (ce qui est bien en traitement d'images, c'est que c'est généralement assez facile de programmer des passerelles entres les bibliothèques, puisque l'on manipule généralement que des tableaux 2D ou 3D de valeurs).
Oui j'imagine bien qu'en optimisant tout ca en assembleur, on pourrait peut-être gagner un facteur 10. Ca ne serait pas encore suffisant pour traiter des séquences d'images format TV en temps réel, mais dans un futur proche, pourquoi pas...
Tiens ca m'interesse l'article CImg sur Software 2.0,
mais impossible de le trouver en kiosque, je ne trouve que
le hors série.
Je me demande bien ce qu'ils peuvent dire dessus, si une ame
charitable veut bien me dire, ca serait sympa :)
Effectivement, ca me fait penser qu'il y a peut etre une solution pas trop chere en memoire,
qui pourrait optimiser la chose. Je vais voir ce que je peux faire.
A noter que ce n'est pas moi qui accepte specialement de distribuer en licence GPL (même si je suis d'accord :) ) , mais c'est un des points intéressant de la licence CeCiLL, qui permet de redistribuer tout code CeCill + GPL en GPL.
GREYCstoration, c'est le nom que j'ai donné au nouvel algorithme de restauration d'images,
que j'ai développé au laboratoire GREYC (CNRS UMR 6072) de Caen.
C'est la suite logique de l'algo 'Tschumperle-Deriche' que j'avais développé à l'INRIA.
Il donne de bien meilleurs résultats, c'est en fait une variante améliorée de l'ancien : il rend les images
moins lisses et s'execute beaucoup plus rapidement. C'est cette vitesse d'exécution qui m'a
convaincu que ca pourrait avoir des applications autres qu'expérimentales (il est vrai que le précédent
était particulièrement lourd en temps de calculs).
Tu peux l'essayer en le téléchargeant sur la page [2] citée plus haut, pour voir la différence.
Je me répond à moi-même : Je pense même
qu'en appliquant à la lettre cette licence, n'importe qui
peut prendre le code de la lib, rajouter une ligne de commentaire
(qu'il licenciera en GPL), et redistribuer le tout en GPL...
Pour le problème de la visibilité de la licence à l'étranger,
il y a une traduction de la licence en anglais, qui est assez bien
faite, et la section 'compatibilité avec la GPL' devrait les rassurer.
J'ai proposé de faire ce plug-in comme projet
à des étudiants de l'Ensicaen, mais malheureusement
un peu tard, donc il n'a pas été choisi. Pour l'instant,
le projet est donc en stand-by.
Je compte libérer le code source une fois que l'article
correspondant aura été publié, je travaille dessus
actuellement (et activement).
Si le code source est libéré, j'espère
qu'il y aura des volontaires pour s'en occuper.
Je n'ai pas le temps de faire ce plug-in moi même,
j'ai d'autres activités (recherche) qui me prennent du
temps. Mais je ne perd pas espoir de le voir peut-être un jour
dans Gimp !
Dans le cas où le Logiciel, Modifié ou non, est intégré à un code soumis aux dispositions de la licence GPL, le Licencié est autorisé à redistribuer l’ensemble sous la licence GPL.
Dans le cas où le Logiciel Modifié intègre un code soumis aux dispositions de la licence GPL, le Licencié est autorisé à redistribuer le Logiciel Modifié sous la licence GPL."
Oui, pareil pour sun/solaris, il risquerait de pas aimer :)
Cela dit, rien n'empeche de faire des bouts de code
optimisés pour le bas niveau (je pense à l'affichage surtout)
qui soit spécifiques à une certaine plateforme.
C'est d'ailleurs ce qui est déjà fait dans la librairie CImg, pour l'affichage et la gestion des evenements (utilise X11 pour unix/max, et windows GDI pour win). A priori ca doit être transparent
pour l'utilisateur final.
Pour répondre à nicO, moi le C++ ca me permet surtout de
faire des classes templates, après les bouts d'algo ils
travaillent sur un buffer de données exactement comme je le
faisais en C avant (d'ailleur la premiere version de CImg etait
ecrite en C, et generait des fonctions génériques avec des macros
à gogo). Je suppose que le passage en C++ ne m'a pas
pénalisé de ce coté la (pas d'hiérarchie compliquée à gérer,
pas des trucs de conceptions qui cacherait des bouts de code lents)
Je ne connais pas blast.
Les performances de CImg ne sont surement pas "optimales",
dans le sens ou aucune aide 'hardware' n'est utilisée (ni
pour l'affichage, ni pour les calculs).
Par contre, les algos sont relativements optimisés, ca permet
quand même de faire des traitements rapides.
C'est surtout au niveau de l'affichage je crois que il y aurait
des progrès à faire en terme de rapidité.
[^] # Re: ?
Posté par David Tschumperlé (site web personnel) . En réponse au journal GREYCstoration 2.0. Évalué à 2.
CImg suit un cycle de développement tout à fait continu. Quand j'ai fini une release, je commence la prochaine, et elle est dispo sur le CVS tout de suite (et parfois aussi en archive). Ca a été le cas avec la 1.1.1beta, qui corrige déjà quelques bugs de la 1.1.0.
Greycstoration en lui-même ne va pas faire sortir une nouvelle release de CImg tout de suite, car en fait les releases sortent après un laps de temps suffisamment long entres elles (i.e un nombre significatifs d'améliorations dans CImg).
C'est pour cela aussi que j'ai voulu faire ce journal, car à mon avis, l'amélioration sur Greycstoration seul est conséquente, même si le coeur de CImg n'a pas fondamentalement changé.
[^] # Re: Moi je veux bien mais ...
Posté par David Tschumperlé (site web personnel) . En réponse au journal GREYCstoration 2.0. Évalué à 9.
Ce qui serait sympa de ta part, c'est que tu m'envoies (par e-mail) tes premières impressions d'utilisateur 'lambda' pour voir quels points je devrais éclaircir en premier dans le tutorial.
Je pensais attaquer directement le choix des options mais apparemment avoir la liste des options n'est déjà pas une mince affaire.
Pour te répondre rapidement, pour restaurer une image tu dois utiliser l'option -restore nom_de_fichier, et si tu mets l'option '-h' EN PLUS, tu obtient normalement la liste des options disponibles et un descriptif rapide dans ton terminal. Chez moi par exemple :
./greycstoration -restore toto.ppm -h
m'affiche :
-restore = submarine.jpg : Restore the image specified after '-restore'
-inpaint = NULL : Inpaint the image specified after '-inpaint'
-resize = NULL : Resize the image specified after '-resize'
-dt = 50 : Smoothing strength
-p = 0.8 : Contour preservation
-a = 0.8 : Smoothing anisotropy
-alpha = 0.5 : Noise scale
-sigma = 1 : Geometry regularity
-iter = 1 : Number of iterations
-scheme = true : Curvature-preserving scheme (0=false, 1=true)
-ng = 0 : Add gaussian noise before denoising
-nu = 0 : Add uniform noise before denoising
-ns = 0 : Add Salt&Pepper noise before denoising
-save = 0 : Iteration saving step
-visu = true : Enable/Disable visualization
-o = NULL : Output image
-prenormalize = false : Pre-normalization in [0,255]
-postnormalize = false : Post-normalization in [0,255]
-dl = 0.8 : Spatial integration step
-da = 45 : Angular integration step (in degrees)
-prec = 2 : Precision of the gaussian function
-interp = 0 : Interpolation type (0=Nearest-neighbor, 1=Linear,
Ce n'est pas très détaillé, mais ca permet déjà de jouer un peu avec l'algorithme.
En ce qui concerne les sources, je peux te donner ce lien :
http://prdownloads.sourceforge.net/cimg/CImg-1-11beta.zip?do(...)
qui te permettra de charger les sources du logiciel (fichier examples/greycstoration.cpp). Je prefère regrouper les sources avec CImg (http://cimg.sourceforge.net) plutôt que de les distribuer à part, avec les problèmes de mise à jour que ca peut poser.
David.
[^] # Re: ImageMagick
Posté par David Tschumperlé (site web personnel) . En réponse au journal GREYCstoration 2.0. Évalué à 3.
Extrait de CeCILL :
"5.3.4 COMPATIBILITY WITH THE GNU GPL
The Licensee can include a code that is subject to the provisions of one of the versions of the GNU GPL in the Modified or unmodified Software, and distribute that entire code under the terms of the same version of the GNU GPL.
The Licensee can include the Modified or unmodified Software in a code that is subject to the provisions of one of the versions of the GNU GPL, and distribute that entire code under the terms of the same version of the GNU GPL.
"
David.
[^] # Re: ImageMagick
Posté par David Tschumperlé (site web personnel) . En réponse au journal GREYCstoration 2.0. Évalué à 10.
Mais j'avoue que concevoir l'algorithme et le programmer a déjà été un sacré boulot.
L'intégrer dans Gimp ou ImageMagick demanderait du temps que je n'ai pas forcément. J'éspère en libérant les sources que justement quelqu'un pourra prendre un peu de temps pour le faire.
C'est ce qu'à fait Victor Stinner (greffon Gimp pour la version 1.0 de greycstoration), et on ne peut que le remercier !
[^] # Re: 404 su toutes les url www.greyc.ensicaen.fr/dtschump
Posté par David Tschumperlé (site web personnel) . En réponse au journal Sortie de CImg 1.1.0.. Évalué à 1.
David.
[^] # Re: itk
Posté par David Tschumperlé (site web personnel) . En réponse au journal Sortie de CImg 1.1.0.. Évalué à 7.
- PaintLib : http://www.paintlib.de/paintlib/
- Olena : http://www.lrde.epita.fr/cgi-bin/twiki/view/Olena/WebHome
- Devil : http://openil.sourceforge.net/
- FreeImage : http://freeimage.sourceforge.net/intro.html
- LTIlib : http://ltilib.sourceforge.net/doc/homepage/index.shtml
- Pandore : http://www.greyc.ensicaen.fr/EquipeImage/Pandore/
- VIGRA : http://kogs-www.informatik.uni-hamburg.de/%7Ekoethe/vigra/
...
Toutes ces bibliothèques ont leurs avantages et leurs inconvénients, leurs styles de programmation (qui plaira ou déplaira), leurs fonctionnalités, etc...
L'important c'est d'avoir le choix, et que l'on puisse utiliser l'une ou l'autre suivant l'occasion (ce qui est bien en traitement d'images, c'est que c'est généralement assez facile de programmer des passerelles entres les bibliothèques, puisque l'on manipule généralement que des tableaux 2D ou 3D de valeurs).
David.
[^] # Re: CImg/krita
Posté par David Tschumperlé (site web personnel) . En réponse au journal Sortie de CImg 1.1.0.. Évalué à 6.
[^] # Re: Ca n'a rien a voir mais...
Posté par David Tschumperlé (site web personnel) . En réponse au journal Economie d'énergie. Évalué à 1.
# Ca n'a rien a voir mais...
Posté par David Tschumperlé (site web personnel) . En réponse au journal Economie d'énergie. Évalué à 6.
"Microsoft, c'est de l'énergie et du bonheur en baRre",
suivit de :
"Economie d'énergie"
Très très fort !
[^] # Re: Recette rigolote
Posté par David Tschumperlé (site web personnel) . En réponse au journal J'ai découvert le micro-onde..... Évalué à 2.
en mode grill.
# CImg dans Software 2.0
Posté par David Tschumperlé (site web personnel) . En réponse à la dépêche Revue de Presse - Mars 2005. Évalué à 2.
mais impossible de le trouver en kiosque, je ne trouve que
le hors série.
Je me demande bien ce qu'ils peuvent dire dessus, si une ame
charitable veut bien me dire, ca serait sympa :)
David.
[^] # Re: effet video
Posté par David Tschumperlé (site web personnel) . En réponse au journal Greffon Gimp GREYCstoration. Évalué à 1.
qui pourrait optimiser la chose. Je vais voir ce que je peux faire.
David.
[^] # Re: Licence
Posté par David Tschumperlé (site web personnel) . En réponse au journal Greffon Gimp GREYCstoration. Évalué à 4.
David.
[^] # Re: Bravo !
Posté par David Tschumperlé (site web personnel) . En réponse au journal Greffon Gimp GREYCstoration. Évalué à 7.
je suis épaté. Félicitations, et vivre le logiciel libre !
David.
[^] # Re: pas vraiment simple
Posté par David Tschumperlé (site web personnel) . En réponse au journal Distance entre deux images.... Évalué à 1.
#include "CImg.h"
using namespace cimg_library;
int main(int argc,char **argv) {
const CImg<> img1("image1.png"), img2("image2.png");
const CImg<> diff = (img1-img2).get_abs();
const float erreur = diff.sum();
std::fprintf(stderr,"Erreur entre les deux images : %g\n",err);
return 0;
}
[^] # Re: Cimg, c'est génial !!!
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg1.0.8beta1 et Plugin GIMP ?. Évalué à 2.
que j'ai développé au laboratoire GREYC (CNRS UMR 6072) de Caen.
C'est la suite logique de l'algo 'Tschumperle-Deriche' que j'avais développé à l'INRIA.
Il donne de bien meilleurs résultats, c'est en fait une variante améliorée de l'ancien : il rend les images
moins lisses et s'execute beaucoup plus rapidement. C'est cette vitesse d'exécution qui m'a
convaincu que ca pourrait avoir des applications autres qu'expérimentales (il est vrai que le précédent
était particulièrement lourd en temps de calculs).
Tu peux l'essayer en le téléchargeant sur la page [2] citée plus haut, pour voir la différence.
# Licence CeCILL
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg1.0.8beta1 et Plugin GIMP ?. Évalué à 6.
[^] # Re: Double
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 2.
qu'en appliquant à la lettre cette licence, n'importe qui
peut prendre le code de la lib, rajouter une ligne de commentaire
(qu'il licenciera en GPL), et redistribuer le tout en GPL...
Pour le problème de la visibilité de la licence à l'étranger,
il y a une traduction de la licence en anglais, qui est assez bien
faite, et la section 'compatibilité avec la GPL' devrait les rassurer.
[^] # Re: Gimp
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 1.
à des étudiants de l'Ensicaen, mais malheureusement
un peu tard, donc il n'a pas été choisi. Pour l'instant,
le projet est donc en stand-by.
Je compte libérer le code source une fois que l'article
correspondant aura été publié, je travaille dessus
actuellement (et activement).
Si le code source est libéré, j'espère
qu'il y aura des volontaires pour s'en occuper.
Je n'ai pas le temps de faire ce plug-in moi même,
j'ai d'autres activités (recherche) qui me prennent du
temps. Mais je ne perd pas espoir de le voir peut-être un jour
dans Gimp !
[^] # Re: Double
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 1.
"5.3.4. COMPATIBILITE AVEC LA LICENCE GPL
Dans le cas où le Logiciel, Modifié ou non, est intégré à un code soumis aux dispositions de la licence GPL, le Licencié est autorisé à redistribuer l’ensemble sous la licence GPL.
Dans le cas où le Logiciel Modifié intègre un code soumis aux dispositions de la licence GPL, le Licencié est autorisé à redistribuer le Logiciel Modifié sous la licence GPL."
Je pense que ca répond à la question.
[^] # Re: Double
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 1.
redistribuer du code CeCiLL en GPL assez facilement ?
[^] # Re: perf ?
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 1.
Cela dit, rien n'empeche de faire des bouts de code
optimisés pour le bas niveau (je pense à l'affichage surtout)
qui soit spécifiques à une certaine plateforme.
C'est d'ailleurs ce qui est déjà fait dans la librairie CImg, pour l'affichage et la gestion des evenements (utilise X11 pour unix/max, et windows GDI pour win). A priori ca doit être transparent
pour l'utilisateur final.
Pour répondre à nicO, moi le C++ ca me permet surtout de
faire des classes templates, après les bouts d'algo ils
travaillent sur un buffer de données exactement comme je le
faisais en C avant (d'ailleur la premiere version de CImg etait
ecrite en C, et generait des fonctions génériques avec des macros
à gogo). Je suppose que le passage en C++ ne m'a pas
pénalisé de ce coté la (pas d'hiérarchie compliquée à gérer,
pas des trucs de conceptions qui cacherait des bouts de code lents)
[^] # Re: perf ?
Posté par David Tschumperlé (site web personnel) . En réponse au journal CImg Library 1.0.7 et licence CeCILL. Évalué à 1.
Les performances de CImg ne sont surement pas "optimales",
dans le sens ou aucune aide 'hardware' n'est utilisée (ni
pour l'affichage, ni pour les calculs).
Par contre, les algos sont relativements optimisés, ca permet
quand même de faire des traitements rapides.
C'est surtout au niveau de l'affichage je crois que il y aurait
des progrès à faire en terme de rapidité.
[^] # Re: Excellent
Posté par David Tschumperlé (site web personnel) . En réponse au journal Restauration d'image au CNRS. Évalué à 2.
greycstoration -restore noisy.png -o restored.png
[^] # Re: R0X0R
Posté par David Tschumperlé (site web personnel) . En réponse au journal Restauration d'image au CNRS. Évalué à 6.
et à terme, je pense libérer les sources.