Améliorer la qualité des images prises en archives avec Imagemagick

Le problème

Les conditions de lumière ne sont pas toujours optimales lorsque nous prenons des photos en archives.

Voici un exemple d’une page du rôle d’évaluation de la Ville de Sherbrooke (quartier Centre, 1921) qui avaient été photographiées dans des conditions de lumière suboptimales.

Détail du rôle d'évaluation

Détail du rôle d’évaluation de la Ville de Sherbrooke, quartier Centre, 1921, page 1.

La solution

Un traitement, notamment pour améliorer la luminosité et le contraste, et pour améliorer la netteté de l’image.

Les outils

Les fonctions de conversion de la suite Imagemagick et un script.

Imagemagick est un logiciel gratuit pour le traitement des images matricielles. Il roule sur Linux, Windows, Mac, Android et iOS. Il sert à modifier, créer, convertir ou composer des images à partir de la ligne de commande ou peut être intégré à un des langages de programmation courants (C, C++, Perl, Python, PHP, etc.). Il est très utile pour faire du traitement en lot (batch).

Deux fonctions de la commande convert sont nécessaires pour améliorer la qualité de l’image :

  • -brightness-contrast : sert à modifier d’un coup la luminosité et le contraste
  • -sharpen : sert à améliorer la netteté de l’image en enlevant les pixels flous

Une autre fonction, -chop, permet de rogner une partie de l’image. Dans ce cas-ci, on pouvait enlever de l’espace superflu au haut et au bas de l’image.

Le script sert à enchaîner les commandes pour effectuer le traitement en lot. Divers langages pourraient être utilisés. Pour un exemple très simple comme celui-ci, il est plus rapide d’utiliser le langage associé à la ligne de commande. Le traitement étant fait sur un ordinateur Linux, j’ai utilisé un script shell.

Les tests manuels

Pour définir les paramètres des différentes commandes, j’ai d’abord fait quelques tests pour obtenir les résultats qui conviennent le mieux à mes besoins. Les commandes suivantes répondaient à mes besoins.

convert -brightness-contrast 25x35 fichierA.jpg fichierB.jpg
convert -sharpen 0x4 fichierB.jpg fichierC.jpg

La documentation d’Imagemagick permet de comprendre comment utiliser les paramètres. La section Usage donne des exemples.

Pour connaître l’espace à rogner au haut et au bas de l’image, j’ai ouvert un fichier dans Gimp et j’ai mesuré le nombre de pixels entre la bordure supérieure de l’image et le haut de la page (191 pixels) et entre la bordure inférieure de l’image et le bas de la page (392 pixels). Les images ayant été prises avec une caméra sur trépied avec un déclencheur à distance, le nombre de pixels à enlever devrait être le même sur toutes les images. Au cas où le registre se serait déplacé sous la caméra, j’ai rogné 385 pixels au bas des images.

Selon les exemples, la commande suivante permet d’enlever les bandes superflues. L’option -gravity South spécifique que la bande à enlever est celle du bas. Le 0 indique qu’il ne fait pas enlever de bande sur le côté.

convert fichierB.jpg -chop 0x191 fichierC.jpg
convert fichierC.jpg -gravity South -chop 0x385 fichierD.jpg

Opérations à réaliser dans le script

  • pour chaque fichier se terminant par .JPG dans le dossier
  • appliquer la conversion de luminosité et de contraste
  • appliquer la fonction de netteté
  • enlever les bandes
  • nommer le fichier Role_Sherbrooke_1921_QuartierCentre_page[no].jpg
    • les fichiers sont ainsi clairement nommés par rapport à leur contenu et leur origine
    • les numéros de pages commencent à 1 et se terminent à 48.
    • un compteur permet de d’attribuer un numéro séquentiel
    • si le numéro est inférieur à 10, ajouter un préfixe 0 pour faciliter le tri

Le script

Un script shell commence par la ligne :

#!/bin/bash

Le reste du script permet d’initialiser le compteur, de déclarer la boucle et de traiter les fichiers. J’ai choisi de conserver le fichier original et de ne pas conserver les fichiers intermédiaires. Imagemagick permet d’utiliser plus d’une option par commande. Mon objectif étant de mieux comprendre mon code plutôt que de l’optimiser, j’ai choisi d’exécuter une transformation à la fois.

count=0 #initialisation du compteur
for i in ./*.JPG #chargement de la liste des fichiers se terminant par .JPG
do #début de la boucle
  suffixe="" #vider la variable suffixe au début de chaque boucle
  count=`expr $count + 1` #incrémentation du compteur
  if test $count -lt 10 #début de condition: si le compteur est de 1 à 9
  then
    suffixe+="0$count" #ajouter un 0 devant le chiffre
  else
    suffixe=$count #sinon utiliser le nombre de 10 à n
  fi  #fin de la condition
  echo $count convertir $i à Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg #afficher le nom du fichier en traitement
  convert -brightness-contrast 25x35 $i Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg #ajustement luminosité et contraste
  convert -sharpen 0x4 Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg #ajustement netteté
  convert Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg -chop 0x191 Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg #enlever bande supérieure
  convert Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg -gravity South -chop 0x392 Role_Sherbrooke_1921_QuartierCentre_page$suffixe.jpg #enlever bande inférieure
done #fin de la boucle

Résultat

Page du rôle, après traitement.

Détail de la page 1 du rôle d’évaluation de la ville de Sherbrooke (Quartier Centre, 1921), après traitement.

Tout en ne s’éloignant pas trop de la couleur du papier, l’image est plus lisible, ce qui en accélère la transcription.

L. Robichaud

4 mars 2017

Publié dans histoire et numérique, Uncategorized Tagués avec :

Laisser un commentaire