Journal Greffon Gimp GREYCstoration

Posté par  (site web personnel) .
Étiquettes : aucune
0
11
mar.
2005
Pour rendre l'algorithme GREYCstoration de David Tschumperlé accessible à tous, j'ai écrit un greffon Gimp qui l'utilise. C'est une version alpha, seul la fonction de restauration est utilisable (reste l'inpainting, le redimensionnement d'image et la visualisation de flux).

Pour l'utiliser, il vous faut le compiler à la main. Pour ceci, il vous faut : Gimp 2.2.x, g++, entêtes de la librairie gimp, GTK 2.x (2.6 ?) et les entêtes de développement de GTK. En langage Debian, cela donne :
g++ libgimp2.0 libgimp2.0-dev libgtk2.0-dev libgtk2.0-0

Maintenant, téléchargez les sources :
http://www.haypocalc.com/tmp/greystoration_gimp-0.1.tar.gz(...)

Un petit "make install" (pas besoin de passer root), et on lance Gimp. Le greffon est maintenant accessible via le menu Filtres > Misc > GREYCstoration, mais uniquement pour les images RBG (24 ou 32 bpp).

Exemples :
- http://www.greyc.ensicaen.fr/~dtschump/greycstoration/demo.html(...)
- http://www.girouette-stinner.com/castor/restore.html(...)

Liens :
- CImg : http://cimg.sourceforge.net/(...) (la librairie de traitement d'image)
- GREYCstoration : http://www.greyc.ensicaen.fr/~dtschump/greycstoration/(...)

Haypo
  • # Bravo !

    Posté par  (site web personnel) . Évalué à 3.

    Rien a dire de plus, sinon que je vais surement tester ce weekend :)
    • [^] # Re: Bravo !

      Posté par  (site web personnel) . Évalué à 7.

      Effectivement, ca fait plaisir de voir un plug-in aussi rapidement,
      je suis épaté. Félicitations, et vivre le logiciel libre !

      David.
    • [^] # Re: Bravo !

      Posté par  . Évalué à 1.

      vraiment, félicitations à tous les deux... c'est épatant et très utilisable.
      Victor, vivement les versions suivantes gérant les autres fonctions.

      Juste une petite chose pour le greffon, j'ai essayé avec une image, annulé, rogné mon image et de nouveau lancé le greffon. L'aperçu m'affiche alors l'image à la taille originale (avant rognage) : je dois sauver et réouvrir à nouveau l'image pour rafraichir l'aperçu...

      Bon, c'est quand même pas trop génant.

      Merci et bon courage pour la suite...
      • [^] # Re: Bravo !

        Posté par  (site web personnel) . Évalué à 2.

        Juste une petite chose pour le greffon, j'ai essayé avec une image, annulé, rogné mon image et de nouveau lancé le greffon. L'aperçu m'affiche alors l'image à la taille originale (avant rognage) : je dois sauver et réouvrir à nouveau l'image pour rafraichir l'aperçu...

        Hum ... Ne serait-ce pas plutôt un bug de Gimp ? J'ai tenté ta manip, mais j'ai toujours obtenu ce que je voulais. J'ai la version 2.2.4, et toi ?

        @+ Haypo
        • [^] # Re: Bravo !

          Posté par  . Évalué à 2.

          ok... erreur de ma part... j'ai cliqué sur redimensionner au lieu de découper à l'aide de l'outil de découpage...
          inutilisez-moi...
  • # et ca t'interesserait pas de faire un plugin pour...

    Posté par  (site web personnel) . Évalué à 5.

    Une transformation avec des ondelettes ?
    du style : 7 niveaux d'ondelettes (fines a grossière) pour le renforcement d'image... ?
    Ceci serait TRES utilise pour les astronomes amateurs sous linux.
    exemple de logiciels : iris ( http://www.Astrosurf.com/buil/iris/iris.htm(...) ) ou registax
  • # re

    Posté par  (site web personnel) . Évalué à 3.

    J'ai les dependances mais ca compile pas sur mdk 10.1 off : /

    [code]
    [tsubasa@mdk101 greystoration_gimp]$ make install
    Compile image.o
    In file included from image.cpp:1:
    image.h:23: error: ISO C++ forbids declaration of `GimpPreview' with no type
    image.h:23: error: expected `;' before '*' token
    image.h:28: error: `GimpPreview' has not been declared
    image.h:28: error: ISO C++ forbids declaration of `preview' with no type
    image.cpp:12: error: `GimpPreview' has not been declared
    image.cpp:13: error: ISO C++ forbids declaration of `ppreview' with no type
    image.cpp: In member function `void Image::init(GimpDrawable*, int*)':
    image.cpp:15: error: `preview' undeclared (first use this function)
    image.cpp:15: error: (Each undeclared identifier is reported only once for each function it appears in.)
    image.cpp:18: error: `gimp_preview_get_position' undeclared (first use this function)
    image.cpp:19: error: `gimp_preview_get_size' undeclared (first use this function)
    make: *** [image.o] Erreur 1
    [/code]
  • # C'est beaucoup plus facile à paramétrer

    Posté par  (site web personnel) . Évalué à 7.

    Avec la zone de prévisualisation et les zones de saisies, on paramètre l'outil bien plus facilement ! J'ai réussi à restaurer une image très abimée, voyez l'image de bébé sur :
    http://www.girouette-stinner.com/castor/restore.html(...)

    Le détail de l'oeil montre que l'algo excelle lorsqu'il trouve des courbes. Par contre, pour les aplats de couleurs, on voit des "tourbillons" qui apparaissent. Il faut rapprocher p1 de p2 pour limiter l'effet.

    Haypo
  • # Licence

    Posté par  . Évalué à 4.

    C'est sous quelle licence ?
    • [^] # Re: Licence

      Posté par  (site web personnel) . Évalué à 2.

      Il y a trois éléments à considérer :

      - CImg : la librairie graphique. Elle est initialement sous licence CeCILL, mais David Tscumperlé a accepté de la distribuer sous licence GNU GPL. Voir le fichier copyright dans le paquet Debian :
      http://packages.debian.org/changelogs/pool/main/c/cimg/cimg_1.0.7-1(...)

      - GREYCstoration : le coeur du plugin. Il est sous licence CeCILL. Je pense que David T. sera d'accord pour le distribuer sous licence GNU GPL. D'ailleurs, les deux licences ne sont pas compatibles par hasard ?

      - Mon plugin : ... euh ... GNU GPL. Elle est sympa cette licence :o) J'inclurai la licence dans la prochaine version.

      Total : 100% GNU GPL normalement.

      @+ Haypo
      • [^] # Re: Licence

        Posté par  (site web personnel) . Évalué à 4.

        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.

        David.
        • [^] # Re: Licence

          Posté par  . Évalué à 2.

          Ha oui je crois que c'est bon, mais j'avais parlé de la CeCiLL avec David Turner qui prépare la GPL 3.0, il disait que le problème venait du fait CeCiLL ne précisait pas avec quelle version de la GPL elle était compatible.
  • # effet video

    Posté par  . Évalué à 1.

    Je ne connaissais pas cet effet, mais je me demandais si cela serait une solution pour restaurer une vidéo dégradée ?

    Le top serait d'avoir cet algorithme cablé dans une carte vidéo pour obtenir une visualisation améliorée.

    En tout cas, l'effet cartoon est trés intéressant !
    • [^] # Re: effet video

      Posté par  (site web personnel) . Évalué à 2.

      Si tu essayes le filtre, tu verras que pour une image de 400x400 pixels (RVB), le calcul prend environ une minute (sur un Athlon à 2 GHz) ...

      Bon, le temps de calcul dépend entièrement des paramètres (et donc du bruit à éliminer). Et puis, à force, on va peut-être réussir à l'optimiser cette algo ;-) Pour info, y'a un paquet de calculs qui sont faits, et tous sur des nombres flottants (float en C). Un bon benchmark pour un processeur donc ;-)

      Je ne pense pas que l'algo soit utilisable aujourd'hui sur de la vidéo (résolution supérieure et un paquet d'images à traiter). Par contre, j'avais lu un papier très intéressant sur la restauration de photo pour traiter le cas du désentrelassement. Bon là le site de GREYCstoration ne semble pas accessible, donc c'est pas gagné pour retrouver le lien.

      Haypo
      • [^] # Re: effet video

        Posté par  (site web personnel) . Évalué à 1.

        >Et puis, à force, on va peut-être réussir à l'optimiser cette algo ;-)

        Bon j'ai regardé ou perdait son temps le processeur grâce à oprofile... le résultat est plutot simple: 96.5933% des instructions retirées le sont dans GREYCstoration::compute_LIC_back_forward(int, int);

        La moindre optim la dedans devrait faire des miracles, je regarderai de plus près si j'ai du temps libre... d'autant plus que mon profilage est partiel, j'aurais dû utiliser CPU_CLK_UNHALTED pour avoir une estimation des cycles passés dans les fonctions.

        Aux amateurs d'optim, le profile et les sources annotées sont sur:
        http://ed.gomez.free.fr/vrac/GREYCstoration/(...)

        Mais biensûr, en bon optimiseur que vous êtes, oprofile n'a plus aucun secret pour vous et donc mon profilage partiel ne vous servira a rien.
        • [^] # Re: effet video

          Posté par  (site web personnel) . Évalué à 1.

          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.

          David.
          • [^] # Re: effet video

            Posté par  (site web personnel) . Évalué à 2.

            Hey, j'ai trouvé une solution (temporaire) pour largement accélérer les calculs : prendre un dl "grand".

            dl=0.8 : calul=25 secondes (meilleur rendu)
            dl=1.0 : calcul=21 secondes
            dl=1.5 : calcul=14 secondes (légères nuances)
            dl=3.0 : calcul=7 secondes (on voit que la qualité baisse)
            dl=5.0 : calcul=5 secondes (le filtre ne fait plus que 50% du boulot)

            Le truc intéressant est que la différence entre les images générées pour dl=0.8 (par défaut) et dl=1.5 est peu perceptible. Pour moi en tout cas (j'suis un peu daltonien ...). Après en regardant en détail, on voit qu'il y a bien des différences. Prendre les deux images, coller les deux calques dans la même image, choisir le mode "soustraction" pour le calque supérieur, aplatir l'image, et rehausser le contraste.

            Autre paramètre accélérant le calcul : linear=false.

            linear=true : calcul=25 secondes
            linear=false : calcul=20 secondes

            On peut imaginer différents "profils de qualité". Exemple : "qualité photo" (dl=0.8, linear=true), "brouillon" (dl=3.0, linear=false), et différentes nuances. Ceci permettrait d'avoir un rendu plus rapide de l'effet et de configurer plus rapidement les différents paramètres.

            Allez, un dernier paramètre pour la route : da.

            (Avec linear=false, dl=1.5)
            da=45 : calcul=10.6 secondes
            da=90 : calcul=5.6 secondes (l'image est différente, mais je sais pas dire en quoi ... :-) ... mieux contrastée ? des contours différents on va dire)
            da=180 : calcul=3.2 secondes (il y a beaucoup d'artefacts)

            Beaucoup de bonnes choses pour accélerer le calcul, ou au moins la fenêtre d'aperçu du plugin !

            Conclusion :
            - Avant (a) : 26 secondes (paramètres par défaut)
            - Après (b) : 6 secondes (dl=1.5, linear=false, da=90)
            - Après (c) : 8 secondes (dl=1.5, da=90)

            La différence entre (a) et (b) est largement visible. Par contre, (a) et (c) sont assez ressemblant. Euh, je veux dire que c'est un aperçu de très bonne qualité ;-)

            PS: Je viens de voir que dans mon plugin, le paramètre "dl" est en fait nommé "di".
            Haypo
            • [^] # Re: effet video

              Posté par  (site web personnel) . Évalué à 1.

              Ca ne regle malheureusement pas le probleme de fond qui est double:
              - Pour chaque pixel, on integre sur une assez grande zone autour du pixel courant, ce qui bouffe une bande passante mémoire énorme.
              - On traite l'image pixel par pixel, diminuer le ratio CLOCKS/Pixels.

              Les solutions imaginables pour le premier point:
              - Etre sur de bien aligner le tout, mine de rien, des lectures de memoire alignées c'est plus rapide pour le CPU/Controleur memoire.
              - Penser à utiliser au maximum le cache CPU en travaillant sur des données le plus localisées possible et si possible se servir autant de fois que possible de chaque acces afin de ne pas avoir a y revenir plus tard.
              - Voir si certains calculs pourraient utiliser moins d'acces memoire, selon que l'algo s'y prete ou pas, envisager la reutilisation de resultats precedents couvrant un grand nombre d'acces memoire.

              Les solutions imaginables pour le second point:
              - Regarder de plus pres l'utilisation de tout opérateur couteux (/ et *) et donc minimiser petit a petit les nombre de cycles necessaires par pixel.
              - Il faut voir si on ne peut pas prévoir une vectorisation de la transformation pour pouvoir optimiser le tout en utilisant les instructions SIMD SSE d'abord, puis si on est vraiment très courageux, passer en SIMD iSSE (mais attention, il faut bien prévoir la precision de calcul en virgule fixe sous peine de tuer l'intégration ç cause de l'accumulation d'erreurs d'approximations).

              Voila, c'est toujours les memes concepts d'optim qu'on doit mettre a l'oeuvre. La plupart du temps, chaque technique d'optim est limité par l'algo qui se prete plus ou moins au jeu.

              A savoir que le mieux reste d'optimiser l'algo avant de penser a partir dans les delires de reduction d'acces memoire et de vectorisation.
            • [^] # Re: effet video

              Posté par  (site web personnel) . Évalué à 1.

              coller les deux calques dans la même image, choisir le mode "soustraction" pour le calque supérieur, aplatir l'image, et rehausser le contraste.

              Houlà malheureux ! "Soustraction" fait une soustraction saturée des 2 calques !
              Si c1>c2 alors
              c1-c2= c1-c2
              c2-c1= 0

              Il faut utiliser "difference" pour ce que tu veux faire, ça donne la distance entre les 2 couleurs :
              Si c1>c2 alors
              c1-c2= c1-c2
              c2-c1= c2-c1
              • [^] # Re: effet video

                Posté par  (site web personnel) . Évalué à 2.

                Hum, j'ai peut-être utilisé ça, je ne sais plus (j'ai écrit le commentaire après avoir bossé sous Gimp). Je trouve les termes mal choisis.

                Haypo
  • # APT

    Posté par  . Évalué à 6.

    Ma petite pierre à l'édifice :

    http://garbure.org/garbure/?el=SbApt_repository(...)

    apt-get update
    apt-get install gimp-greystoration
  • # Tite question

    Posté par  . Évalué à 3.

    Puisque c'est GPL, est-ce que ce greffon sera livré par défaut dans les versions futures de The Gimp ?
    • [^] # Re: Tite question

      Posté par  (site web personnel) . Évalué à 2.

      On m'a dit sur IRC qu'ils ne veulent pas greffon en C++. Je comprend, ça rajoute pas mal de dépendences pour compiler Gimp ça ! Enfin, affaire à suivre.

      Haypo
  • # Package debian

    Posté par  (site web personnel) . Évalué à 1.

    Bon, j'avais pas vu qu'il y avait déjà un package debian, j'en ai donc créé un aussi :

    Dans /etc/apt/sources.list :
    deb http://debian.sarcelle.net/ unstable main
    Et puis :
    apt-get update
    apt-get install gimp-greystoration
  • # Je ne pensais pas que ce plugin aurait tant de succès

    Posté par  (site web personnel) . Évalué à 5.

    Pour la peine, je l'ai un peu retravaillé. Modifs :
    * Version 0.1.1
    * Dialog reorganized with better parameters names.
    * Fix plugin entry in Gimp menu (Greycstoration -> GREYCstoration).
    * Don't use CImg interface (keyboard/mouse) which remove X11 and pthread dependencies (or Win32 dependencies)
    * Change default values (p1=0.1 and sigma=1.4)

    http://www.haypocalc.com/tmp/greystoration_gimp-0.1-1.tar.gz(...)

    La plus grosse amélioration, c'est le dialogue mieux organisé, et avec des noms de paramètres plus clairs.

    Victor
  • # Comparatif avec Noise Ninja et Denoise Deluxe

    Posté par  (site web personnel) . Évalué à 2.

    Salut,

    J'ai essayé de restaurer les photos données en exemple sur les sites webs des plugins Photoshop Noise Ninja (commercial) et Denoise Deluxe. Voici les résultats :
    http://www.girouette-stinner.com/castor/compare.html(...)

    GREYCstoration est bien meilleur je trouve.

    En passant, je me demande où les auteurs de Noise Ninja ont trouvé une image aussi bruitée :-)

    @+, Haypo

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.