couleurs non bornées
Les écrans et la plupart des formats de fichiers image ne peuvent encoder que des intensités RVB confinées dans une certaine plage. Par exemple, les images encodées sur 8 bits ne peuvent contenir que des valeurs de 0 à 255, des images sur 10 bits de 0 à 1023, etc. Les standards graphiques postulent que le maximum de cette plage, quelle que soit sa valeur réelle, représentera toujours la luminosité maximale que le support d’affichage est capable de rendre, généralement entre 100 et 160 Cd /m² (ou nits). Nous appelons généralement ce maximum “100 % relatif à l’affichage”. Le minimum de la plage, codé 0 quelle que soit la profondeur de bits utilisée, devient alors “0 % relatif à l’affichage”. 100 % code le blanc pur, 0 % code le noir pur.
Il s’agit d’une limitation pour les applications de traitement d’image, car cela signifie que tout pixel situé en dehors de cette plage sera tronqué à la limite la plus proche, entraînant une perte non récupérable de données (couleurs et/ou textures).
Pendant très longtemps, les logiciels de traitement d’image ont également été assujettis à cette limitation pour des raisons techniques. Certains le sont encore, mais maintenant c’est par choix lors de leur conception. En conséquence, ils tronqueront les intensités RVB à 100 % relatif à l’affichage lors des opérations sur l’image.
darktable utilise l’arithmétique à virgule flottante dans son pipeline graphique. Il peut donc gérer en interne n’importe quelle valeur RVB, même si elle ne se trouve pas dans la plage relative à l’affichage, pourvu qu’elle soit strictement positive. Ce n’est qu’à la toute fin du pipeline graphique, avant que l’image ne soit enregistrée dans un fichier ou envoyée à l’affichage, que les valeurs RVB sont tronquées si cela est nécessaire.
On dit que les pixels qui peuvent prendre des valeurs en dehors de la plage relative à l’affichage ont “des couleurs non bornées”. À chaque étape du traitement, on pourrait choisir de confiner ces valeurs dans la plage autorisée ou choisir de les conserver, et de les tronquer uniquement lors de la dernière étape du pipeline. Cependant, il a été constaté que le traitement est moins sujet aux artefacts si les couleurs non bornées ne sont pas confinées mais traitées comme toutes les autres données de couleur.
À la fin du pipeline graphique, des modules comme filmique peuvent vous aider à mapper les valeurs RVB dans la plage relative à l’affichage tout en maximisant la préservation des données, évitant ainsi l’écrêtage dur qui n’est généralement pas agréable visuellement.
Cependant, à tout moment dans le pipeline graphique, vous devez vous assurer de ne pas créer de valeurs RVB négatives. Les intensités RVB codent les émissions lumineuses et la lumière négative n’existe pas. Les modules qui, pour traiter les pixels, reposent sur une interprétation physique de la lumière échoueront s’ils rencontrent une émission de lumière non physique. Par prévention, les valeurs RVB négatives sont toujours écrêtées chaque fois qu’elles peuvent faire échouer les algorithmes, mais le résultat visuel peut sembler dégradé. Des valeurs négatives peuvent être produites en abusant de la correction du niveau de noir dans le module exposition ou de l’offset dans le module balance couleur. Des précautions doivent donc être prises lors de l’utilisation de ces modules.