OVH Cloud OVH Cloud

Contraste/Luminosité/Niveaux/Courbes

7 réponses
Avatar
François Jouve
Bonjour,

suite à une récente micro-polémique à propos de la meilleure
façon de corriger le contraste d'une image avec un logiciel
de traitement d'image (PhotoShop, Gimp même combat), je me suis
penché attentivement sur la question afin d'essayer de bien
comprendre ce que font ces logiciels.

Comme je n'ai rien trouvé dans la FAQ (http://frp.parisv.com/index.html)
à ce sujet je vous communique le fruit de mes réflexions.

Certains trouveront ce texte très basique, d'autres trop
didactique. Inutile de le faire remarquer. En revanche si j'ai commis
des erreurs ou des imprécisions n'hésitez pas.

Ce que je vais raconter concerne une image noir et blanc avec des
niveaux de gris codés dans l'intervalle [0,255]. Une image couleur,
c'est la même chose mais il y a 3 canaux RVB, un pour chaque couleur
Rouge Vert Bleu. Une image codée sur "8 bits" (ou 24 bits en couleurs)
aura des niveaux de gris entiers, donc 256 niveaux possibles. Une image
codée sur 16 bits permettra d'atteindre des valeurs décimales
intermédiaires avec une précision de 1/256=0.00390625.

Pour modifier le contraste et/ou la luminosité d'une image, nous disposons
de 3 outils : l'outil "contraste/luminosité", l'outil "niveaux" et l'outil
"courbe". Nous allons voir comment ils agissent et quel sont les rapports
et les différences entre eux.

La seule chose à comprendre est que ces trois outils vont effectuer
une transformation qui va agir sur l'intervalle [0,255] pour
redonner des valeurs dans [0,255]. Ils vont donc définir une fonction
mathématique [0,255] -> [0,255].

1/ L'outil "contraste/luminosité".

C'est l'outil le plus basique.
Il est à éviter en général, sauf si on sait exactement ce qu'on fait.

Il définit une transformation affine du type f(x) = ax + b.
Le "contraste" donne la pente de la droite (a). Si on augmente
le contraste, la pente est >1, si on le diminue elle est <1.
La "luminosité" donne la valeur à l'origine de la droite.
C'est donc un outil à 2 degrés de liberté.

Supposons que l'on veuille doubler le contraste (c'est beaucoup
mais c'est juste pour l'exemple) en conservant la luminosité moyenne.
On va agir sur les deux potentiomètres pour définir la transformation
f(x) = 2x - 128
car on veut que le niveau 128 soit conservé.
En appliquant cette transformation on constate 2 effets:
a/ les valeurs extrêmes sont écrêtées : tous les x<65 deviennent 0
et les x>191 deviennent 255.
b/ les valeurs intermédiaires sont étalées : dans notre exemple les
niveaux de gris sont tous pairs si les niveaux initiaux étaient entiers.
C'est l'effet de "peigne" dans l'histogramme.

Notons que si on avait pris un facteur de contraste plus réaliste
(non entier), pour une image 8 bits avec un dégradé régulier (de 1 en 1),
on aurait obtenu des valeurs intermédiaires irrégulières dans l'image
d'arrivée, avec une alternance de sauts de 1 et de sauts de 2 d'un gris à
l'autre. C'est un effet très désagréable et visible à l'oeil nu.

Il se voit aussi dans l'autre sens si on réduit le contraste (a<1).
Dans ce cas on perd des valeurs dans les dégradés (des valeurs initiales
différentes donnent des valeurs finales identiques).

De plus, si a<1, on perd le "point noir" ou le "point blanc" de l'image.
Ou même les deux.

Enfin cet outil n'agit que sur le niveau global de l'image, i.e.
sur les 3 canaux en même temps dans le cas d'une image couleur.
Les deux outils suivants permettent d'agir sélectivement sur
un canal, même si cela peut s'avérer délicat à bien maîtriser (en
tout cas pour moi :).

2/ L'outil "niveaux".

Il permet de définir une transformation "affine par morceaux"
avec 2 morceaux. C'est donc un outil à 4 degrés de liberté permettant
d'agir avec bien plus de finesse que le précédent. De plus (au moins
avec PS et Gimp) il ouvre une fenêtre montrant l'histogramme de l'image
qui permet de bien régler les zones de luminosité où vont
agir chacune des deux droites.

Dans la partie "input level" les curseurs extrémaux noir et blanc servent
à définir les points extrémaux des deux droites, qui vont être associés
aux points extrémaux de l'image d'arrivée (définis par les curseurs
noir et blanc de la partie "output level").
Le curseur du milieu (gris) sert à contrôler le point d'intersection
des deux droites. On va ainsi pouvoir par exemple augmenter le contraste
pour les basses lumières sans trop dégrader les hautes lumières.
L'histogramme est essentiel alors pour comprendre ce qu'on fait
(cf. http://www.wild-works.net/metier/pages/did_gde_fr.html).

Notons que si le curseur gris reste en position médiane, équidistante
des curseurs noir et blanc, on obtient deux droites de même pente,
c'est-à-dire une droite. L'effet est donc strictement identique à
l'outil "contraste/luminosité".

3/ L'outil "courbe"

Là où les outils précédents avaient 2 ou 4 degrés de liberté, celui-ci
en a une infinité puisqu'il permet de définir (presque) n'importe quelle
transformation de [0,255]->[0,255], y compris non croissante (par exemple
f(x)=-x permet d'obtenir le négatif d'une image), non monotone
(croissante puis décroissante) ou discontinue.

Le long de l'abcisse et de l'ordonnée de la courbe il y a un dégradé
de gris qui permet de visualiser la transformation mais il manque
amha l'histogramme qui était si utile dans l'outil "niveaux". En revanche
la souplesse du contrôle est infiniment plus grande. Trop même parfois.

4/ 8 bits / 16 bits

Il est admis que l'oeil humain ne distingue pas plus de 256 niveaux
de gris. Une image sur 8 bits est donc en pratique suffisante.

Mais comme on vient de le voir, dès lors que l'on touche au contraste on
perd de l'information si on travaille sur une image 8 bits, et ce quelle
que soit la méthode utilisée. Là où le contraste augmente on obtient
des trous dans les dégradés (valeurs manquantes). Là où il diminue
on perd de l'information (des valeurs initiales différentes sont
identiques dans l'image finale).

L'idéal est donc de partir d'une image ayant plus de précision dans
son codage de couleurs. Par exemple une image scannée sur 16 bits ou bien
une image raw codée sur 12 bits issue d'un apn haut de gamme.

En revanche on entend souvent qu'il est très utile de convertir une image
8 bits en 16 bits avant de la retoucher. Si on ne doit faire
qu'une seule opération de retouche du type décrit ci-dessus, cette
méthode n'apporte strictement rien car le passage en 16 bits ne
donne pas plus d'informations sur les dégradés de l'image initiale.

En revanche, si on doit revenir dessus par la suite, cela peut être utile
car l'image modifiée et conservée en 16 bits sera plus riche que sa
projection sur 8 bits.

Par exemple (exemple idiot mais didactique): prenons une image 8 bits et
réduisons son contraste d'un facteur 10. Sauvons là et augmentons son
contraste d'un facteur 10. L'image finale aura des dégradés présentant
des sauts de 10 au moins.
Faisons la même chose avec la même image initiale 8 bits mais convertie
en 16 bits, avec les 2 transformations idiotes s'effectuant sur les images
16 bits. On retombe grosso-modo sur l'image de départ.

Mes 2 sous.

--
F.J.

7 réponses

Avatar
daniel \boeing\
dans l'article botndk$3ri$, François Jouve à
a écrit le 12/11/03 11:36 :


Mes 2 sous.


j'ai lu avec interet tout ceci, appris des choses. je serais donc moins
idiot ce soir. interessant, pour les niveaux, le probleme du curseur gris
en position mediane. les courbes sont un outil tres puissant, et il est
aussi tres judicieux de l'utiliser en mode LAB.

par contre, si je peux me permettre, je propose une 4eme voie que j'utilise
aussi : dans photoshop, sur une image, je dupplique le calque et celui
obtenu est mis en mode "superposition". l'image s'eclairci, et je peux jouer
sur l'opacité pour obtenir un résultat qui peut etre interessant.. cette
méthode n'affecte pas l'original, et peut aussi permettre, par selection de
zone, de n'eclaircir qu'une partie de l'image.

mon pauvre sou.

--
.:: daniel.patin et non pas marcel.dugenou ::.

Avatar
Mic. Archambault
François Jouve a écrit
dans le message : botndk$3ri$
Bonjour,

suite à une récente micro-polémique à propos de la meilleure
façon de corriger le contraste d'une image avec un logiciel
de traitement d'image (PhotoShop, Gimp même combat), je me suis
penché attentivement sur la question afin d'essayer de bien
comprendre ce que font ces logiciels.

Comme je n'ai rien trouvé dans la FAQ
(http://frp.parisv.com/index.html)

à ce sujet je vous communique le fruit de mes réflexions.

Certains trouveront ce texte très basique, d'autres trop
didactique. Inutile de le faire remarquer. En revanche si j'ai
commis

des erreurs ou des imprécisions n'hésitez pas.

Ce que je vais raconter concerne une image noir et blanc avec
des

niveaux de gris codés dans l'intervalle [0,255]. Une image
couleur,

c'est la même chose mais il y a 3 canaux RVB, un pour chaque
couleur

Rouge Vert Bleu. Une image codée sur "8 bits" (ou 24 bits en
couleurs)

aura des niveaux de gris entiers, donc 256 niveaux possibles.
Une image

codée sur 16 bits permettra d'atteindre des valeurs décimales
intermédiaires avec une précision de 1/256=0.00390625.

Pour modifier le contraste et/ou la luminosité d'une image,
nous disposons

de 3 outils : l'outil "contraste/luminosité", l'outil "niveaux"
et l'outil

"courbe". Nous allons voir comment ils agissent et quel sont
les rapports

et les différences entre eux.

La seule chose à comprendre est que ces trois outils vont
effectuer

une transformation qui va agir sur l'intervalle [0,255] pour
redonner des valeurs dans [0,255]. Ils vont donc définir une
fonction

mathématique [0,255] -> [0,255].

1/ L'outil "contraste/luminosité".

C'est l'outil le plus basique.
Il est à éviter en général, sauf si on sait exactement ce qu'on
fait.


Il définit une transformation affine du type f(x) = ax + b.
Le "contraste" donne la pente de la droite (a). Si on augmente
le contraste, la pente est >1, si on le diminue elle est <1.
La "luminosité" donne la valeur à l'origine de la droite.
C'est donc un outil à 2 degrés de liberté.

Supposons que l'on veuille doubler le contraste (c'est beaucoup
mais c'est juste pour l'exemple) en conservant la luminosité
moyenne.

On va agir sur les deux potentiomètres pour définir la
transformation

f(x) = 2x - 128
car on veut que le niveau 128 soit conservé.
En appliquant cette transformation on constate 2 effets:
a/ les valeurs extrêmes sont écrêtées : tous les x<65
deviennent 0

et les x>191 deviennent 255.
b/ les valeurs intermédiaires sont étalées : dans notre exemple
les

niveaux de gris sont tous pairs si les niveaux initiaux étaient
entiers.

C'est l'effet de "peigne" dans l'histogramme.

Notons que si on avait pris un facteur de contraste plus
réaliste

(non entier), pour une image 8 bits avec un dégradé régulier
(de 1 en 1),

on aurait obtenu des valeurs intermédiaires irrégulières dans
l'image

d'arrivée, avec une alternance de sauts de 1 et de sauts de 2
d'un gris à

l'autre. C'est un effet très désagréable et visible à l'oeil
nu.


Il se voit aussi dans l'autre sens si on réduit le contraste
(a<1).

Dans ce cas on perd des valeurs dans les dégradés (des valeurs
initiales

différentes donnent des valeurs finales identiques).

De plus, si a<1, on perd le "point noir" ou le "point blanc" de
l'image.

Ou même les deux.

Enfin cet outil n'agit que sur le niveau global de l'image,
i.e.

sur les 3 canaux en même temps dans le cas d'une image couleur.
Les deux outils suivants permettent d'agir sélectivement sur
un canal, même si cela peut s'avérer délicat à bien maîtriser
(en

tout cas pour moi :).

2/ L'outil "niveaux".

Il permet de définir une transformation "affine par morceaux"
avec 2 morceaux. C'est donc un outil à 4 degrés de liberté
permettant

d'agir avec bien plus de finesse que le précédent. De plus (au
moins

avec PS et Gimp) il ouvre une fenêtre montrant l'histogramme de
l'image

qui permet de bien régler les zones de luminosité où vont
agir chacune des deux droites.

Dans la partie "input level" les curseurs extrémaux noir et
blanc servent

à définir les points extrémaux des deux droites, qui vont être
associés

aux points extrémaux de l'image d'arrivée (définis par les
curseurs

noir et blanc de la partie "output level").
Le curseur du milieu (gris) sert à contrôler le point
d'intersection

des deux droites. On va ainsi pouvoir par exemple augmenter le
contraste

pour les basses lumières sans trop dégrader les hautes
lumières.

L'histogramme est essentiel alors pour comprendre ce qu'on fait
(cf. http://www.wild-works.net/metier/pages/did_gde_fr.html).

Notons que si le curseur gris reste en position médiane,
équidistante

des curseurs noir et blanc, on obtient deux droites de même
pente,

c'est-à-dire une droite. L'effet est donc strictement identique
à

l'outil "contraste/luminosité".

3/ L'outil "courbe"

Là où les outils précédents avaient 2 ou 4 degrés de liberté,
celui-ci

en a une infinité puisqu'il permet de définir (presque)
n'importe quelle

transformation de [0,255]->[0,255], y compris non croissante
(par exemple

f(x)=-x permet d'obtenir le négatif d'une image), non monotone
(croissante puis décroissante) ou discontinue.

Le long de l'abcisse et de l'ordonnée de la courbe il y a un
dégradé

de gris qui permet de visualiser la transformation mais il
manque

amha l'histogramme qui était si utile dans l'outil "niveaux".
En revanche

la souplesse du contrôle est infiniment plus grande. Trop même
parfois.


4/ 8 bits / 16 bits

Il est admis que l'oeil humain ne distingue pas plus de 256
niveaux

de gris. Une image sur 8 bits est donc en pratique suffisante.

Mais comme on vient de le voir, dès lors que l'on touche au
contraste on

perd de l'information si on travaille sur une image 8 bits, et
ce quelle

que soit la méthode utilisée. Là où le contraste augmente on
obtient

des trous dans les dégradés (valeurs manquantes). Là où il
diminue

on perd de l'information (des valeurs initiales différentes
sont

identiques dans l'image finale).

L'idéal est donc de partir d'une image ayant plus de précision
dans

son codage de couleurs. Par exemple une image scannée sur 16
bits ou bien

une image raw codée sur 12 bits issue d'un apn haut de gamme.

En revanche on entend souvent qu'il est très utile de convertir
une image

8 bits en 16 bits avant de la retoucher. Si on ne doit faire
qu'une seule opération de retouche du type décrit ci-dessus,
cette

méthode n'apporte strictement rien car le passage en 16 bits ne
donne pas plus d'informations sur les dégradés de l'image
initiale.


En revanche, si on doit revenir dessus par la suite, cela peut
être utile

car l'image modifiée et conservée en 16 bits sera plus riche
que sa

projection sur 8 bits.

Par exemple (exemple idiot mais didactique): prenons une image
8 bits et

réduisons son contraste d'un facteur 10. Sauvons là et
augmentons son

contraste d'un facteur 10. L'image finale aura des dégradés
présentant

des sauts de 10 au moins.
Faisons la même chose avec la même image initiale 8 bits mais
convertie

en 16 bits, avec les 2 transformations idiotes s'effectuant sur
les images

16 bits. On retombe grosso-modo sur l'image de départ.

Mes 2 sous.


Loin de moi l'idée de te contredire mais n'as-tu pas le sentiment
de déguiser en compliqué ce qui est relativement simple ? À titre
d'exemple les trois malheureux curseurs contrôle de niveaux...
Bien des gens auront désormais peur de s'en resservir :-)

--
Michel
La pensée louf de la semaine :
Je n'aime pas les racistes, et encore moins les nègres.
AntiSpam : remplacez mac par m

Avatar
François Jouve
Mic. Archambault wrote:

Loin de moi l'idée de te contredire mais n'as-tu pas le sentiment
de déguiser en compliqué ce qui est relativement simple ? À titre
d'exemple les trois malheureux curseurs contrôle de niveaux...
Bien des gens auront désormais peur de s'en resservir :-)


Disons que ça doit être de la déformation professionnelle :)
Moi ça m'aide plutôt à comprendre de me dire:

Contraste/luminosité: une droite
Niveaux: 2 droites
Courbe: une courbe :)

--
F.J.

Avatar
François Jouve
daniel "boeing" wrote:
par contre, si je peux me permettre, je propose une 4eme voie que j'utilise
aussi : dans photoshop, sur une image, je dupplique le calque et celui
obtenu est mis en mode "superposition". l'image s'eclairci, et je peux jouer
sur l'opacité pour obtenir un résultat qui peut etre interessant.. cette
méthode n'affecte pas l'original, et peut aussi permettre, par selection de
zone, de n'eclaircir qu'une partie de l'image.



mon pauvre sou.


Oui bien sûr. A rajouter à mes sous :)

--
F.J.

Avatar
FiLH
François Jouve writes:

Mic. Archambault wrote:

Loin de moi l'idée de te contredire mais n'as-tu pas le sentiment
de déguiser en compliqué ce qui est relativement simple ? À titre
d'exemple les trois malheureux curseurs contrôle de niveaux...
Bien des gens auront désormais peur de s'en resservir :-)


Disons que ça doit être de la déformation professionnelle :)
Moi ça m'aide plutôt à comprendre de me dire:

Contraste/luminosité: une droite
Niveaux: 2 droites


T'es sûr de toi sur la droite ? Le curseur du milieu je l'intuite
beaucoup plus comme un coef de gamma ce qui serait nettement plus
agréable du point de vue de la progressivité de l'effet.

FiLH


--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/


Avatar
François Jouve
FiLH wrote:
François Jouve writes:


Contraste/luminosité: une droite
Niveaux: 2 droites



T'es sûr de toi sur la droite ? Le curseur du milieu je l'intuite
beaucoup plus comme un coef de gamma ce qui serait nettement plus
agréable du point de vue de la progressivité de l'effet.



Disons que ça ressort d'un triturage acharné de la bête depuis lundi.
Je n'ai pas été jusqu'à regarder le source de Gimp, mais si quelqu'un
veut se dévouer :)

Il est bien évident qu'on peut trouver plein d'autres courbes qui passent
par 3 points mais laquelle choisir ?
Je viens d'essayer avec l'outil "courbe" de xv qui permet de faire
des courbes d'intensité non lissées, et deux droites de pentes même
très différentes ne donnent pas de défaut de progressivité flagrant.
C'est une rupture de pente simplement, pas une discontinuité de la fonction.

Ce qui est certain c'est qu'on obtient une seule droite lorsque le curseur
gris est au milieu.

--
F.J.


Avatar
FiLH
François Jouve writes:

FiLH wrote:
François Jouve writes:

Contraste/luminosité: une droite
Niveaux: 2 droites
T'es sûr de toi sur la droite ? Le curseur du milieu je l'intuite

beaucoup plus comme un coef de gamma ce qui serait nettement plus
agréable du point de vue de la progressivité de l'effet.



Disons que ça ressort d'un triturage acharné de la bête depuis lundi.
Je n'ai pas été jusqu'à regarder le source de Gimp, mais si quelqu'un
veut se dévouer :)


Remarque on doit pouvoir savoir pile poil : tu fais une image avec
256 niveaux en gradient, stocké sous pmb. on modifie, et on voit les
valeurs numériques en sortie.

FiLH


--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/