Retrouvez cet article dans : Linux Pratique 42
GREYCstoration est un utilitaire remarquable qui vous permet de restaurer, reconstruire ou redimensionner des images ou des photographies par interpolation non linéaire. Les amateurs de retouche photo apprécieront ses fonctionnalités originales, ainsi que la possibilité de l'utiliser en tant que greffon pour The Gimp, Krita ou DigiKam.
Son principe consiste à analyser les images, de façon à tenir compte à la fois des couleurs, mais aussi des contours de celles-ci. Il lui est alors possible de retirer le bruit des images, de remplir d'éventuels trous dans les images ou d'agrandir une image, tout en préservant la distribution initialement analysée des formes et couleurs, c'est-à -dire sans pixelisation apparente.
Devraient tirer pleinement parti de ce logiciel tous ceux :
- qui ont numérisé et stocké sur leurs disques de vieilles photographies abîmées ou déchirées ;
- qui ont numérisé des images à partir d'un document imprimé faisant apparaître un effet de trame ;
- qui réalisent des images de synthèse laissant apparaître un grain important (illumination globale).

Fig. 1 : Exemple de mise en œuvre de GREYCstoration dans le cadre du " nettoyage " d'une image d'origine bruitée. Images d'exemple issues du site officiel de GREYCstoration.
Il est possible de se procurer GREYCstoration sous forme de binaires précompilés à l'adresse suivante :
http://www.greyc.ensicaen.fr/~dtschump/greycstoration/data/GREYCstoration-2.5.2.1.zip Le seul pré-requis est l'installation d'ImageMagick afin de pouvoir l'utiliser avec des formats d'image compressés, comme le JPEG ou le PNG. Cette archive contient des binaires pour les plateformes Windows, Mac Os X et Linux. Il contient également le greffon pour The Gimp.
Si le binaire pré-compilé ne fonctionne pas chez vous (en particulier, il nécessite Glibc 2.6 ou plus), vous pouvez toujours compiler vous-même GREYCstoration. Pour cela, commencez par télécharger les sources du projet de bibliothèque CImg (http://cimg.sourceforge.net/download.shtml) et décompressez-les dans un répertoire de votre choix. En mode console, placez-vous dans le répertoire
/examples et lancez la commande :
Une liste d'options fait alors son apparition, pour vous demander à quelle plate-forme la compilation est destinée (Linux/MacOSX et Solaris). Pour chaque cas, vous disposez de plusieurs options de compilation, mais pour augmenter vos chances de parvenir à réaliser celle-ci, choisissez l'option
mlinux, qui vous permet de compiler avec un minimum de dépendances à satisfaire.
La commande va alors procéder à la compilation de tous les éléments de la bibliothèque CImg. Vous pouvez interrompre celle-ci dès que les binaires relatifs à GREYCstoration sont tous compilés. Il ne vous reste plus qu'à copier le fichier greycstoration dans le répertoire
/usr/bin/ :
|
|
$ cp ./greycstoration /usr/bin |
Utilisation de GREYCstoration
GREYCstoration est dédié à trois usages spécifiques, chacun basé sur la même méthodologie : il va s'agir d'adoucir localement l'image tout en respectant les flots de couleurs ou de contours qui auront été détectés par l'algorithme. Pour l'essentiel, les paramètres du programme vont donc permettre de définir la façon d'analyser l'image pour en déterminer le contenu, puis de définir comment appliquer l'adoucissement.
Restauration d'images
C'est de loin l'utilisation la plus populaire du programme, puisqu'il va s'agir de retirer du bruit ou des artefacts de compression à une image existante qui peut être de faible résolution (webcam) ou mal numérisée, par exemple. Les utilisateurs de moteurs de rendu en 3D à base d'illumination globale (qui laissent plus ou moins de bruit sur l'image finale, en fonction du temps consacré au rendu ou des paramètres de qualité spécifiés) trouveront également un intérêt notable à GREYCstoration qui leur permettra de masquer les imperfections de leurs images tout en économisant un temps précieux de calcul ; en effet, l'utilisation d'une solution de post-traitement comme GREYCstoration est beaucoup plus rapide que l'usage de paramètres de rendu permettant l'obtention d'une qualité supérieure.

Fig. 2 : Notre image test, obtenue par synthèse d'images, avec du bruit bien visible
Au plus simple, la syntaxe de ce logiciel va être :
|
|
$ greycstoration -restore [nom: image d'origine] -o [nom: image restaurée] |
Mais il est possible d'ajouter, après le nom (et éventuellement, chemin) de l'image d'origine, quelques options. Nous ne les énumérerons pas toutes ici, seulement quelques-unes des plus utiles.
Options d'entrée/sortie
- -save : par défaut 0. En spécifiant -save 1, GREYCstoration va enregistrer une version intermédiaire de l'image après chaque itération (option -iter)
- -quality : lorsque vous travaillez avec des images JPEG, vous pouvez spécifier la qualité de l'image de sortie. Par défaut, -quality 100 (pas de compression).
Options de l'algorithme
- -dt : détermine la " force " de l'adoucissement, sachant que plus cette valeur sera élevée, plus la zone affectée par l'adoucissement sera grande et permettra d'adoucir de grands défauts (par défaut, -dt 20).
- -iter : définit le nombre d'itérations de la fonction, c'est-à -dire le nombre de fois qu'elle sera appliquée consécutivement à la même image (par défaut, -iter 1).
- -tile : permet le traitement par morceaux de l'image. Par défaut, -tile 0, ce qui veut dire que ce mode est désactivé.
- -threads : si le mode -tile est actif (par exemple, -tile 64), il est possible de mettre en parallèle le traitement de plusieurs morceaux, en précisant le nombre de files de calcul disponibles. Pour un ordinateur à processeur double cœur, par exemple, vous saisirez ici -threads 2.
- -p : définit le taux de préservation des contours (par défaut, -p 0.8). Des valeurs faibles donneront un résultat flou.
- -alpha : définit la taille du bruit (par défaut, -alpha 0.5). En augmentant cette valeur, vous améliorez la détection des grains fins ainsi que leur traitement.
Exemples d'usage
Les deux exemples qui suivent sont très classiques et d'usage courant. Le premier (Fig. 3) consiste tout simplement à supprimer du grain à l'image (défauts de petite taille,
-dt 20), en deux passes successives (
-iter 2) :
|
|
$ ./greycstoration -restore [nom: image d'origine] -dt 20 -iter 2 -o [nom: image restaurée] |

Fig. 3 : Exemple de restauration d'une image par deux passes successives
Dans l'exemple suivant (Fig. 4, page suivante), non seulement le grain est supprimé, mais un effet de flou est communiqué à l'ensemble de l'image (
-p 0.25) par adoucissement des contours.

Fig. 4 : Flouter une image est tout aussi facile
|
|
$ ./greycstoration -restore [nom: image d'origine] -dt 20 -p 0.25 -o [nom: image restaurée] |
Il est également possible de renforcer la netteté des bords grâce à l'option -sdt, si le flou est un peu trop envahissant et déborde sur les objets voisins.
Agrandissement d'une image
Normalement, lorsque vous redimensionnez une image (par exemple, en l'agrandissant d'un facteur 4), vous constatez une importante pixelisation de l'image. Avec son option -resize, GREYCstoration va redimensionner l'image tout en interpolant les valeurs des pixels supplémentaires.
Il suffit de tester la fonctionnalité pour s'en convaincre. La ligne de code suivante va produire une image de largeur et de hauteur égales à 400% des valeurs d'origine (Fig. 5) :
|
|
$ ./greycstoration -resize [nom: image d'origine] –g 400%x400% -o [nom: image redimensionnée] |

Fig. 5 : Grâce à l'option -resize de GREYCstoration, plutôt que de pixeliser, l'agrandissement d'une image est interpolée.

Fig. 6 : Exemple d'usage de la fonction inpaint pour supprimer la grille à laquelle est suspendu ce perroquet. Image d'exemple issue du site officiel de GREYCstoration.
Dans le même ordre d'idée, vous pouvez directement spécifier les largeur et hauteur en pixels de l'image finale (ici, exemple pour une image de dimensions finales 640 x 480) :
|
|
$ ./greycstoration -resize [nom: image d'origine] –g 640x480 -o [nom: image redimensionnée] |
Une option vous permet de définir le type d'interpolation permettant la génération des pixels manquants :
-interp. Avec une valeur de
0, les pixels sont créés au plus proche des pixels voisins. Avec une valeur de 1, une simple interpolation linéaire est pratiquée. Enfin, avec une valeur de
2, c'est une interpolation suivant la méthode de Runge-Kutta1 qui sera employée.
1 Les méthodes de Runge-Kutta sont des méthodes d'analyse numérique d'approximation de solutions d'équations différentielles. Elles portent le nom des mathématiciens Carl Runge et Martin Wilhelm Kutta. Ces méthodes reposent sur le principe de l'itération, c'est-à -dire qu'une première estimation de la solution est utilisée pour calculer une seconde estimation, plus précise, et ainsi de suite. (Source : Wikipedia)
Reconstruction d'images
L'algorithme derrière GREYCstoration révèle également sa puissance à travers la possibilité de reconstruire des zones spécifiées par l'utilisateur, grâce à l'usage de masques en noir et blanc, par interpolation des portions d'image disponibles en périphérie du masque. Cela permet par exemple de supprimer un objet sur une photo, en interpolant, toujours suivant le même algorithme, l'espace manquant.
Sur la figure 6, un perroquet est agrippé à la grille de sa cage. On peint un masque blanc sur les éléments à masquer de l'image (en l'occurrence, on masque la grille). GREYCstoration se charge alors d'effacer les pixels sous le masque et de les remplacer par des pixels dont la couleur est interpolée à partir des blocs de pixels voisins.
Pour la création du masque, vous vous reposerez sur votre éditeur d'image favori (The Gimp, Krita ou autre). Il ne vous manquera plus qu'à saisir la commande suivante dans la console pour lancer la fonction de reconstruction :
|
|
$ ./greycstoration -inpaint [nom: image d'origine] –m [nom: masque] -o [nom: image reconstruite] |
Pour voir aboutir la reconstruction (
-visu 1 pour une visualisation temps réel des progrès), il faudra être patient, car le programme procédera à un bon millier d'itérations pour obtenir un résultat.
Malgré cette étonnante prouesse technique, GREYCstoration se heurte à des limites qui ne sont pas techniques : il est probable que, par endroits, il vous soit nécessaire de retoucher manuellement certaines parties de la photographie, afin d'en améliorer la cohérence, car si le programme interpole les parties manquantes en fonction des blocs de pixel voisins, rien ne lui permet de deviner ce qui se cachait véritablement derrière l'objet enlevé, lors de la prise de vue initiale.
Une autre limitation, sur laquelle l'auteur semble être en train de travailler, est l'incapacité actuelle du programme à recréer des textures. Par conséquent, la fonction
-inpaint marchera d'autant mieux que l'arrière-plan sera peu détaillé ou uni.
Conclusion
GREYCstoration est sans contexte un outil puissant, habile et indispensable à garder précieusement dans votre boîte à outils numérique, que vous soyez un fervent adepte de la retouche d'images ou un simple passionné de photographie, pas toujours heureux dans ses prises de vue.
Dans l'immédiat, les plugins disponibles pour The Gimp et Krita, en particulier, ne donnent accès qu'à la fonction
-restore du programme. Mais grâce à cette présentation, vous devriez désormais être familier de son utilisation en mode console, même s'il reste plusieurs options et subtilités que nous n'avons pas effleurées.
Si la fonction de retouche de bruit est la fonction la plus populaire, il conviendra de ne pas négliger la fonction
-resize, idéale pour la création d'affiches ou de banderoles à partir d'images bitmaps normalement délicates à agrandir. Quant à la fonction
-inpaint, elle vous réserve sans aucun doute des heures d'amusement et de découverte, en vous laissant enfin entrevoir ce que seraient toutes vos photos de famille sans votre belle-mère au premier-plan !
Liens
- Page d'accueil du projet : www.greyc.ensicaen.fr/~dtschump/greycstoration/index.html [en]
- Manuel d'utilisation : www.greyc.ensicaen.fr/~dtschump/greycstoration/guide.html [en]
- Page d'accueil du projet CImg : cimg.sourceforge.net/index.shtml [en]
- Ressources relatives à GREYCstoration : www.haypocalc.com/wiki/GREYCstoration_fr [fr]
Retrouvez cet article dans : Linux Pratique 42