Étirement de l'image

Les images sont stockées sous forme de valeurs de pixels qui proviennent de l'appareil photo selon une loi quasi-linéaire, ce qui signifie que pour les zones du ciel qui ne présentent aucune caractéristique visible, la valeur du pixel sera proche de zéro, mais pour les objets brillants comme les étoiles, elle sera proche d'une valeur maximale en fonction de l'exposition et du gain. Entre les deux, si une nébuleuse a une magnitude de surface égale à la moitié de celle d'une étoile, elle aura des valeurs de pixels égales à la moitié de celles de l'étoile, et ainsi de suite. C'est ce que nous appelons le mode linéaire des pixels.

L'œil humain ne voit pas les photons de cette manière. Il amplifie les zones sombres, de sorte qu'un objet dix fois moins lumineux qu'un autre semble deux fois moins lumineux. Pour les images d'astronomie, nous affichons généralement les images avec une mise à l'échelle similaire des valeurs de pixels (voir les modes d'affichage de l'interface graphique).

Mais ce n'est qu'une astuce d'affichage, utilisant une fonction de transfert d'écran, pour rendre les valeurs de pixels de l'image intacte en images de meilleure qualité.

L'étirement d'image consiste à faire quelque chose de similaire, mais en modifiant les valeurs des pixels des images au lieu de simplement modifier leur rendu. Siril dispose de trois outils principaux pour y parvenir.

Transformation asinh

La transformation asinh, ou sinus hyperbolique inverse, modifie les valeurs des pixels de l'image d'une manière similaire à ce que l'on peut voir avec la fonction asinh de mise à l'échelle des pixels de l'écran, qui est paramétrée par les curseurs de coupure des valeurs basses et hautes. Ici, les paramètres sont le facteur d'étirement et la valeur du point noir.

Asinh sur une image mono

Boite de dialogue de la transformation asinh

Pour les images monochromes, la valeurs des pixels est modifiée en utilisant la fonction suivante :

\[\text{pixel} = \frac{(\text{original} - \text{blackpoint})\times\text{asinh}(\text{original}\times\text{stretch})}{\text{original}\times\text{asinh}(\text{stretch})}\]

Pour les images en couleur, la fonction devient :

\[\text{pixel} = \frac{(\text{original} - \text{blackpoint})\times\text{asinh}(\text{rgb}\_\text{original}\times\text{stretch})}{\text{rgb}\_\text{original}\times\text{asinh}(\text{stretch})}\]

où rgb_original est calculé en utilisant les valeurs des pixels des trois canaux.

A clipping mode can also be set.

Théorie

As rgb_original is an average of the 3 channels, one or two channel values will be greater than rgb_original and can therefore clip. This can cause color artefacts when bright, strongly-colored regions are stretched. In order to avoid this problem the RGB blend clipping algorithm was developed by the authors of the original GHSastro tool: the same algorithms are available in the Siril implementation and this is the default clipping mode for stretches that require handling of clipping. The \((r, g, b)\) values are stretched first based on the luminance value rgb_original to give \((r', g', b')\). Then the original \((r, g, b)\) values are independently stretched to give \((r'', g'', b'')\). Finally the largest value of \(k\) is identified such that

\(k \times r' + ( 1 - k ) \times r'' ≤ 1\);

\(k \times g' + ( 1 - k ) \times g'' ≤ 1\);

et

\(k \times b' + ( 1 - k ) \times b'' ≤ 1\)

Les valeurs transformées sont ensuite calculées comme suit

\(( k \times r' + ( 1 - k ) \times r'', k \times g' + ( 1 - k ) \times g'', k \times b' + ( 1 - k ) \times b'')\)

This RGB blend clipping algorithm is also available for the Generalised Hyperbolic Stretch transforms described below.

Other choices of clipping algorithm are available:

  • Clip - this clipping mode just allows any colour components that clip to clip, but restricts them to values in the range 0.0 to 1.0. This may suffer from coloured artefacts such as fringes around nearly-saturated stars, but it is extremely quick to calculate.

  • Rescale - this clipping mode checks the R, G and B components of each pixel and if any are > 1.0 it rescales the pixel so that no components are clipped. This method is prone to artefacts and is mainly included for feature equivalence with the GHSastro plugin. It is quick to compute.

  • Global Rescale - this clipping mode behaves similarly to Rescale except that the scaling is computed globally instead of per-pixel. This avoids the kind of artefacts that Rescale can produce, but has a bigger impact on overall image brightness. This is faster than RGB blending to compute but slower than Clip or Rescale.

Lorsque l'option Utiliser l'espace de travail RVB n'est pas cochée, rgb_original est la moyenne entre les trois valeurs de pixels ; lorsqu'elle est définie, la pondération passe à 0,2126 pour la valeur rouge, 0,7152 pour la valeur verte et 0,0722 pour la valeur bleue, ce qui permet d'obtenir des résultats plus proches de l'équilibre des couleurs.

Ligne de commande Siril

asinh [-human] stretch { [offset] [-clipmode=] }
Etire l'image pour montrer les objets peu lumineux en utilisant une transformation hyperbolique arcsin. L'argument obligatoire stretch, généralement compris entre 1 et 1000, indique l'intensité de l'étirement. Le point noir peut être décalé en fournissant un argument optionnel offset dans la valeur normalisée du pixel [0, 1]. Enfin, l'option -human permet d'utiliser les facteurs d'efficacité lumineuse de l'œil humain pour déterminer la luminance utilisée pour calculer la valeur d'étirement pour chaque pixel, au lieu de la simple moyenne des valeurs de pixel des canaux. Cette méthode d'étirement préserve la luminosité de l'espace colorimétrique La*b*. Le mode clip peut être défini à l'aide de l'argument -clipmode= : les valeurs clip, rescale, rgbblend ou globalrescale sont acceptées et la valeur par défaut est rgbblend

Transformation de la fonction de transfert de la tonalité moyenne (MTF)

La MTF est l'un des outils les plus puissants pour étirer l'image. Elle peut être facilement automatisée et c'est pourquoi la vue auto-étirée l'utilise.

MTF d'une image mono

Boite de dialogue de la transformation de l'histogramme

L'outil se présente sous la forme d'un histogramme avec 3 curseurs (en forme de triangle placé en dessous) qu'il faut déplacer pour transformer l'image. Le triangle de gauche représente le signal des ombres, celui de droite les hautes lumières et enfin, celui du milieu le paramètre de balance des tons moyens. Les valeurs de ces curseurs sont affichées sous l'histogramme, à gauche, et peuvent être modifiées directement à la main. Ci-contre, le pourcentage de pixels écrêtés par la transformation : il est important de ne pas écrêter trop de pixels. Si seul le paramètre des tons moyens est modifié, aucun pixel ne peut être écrêté.

Théorie

La nouvelle valeur de pixel est calculé grâce à la fonction :

(1)\[\begin{split}\text{MTF}(x_p) = \frac{(m - 1)x_p}{(2m - 1)x_p - m}. \\\end{split}\]
  • Pour \(x_p=0\), \(\text{MTF} = 0\),

  • pour \(x_p=m\), \(\text{MTF} = 0.5\),

  • pour \(x_p=1\), \(\text{MTF} = 1\),

\(x_p\) est la valeur du pixel défini comme

(2)\[x_p=\frac{\text{original}-\text{shadows}}{\text{highlights}-\text{shadows}}.\]

Note

Il n'est généralement pas recommandé de modifier la valeur des hautes lumières, sinon elles seront saturées et l'information sera perdue.

La barre d'outils contient de nombreux boutons qui affectent la visualisation de l'histogramme. Vous pouvez choisir d'afficher l'histogramme d'entrée, l'histogramme de sortie, la courbe de transfert et la grille. Le bouton bouton auto-stretch permet d'appliquer la même transformation que l'algorithme d'auto-ajsutement. Il est rarement conseillé d'utiliser ce bouton tel quel. Des ajustements sont généralement nécessaires pour éviter de perdre des informations. En haut de l'histogramme, il est également possible de choisir d'afficher l'histogramme en mode logarithmique, comme dans l'illustration. Ce comportement peut être rendu par défaut comme expliqué ici. Enfin, un zoom en X est disponible. Ceci est très utile lorsque tout le signal est concentré sur la gauche de l'histogramme.

Ligne de commande Siril

mtf low mid high [channels]
Applique la fonction de transfert des demi-tons à l'image actuellement chargée.

Trois paramètres sont nécessaires, low, midtones et high où le paramètre de balance des tons moyens définit un étirement non linéaire de l'histogramme dans la plage [0,1]. Pour une détermination automatique des paramètres, voir AUTOSTRETCH.
Le paramètre optionnel [channels] peut être utilisé pour spécifier les canaux auxquels appliquer l'étirement : il peut s'agir de R, G, B, RG, RB ou GB. La valeur par défaut est tous les canaux

Liens : autostretch

Note

mtf est également une fonction qui peut être utilisée dans l'outil PixelMath.

Ligne de commande Siril

autostretch [-linked] [shadowsclip [targetbg]]
Etire automatiquement l'image actuellement chargée, avec des paramètres différents pour chaque canal (non lié) à moins que -linked ne soit fourni. Les arguments sont optionnels, shadowclip est le point d'écrêtage des ombres, mesuré en unités sigma à partir du pic de l'histogramme principal (la valeur par défaut est -2.8), targetbg est la valeur cible de l'arrière-plan, donnant une luminosité finale à l'image, plage [0, 1], la valeur par défaut est 0.25. Les valeurs par défaut sont celles utilisées dans le rendu Auto-Ajustement à partir de l'interface graphique.

N'utilisez pas la version non liée après l'étalonnage des couleurs, car elle modifierait la balance des blancs

Appliquer la transformation à la séquence

Cette transformation peut facilement être appliquée à une séquence. Il suffit de définir la transformation sur l'image chargée (avec une séquence déjà chargée), puis de cocher le bouton Appliquer à la séquence et de définir le préfixe de sortie de la nouvelle séquence (stretch_ par défaut), ou d'utiliser la commande suivante :

Ligne de commande Siril

seqmtf sequencename low mid high [channels] [-prefix=]
Même commande que pour MTF mais pour la séquence sequencename.

Le nom de la séquence de sortie commence par le préfixe "mtf_", sauf indication contraire avec l'option -prefix=

Liens : mtf

Transformations hyperboliques généralisées (GHS)

Il s'agit de l'outil le plus performant et le plus moderne de Siril, mais aussi le plus complexe à apprendre. Un tutoriel très détaillé pour cet outil dans Siril a été écrit par les auteurs de cet algorithme : https://siril.org/tutorials/ghs. Nous nous contenterons ici de résumer le fonctionnement de base de cet outil.

GHS d'une image mono

Boite de dialogue de la transformé hyperbolique généralisée

En d'autres termes, le SGH est capable d'améliorer le contraste d'une gamme de niveaux de luminosité dans une image. Par exemple, si l'on souhaite mieux voir les détails dans la partie de luminosité moyenne à élevée d'une nébuleuse (qui est en général très faible dans une image d'astronomie), il est possible de ne sélectionner que cette plage pour l'étirement. L'outil est très efficace pour améliorer le contraste des objets principaux sans rendre les étoiles trop grosses. L'outil est basé sur une utilisation itérative, c'est-à-dire qu'il étire toutes les plages de luminosité de l'image l'une après l'autre, par petites touches.

Pour ce faire, l'outil s'appuie fortement sur l'affichage et l'interaction de l'histogramme, pour chaque canal de couleur. La fonction de transformation, en forme d'hyperbole ou de 'S', peut être modifiée en déplaçant son centre (le paramètre SP - point de symétrie), en aplatissant l'une ou l'autre de ses extrémités (avec les protections ombre et haute lumière), et bien sûr sa torsion (facteurs d'étirement D et d'étirement local b). La manipulation de ces paramètres sur une petite image (pour aller vite) avec une valeur SP de 0,5 vous aidera à comprendre leur effet.

Il y a deux opérations principales à effectuer à chaque itération : sélectionner la plage de lumières à modifier, et la modifier effectivement. La sélection de la plage est assez facile, il s'agit de trouver une valeur représentative (SP) et de définir la largeur de la plage (b). La définition de SP peut se faire de trois manières :

  • en sélectionnant une zone de luminosité identique dans l'image et en cliquant sur le bouton du sélecteur

  • cliquer directement sur l'histogramme avec un clic gauche (il est possible de zoomer dans l'histogramme en utilisant le bouton + en haut à gauche)

  • en utilisant le curseur ou les boutons plus et moins qui lui sont associés ou directement la valeur.

La largeur de la plage dépend de l'étirement local. Une valeur élevée de b créera une petite plage et augmentera le contraste sur une petite plage de luminosité dans l'image.

La modification de l'histogramme une fois que l'emplacement du changement a été fixé est une opération plus complexe. L'un des objectifs fixés par les auteurs de l'algorithme est de faire en sorte que la vue logarithmique de l'histogramme (activée en cochant la case) soit aussi proche que possible d'une ligne décroissante. Pour ce faire, des bosses doivent être creusées et des vallées comblées. Voici un guide rapide des valeurs à utiliser en fonction de ce que l'on souhaite obtenir :

  • Étirement initial à partir de linéaire : réglez SP légèrement à gauche du pic principal, modérez b à partir de 6, augmentez D légèrement pour commencer à voir l'objet principal. Ne pas trop étirer à ce stade comme le ferait un auto ajustement, sinon les étoiles deviendraient trop grosses (principale section du tutoriel pour cela).

  • Amélioration du contraste d'une plage ou remplissage d'une vallée : réglez SP au centre de la vallée dans l'histogramme, réglez b aussi haut que la plage ou la vallée est étroite, diminuez HP pour préserver les étoiles, augmentez D lentement jusqu'à ce que l'amélioration apparaisse.

  • Diminuer le contraste d'une plage ou aplanir un pic : La diminution d'un pic n'est pas facile à réaliser, mais elle est un effet secondaire du remplissage des vallées. Par exemple, la création d'un pic, ou le remplissage d'une vallée, diminuera ce qui se trouve à gauche de SP. Une autre possibilité consiste à utiliser la transformation inverse, à partir de la liste déroulante Type d'étirement, et une valeur LP élevée, et HP à 1.

  • déplacer la courbe vers la gauche, rendant l'image plus sombre : souvent, si l'on étire tout l'histogramme, le pic se déplace vers la droite, rendant l'arrière-plan trop lumineux. Il existe un moyen simple de tout déplacer vers la gauche, en sélectionnant dans la liste déroulante Type d'étirement la dernière entrée, Étirement linéaire (décalage BP). Il n'y a plus qu'un seul curseur à déplacer, contrôlant l'ampleur du déplacement.

Certaines opérations sont également courantes pour les images couleurs, où l'on souhaite souvent obtenir une forme de courbe similaire pour les trois canaux, en travaillant sur chaque canal indépendamment en les désélectionnant à l'aide des trois cercles colorés situés sous la vue de l'histogramme :

GHS d'une image couleur

La transformation hyperbolique généralisée sur une image couleur

  • déplacement du pic vers la droite : un simple étirement avec une valeur SP à gauche du pic le fera en général, donc cela devrait être fait dans le cadre d'un étirement.

  • étaler un pic : pour étirer un peu plus un canal et lui donner plus d'importance dans le résultat final, sans trop changer l'emplacement du pic, réglez SP près du pic ou légèrement à sa droite, réglez b en fonction de la contribution attendue sur l'ensemble du canal, entrez une valeur négative si l'impact doit se faire sentir jusqu'au niveau des étoiles (pour changer leur couleur) et une valeur élevée si cela ne concerne qu'une nébuleuse, augmentez D pour obtenir la largeur cible du pic, puis décalez le pic vers la gauche en augmentant HP.

  • bouger tous les canaux ensemble : une alternative d'étirement de la luminance existe, voir la combo box Modèle d'étirement de couleur en haut à droite de la fenêtre GHS, en utilisant l'une ou l'autre des valeurs d'étirement de la luminance permet d'étirer la luminance et de réappliquer les couleurs sur celle-ci au lieu d'étirer directement les trois canaux. Les modes de luminance permettent de mieux préserver les couleurs de l'image. Ces modes utilisent le même mode d'écrêtage du mélange RVB décrit ci-dessus pour éviter les artefacts d'écrêtage des canaux de couleur.

  • Saturation de l'image : ** Les transformations GHS peuvent être appliquées au canal de saturation de l'image en sélectionnant l'option Saturation dans la liste déroulante *Modèle d'étirement des couleurs*. Lorsque ce mode est sélectionné, les histogrammes de saturation avant et après l'étirement sont affichés en jaune. Toutes les options du GHS sont disponibles et ce mode permet un ajustement très ciblé du canal de saturation de l'image. Une méthode simple pour augmenter la saturation dans les régions relativement non saturées tout en évitant la sursaturation consiste à utiliser un étirement par **transformation hyperbolique généralisée inverse avec SP fixé à environ 0,5 et HP abaissé suffisamment pour aplatir l'extrémité supérieure de l'histogramme de saturation.

In order to control partially-clipped highlights, the GHS tool makes available the same range of clipping modes as the asinh stretch. Details can be found here.

Application de l'étirement hyperbolique généralisé au canal de saturation pour créer une "lune minérale"

L'image ci-dessus montre comment l'application de l'outil GHS au canal de saturation permet de renforcer fortement la saturation d'une image à faible saturation tout en conservant le contrôle de la partie supérieure de l'histogramme de saturation. Cette image a été utilisée pour créer une image "Lune minérale" mettant en évidence les différentes compositions minérales des différentes régions de la surface lunaire.

Ligne de commande Siril

ght -D= [-B=] [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels]
Étirement hyperbolique généralisé basé sur le travail de l'équipe ghsastro.co.uk.

L'argument -D= définit la force de l'étirement, entre 0 et 10. C'est le seul argument obligatoire. Les arguments facultatifs suivants permettent de mieux adapter l'étirement :
B définit l'intensité de l'étirement près du point focal, entre -5 et 15 ;
LP définit une plage de préservation des ombres entre 0 et SP où l'étirement sera linéaire, préservant les détails d'ombre ;
SP définit le point de symétrie de l'étirement, entre 0 et 1, qui est le point auquel l'étirement est le plus intense ;
HP définit une région entre HP et 1 où l'étirement est linéaire, préservant les détails de la mise en évidence et évitant le gonflement des étoiles.
Si elle est omise, B, LP et SP ont une valeur par défaut de 0.0 et HP a une valeur par défaut de 1.0.
Un argument facultatif (soit -human, -even ou -independent, peut être passé pour sélectionner la luminance pondérée humaine ou pondérée paire ou les canaux de couleur indépendants pour les étirements de couleur). L'argument est ignoré pour les images mono. Alternativement, l'argument -sat spécifie que l'étirement est effectué sur la saturation de l'image - l'image doit être en couleur et tous les canaux doivent être sélectionnés pour que cela fonctionne.
Optionally the parameter [channels] may be used to specify the channels to apply the stretch to: this may be R, G, B, RG, RB or GB. The default is all channels. The clip mode can be set using the argument -clipmode=: values clip, rescale, rgbblend or globalrescale are accepted and the default is rgbblend

Ligne de commande Siril

invght -D= [-B=] [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels]
Inverse un étirement hyperbolique généralisé. Il s'agit de la transformation inverse de l'étirement hyperbolique généralisé. S'il est fourni avec les mêmes paramètres, il annule une commande d'étirement hyperbolique généralisé, ce qui permet de revenir à une image linéaire. Il peut également fonctionner de la même manière que le GHT, mais pour des images en négatif

Liens : ght

Ligne de commande Siril

modasinh -D= [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels]
Étirement arcsinh modifié basé sur le travail de l'équipe ghsastro.co.uk.

L'argument -D= définit la force de l'étirement, entre 0 et 10. C'est le seul argument obligatoire. Les arguments facultatifs suivants permettent de mieux adapter l'étirement :
LP définit une plage de préservation des ombres entre 0 et SP où l'étirement sera linéaire, préservant les détails d'ombre ;
SP définit le point de symétrie de l'étirement, entre 0 et 1, qui est le point auquel l'étirement est le plus intense ;
HP définit une région entre HP et 1 où l'étirement est linéaire, préservant les détails de la mise en évidence et évitant le gonflement des étoiles.
Si elle est omise, LP et SP ont une valeur par défaut de 0.0 et HP a une valeur par défaut de 1.0.
Un argument facultatif (soit -human, -even ou -independent, peut être passé pour sélectionner la luminance pondérée humaine ou pondérée paire ou les canaux de couleur indépendants pour les étirements de couleur). L'argument est ignoré pour les images mono. Alternativement, l'argument -sat spécifie que l'étirement est effectué sur la saturation de l'image - l'image doit être en couleur et tous les canaux doivent être sélectionnés pour que cela fonctionne.
Optionally the parameter [channels] may be used to specify the channels to apply the stretch to: this may be R, G, B, RG, RB or GB. The default is all channels. The clip mode can be set using the argument -clipmode=: values clip, rescale, rgbblend or globalrescale are accepted and the default is rgbblend

Ligne de commande Siril

invmodasinh -D= [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels]
Inverse un étirement arcsinh modifié. Il fournit la transformation inverse de MODASINH et, s'il est fourni avec les mêmes paramètres, il annule une commande MODASINH, ce qui permet de revenir à une image linéaire. Il peut également fonctionner de la même manière que MODASINH, mais pour des images en négatif

Liens : modasinh

Ligne de commande Siril

linstretch -BP= [-sat] [-clipmode=] [channels] [-clipmode=]
Étire linéairement l'image jusqu'à un nouveau point noir BP.
Le paramètre optionnel [channels] peut être utilisé pour spécifier les canaux auxquels appliquer l'étirement : il peut s'agir de R, G, B, RG, RB ou GB. La valeur par défaut est tous les canaux.
Optionally the parameter -sat may be used to apply the linear stretch to the image saturation channel. This argument only works if all channels are selected. The clip mode can be set using the argument -clipmode=: values clip, rescale, rgbblend or globalrescale are accepted and the default is rgbblend

Appliquer la transformation à la séquence

Cette transformation peut facilement être appliquée à une séquence. Il suffit de définir la transformation sur l'image chargée (avec une séquence déjà chargée), puis de cocher le bouton Appliquer à la séquence et de définir le préfixe de sortie de la nouvelle séquence (stretch_ par défaut). Toutes les commandes ont également une version de traitement en séquence. Chaque commande d'étirement de séquence commence par seq et le premier argument doit être le nom de la séquence, mais ils sinon elles sont les mêmes.

Ligne de commande Siril

seqght sequence -D= [-B=] [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels] [-prefix=]
Même commande que GHT, mais la séquence doit être spécifiée comme premier argument. En outre, l'argument optionnel -prefix= peut être utilisé pour définir un préfixe personnalisé

Liens : ght

Ligne de commande Siril

seqinvght sequence -D= [-B=] [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels] [-prefix=]
Identique à la commande INVGHT, mais s'applique à une séquence qui doit être spécifiée comme premier argument. En outre, l'argument facultatif -prefix= peut être utilisé pour définir un préfixe personnalisé

Liens : invght

Ligne de commande Siril

seqmodasinh sequence -D= [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels] [-prefix=]
Même commande que MODASINH, mais la séquence doit être spécifiée comme premier argument. En outre, l'argument optionnel -prefix= peut être utilisé pour définir un préfixe personnalisé

Liens : modasinh

Ligne de commande Siril

seqinvmodasinh sequence -D= [-LP=] [-SP=] [-HP=] [-clipmode=] [-human | -even | -independent | -sat] [channels] [-prefix=]
Identique à la commande INVMODASINH, mais s'applique à une séquence qui doit être spécifiée comme premier argument. En outre, l'argument facultatif -prefix= peut être utilisé pour définir un préfixe personnalisé

Liens : invmodasinh

Ligne de commande Siril

seqlinstretch sequence -BP= [channels] [-sat] [-prefix=]
Identique à la commande INVGHT, mais s'applique à une séquence qui doit être spécifiée comme premier argument. En outre, l'argument facultatif -prefix= peut être utilisé pour définir un préfixe personnalisé

Liens : linstretch

Curves Transformation

Curves Transformation is a highly versatile tool used to adjust the contrast and brightness of an image by modifying the pixel values according to a custom-defined curve. This allows for precise control over the image's stretch.

The curve is defined by a series of points, each of which can be moved to adjust the curve. The curve is interpolated between these points, and the pixel values are transformed based on it. This allows for a wide range of transformations to be applied to the image, from simple linear stretches to complex non-linear adjustments.

Curves on a color image

Dialog box of the Curves Transformation

There are two interpolation algorithms available in the Curves Transformation dialog: linear and cubic spline.

Théorie

  • Linear interpolation is a simple interpolation that connects the points with straight lines. For each pair of points, the slope of the line connecting the points is calculated:

    (3)\[\begin{split}\text{slope} = \frac{y_2 - y_1}{x_2 - x_1}. \\\end{split}\]

    The pixel values are then transformed by evaluating the line at the original pixel value:

(4)\[\text{pixel} = \text{slope} \times (\text{original} - x_1) + y_1.\]
  • Cubic spline curves are more complex curves that are defined by a series of control points. For pixel value \(x\) between two control points \(x_i\) and \(x_{i+1}\), the curve is defined by the following equation:

(5)\[S_i(x) = a_i + b_i (x - x_i) + c_i (x - x_i)^2 + d_i (x - x_i)^3\]

For \(x_i < x < x_{i+1}\), the coefficients \(a_i, b_i, c_i\), and \(d_i\) are calculated by solving a system of equations derived from the conditions of continuity and smoothness at each internal point. These conditions are:

  • The spline must be continuous at each internal point,

  • The first derivative of the spline must be continuous at each internal point,

  • The second derivative of the spline must be continuous at each internal point

  • Since Curves Transformation uses natural cubic splines, the second derivative at both endpoints is 0.

Avertissement

Curves Transformation is only available as a GUI tool and cannot be used from the command line.

Curves Transformationcan display the histogram of the image in two modes: linear and logarithmic. You can swap between these modes by clicking the Logarithmic scale checkbox at the top of the histogram. Logarithmic scale is useful for images with a wide dynamic range, as it allows you to see the histogram in the shadows and highlights more clearly.

Some common uses of the Curves Transformation tool include:

  • "S" curve: This curve is used to increase the contrast of an image. By increasing the slope of the curve in the middle of the histogram, the contrast is increased.

    s-curve example

    An example of an "S" curve

  • BP & WP adjustments: The black point (BP) and white point (WP) of an image can be adjusted by moving the first and last control points of the curve. This allows for the shadows and highlights of the image to be adjusted independently.

    BP & WP adjustments

    An example of adjusting the black point and white point of an image

  • Targeted adjustments: By adding control points at specific locations in the histogram, targeted adjustments can be made to the image. For example, the shadows can be darkened without affecting other parts of the image.

    Targeted adjustments

    An example of a targeted adjustment to an image

Astuce

The Curves Transformation tool is best used on an image that has already been stretched to some extent. This allows for more precise control over the image's contrast and brightness.

This transformation can easily be applied to a sequence. All you have to do is define the transformation on the loaded image while a sequence is loaded and check the Apply to sequence button. Similarly to other stretching tools, you can define the output prefix of the new sequence (curve_ by default).