Traceur mathématique pour le GIMP

Présentation

Comme indiqué dans les pages Devenir opérationnel en script-fu pour Le GIMP en 30 minutes et Plus loin en script-fu, le langage Scheme permet de développer en script-fu bien plus que de "simples" macro-instructions. Cela signifie qu'un script-fu peut faire plus que seulement effectuer une succession de traitements d'images préalablement disponibles. Puisque Scheme est un langage de programmation, il permet de construire des applications. En voici une illustration.

Le script-fu "Grapheur" livré plus bas effectue le tracé d'une fonction mathématique sur fond d'image. Après avoir ouvert une image (pas trop petite - disons d'au moins 1 mégapixel), qui servira de fond, il faut appeler le script Grapheur (placé dans le sous-menu "Mes scripts"). En entrée, il demande la fonction et, dans la même boîte de dialogue, permet de choisir une brosse de dessin et deux couleurs respectivement pour dessiner la courbe et écrire du texte.

En utilisant ces paramètres, il produit une image à deux calques. Le calque d'arrière-plan contient l'image d'origine et un nouveau calque transparent contient la courbe représentative, de dimensions adaptées à l'image fournie. Cette disposition permet de finir le travail en ajustement manuellement les caractéristiques de couleur, luminosité et contraste de l'image de fond de manière à obtenir un rendu final satisfaisant. Alors, il ne reste plus qu'à "aplatir" l'image et à l'enregistrer au format voulu pour inclusion dans un document, par exemple.

Exemple de mise en œuvre


L'image originale, un jpeg de 994 pixels de haut, va servir de support à la représentation graphique de la fonction f(x)=2/(2 + sin(x)), selon deux traitements différents, pour illustration. Comparaison dans les deux colonnes ci-dessous.

Premier traitement : dans les options par défaut de la boîte de dialogue ouverte par le script, la couleur du texte a été changée en noir.

Second traitement : dans ce cas, le diamètre de la brosse a été augmenté à 11 et la couleur de la courbe mise en bleu, sans changer celle du texte par défaut.

En sortie de script, l'image comporte un nouveau calque transparent portant le tracé. Ce dernier est peu visible, dominé par l'image de fond.

La représentation graphique est bien lisible mais la partie inférieure de la légende reste brouillée par les variations contrastées du fond.

L'éclaircissement manuel du calque d'arrière-plan (contenant l'image d'origine) améliore un peu la lisibilité mais le résultat reste "sous-optimal".

La désaturation manuelle de l'arrière plan, avec une réduction de sa luminosité et de son contraste, donne un résultat convenable.

NOTA : pour alléger la page, les images ci-dessus sont aplaties et réduites en taille. Pour une application effective, il sera judicieux de choisir une image de fond plus neutre, comme dans l'exemple suivant concernant la fonction f(x)= cos(x)/(2 + sin2(x)), tracée sur une image initialement de 12 Mpixels (réduite pour affichage ici).

Le script

Le script-fu est disponible sous forme de fichier texte script-fu-grapheur.scm directement injectable dans le dossier des scripts du GIMP ou de fichier pdf script-fu-grapheur.pdf avec la coloration syntaxique.

Après les déclarations des routines et variables locales, le script est sans grande finesse. A noter tout de même : l'enchaînement de fonctions (eval (read (open-input-string chaine-fonction))) qui permet d'évaluer la valeur de la fonction donnée en entrée comme chaîne de caractères, A CONDITION QU'ELLE SOIT ECRITE DANS LA SYNTAXE DE SCHEME : à savoir l'opérateur d'abord, les opérandes ensuite... A partir de là, le script trouve d'abord le maximum et le minimum de la fonction puis trace successivement les axes, les graduations, les textes et la fonction.

Insuffisances et problèmes connus

  1. Dans la version 1.00 du script-fu Grapheur, le pas pour tracer est pris égal à 1/100 de l'espace horizontal utile. Pour une meilleure précision, il suffit d'augmenter dans le script-fu la variable locale Npas fixant le nombre de pas de tracé.

  2. La version 1.00 du script-fu ne traite pas les exceptions. Il revient donc à l'utilisateur de fournir une fonction valide sur l'intervalle de variation (pas de dénominateur qui s'annule, par exemple).

  3. Les essais avec GIMP 2.4 montrent une image en sortie parasitée par des artefacts dus - dirait-on - à un bogue du GIMP qui pollue la brosse au cours du tracé. Ceci ne se produit plus avec la version 2.6 du GIMP.


Retour à l'accueil LINUX