Auteur Eric K'DUAL
Publication 14 mars 2026
Temps de lecture 25 minutes
Serie Chambre noire numerique

La plupart des photographes interagissent avec leur processeur RAW comme avec une collection de curseurs. Deplacez le curseur de temperature vers la droite, l'image se rechauffe. Augmentez la recuperation des hautes lumieres, le ciel brule reapparait. Choisissez « AMaZE » dans le menu deroulant de demosaicage parce que quelqu'un sur un forum a dit que c'etait mieux. Ca fonctionne. Vous obtenez de bons resultats. Mais vous ne savez pas pourquoi ca fonctionne, et cela signifie que vous ne savez pas quand cela echouera, ni comment aller plus loin.

Cet article est le cours que j'aurais aime avoir quand j'ai commence a construire des processeurs RAW. Il couvre chaque etape majeure du pipeline, des donnees brutes du capteur au pixel final rendu, avec les mathematiques et la physique expliquees avec suffisamment de profondeur pour que vous compreniez non seulement ce que fait chaque curseur, mais la science qui le sous-tend. Si vous vous etes jamais demande ce que signifie reellement « temperature de couleur correlee », pourquoi votre algorithme de demosaicage a de l'importance, ou comment un debruiteur peut supprimer le bruit sans detruire le detail, c'est ici que vous trouverez les reponses.

J'ai organise cet article autour des neuf etapes fondamentales du pipeline RAW. Les principes s'appliquent a n'importe quel processeur RAW. Lightroom, DxO, RawTherapee, darktable — tous implementent des variations des memes operations fondamentales, enracinees dans la meme physique et le meme siecle de science de la couleur.

Partie I — Le capteur : quand la lumiere devient nombres

La mosaique Bayer

Le capteur d'un appareil photo numerique est une grille de photosites, dont chacun mesure le nombre de photons qui l'ont frappe pendant l'exposition. C'est tout ce qu'il enregistre : un comptage de photons, stocke sous forme d'entier. Un capteur de 45 megapixels produit 45 millions d'entiers. Aucune information de couleur.

La couleur provient d'une mosaique de minuscules filtres colores places au-dessus des photosites, appelee matrice de filtres couleur (CFA, pour Color Filter Array). Le motif le plus courant, invente par Bryce Bayer chez Kodak en 1976, dispose des filtres rouges, verts et bleus dans un bloc repetitif de 2×2 : un rouge, un bleu et deux verts. Le vert recoit deux filtres parce que la vision humaine est plus sensible aux longueurs d'onde vertes, ce qui permet une meilleure resolution en luminance.

Le motif Bayer RGGB :

Row 0:  R  G  R  G  R  G  R  G  ...
Row 1:  G  B  G  B  G  B  G  B  ...
Row 2:  R  G  R  G  R  G  R  G  ...
Row 3:  G  B  G  B  G  B  G  B  ...

Chaque pixel n'enregistre qu'une seule couleur. Un pixel filtre en rouge ne voit que la lumiere rouge. Ses valeurs verte et bleue sont inconnues et doivent etre reconstruites par l'algorithme de demosaicage. Cela signifie que deux tiers des donnees de couleur de votre image finale sont interpoles, et non mesures.

Lorsque vous ouvrez un fichier RAW, la premiere chose que le logiciel lit est cette mosaique de valeurs monocanal. A ce stade, les donnees ne sont qu'une grille d'entiers — typiquement sur 12 bits (0 a 4 095) ou 14 bits (0 a 16 383) selon l'appareil. L'objectif du pipeline RAW dans son integralite est de transformer cette grille d'entiers en une image couleur (ou N&B) qui ressemble a ce que vous avez vu dans le viseur.

Niveau de noir et niveau de blanc

La premiere operation du pipeline est d'une simplicite trompeuse, mais d'une importance critique. Chaque capteur possede un niveau de noir : une tension de decalage que le CAN (convertisseur analogique-numerique) ajoute a chaque lecture. Meme obturateur ferme, les pixels ne lisent pas zero. Ils lisent une petite valeur positive, typiquement 256 ou 512 sur une echelle de 14 bits. Ce decalage doit etre soustrait avant tout traitement, sous peine de relever les ombres et de fausser le contraste.

Le niveau de noir varie selon la couleur du CFA. Les pixels rouges peuvent avoir un niveau de noir de 512, les verts 510, les bleus 514. L'appareil stocke ces valeurs dans les metadonnees du fichier RAW. Certains appareils utilisent des niveaux de noir differents pour les moities superieure et inferieure du capteur, ou stockent meme une rangee complete de pixels optiquement masques le long du bord du capteur pour une mesure en temps reel du courant d'obscurite.

Apres soustraction du niveau de noir, les valeurs sont normalisees par le niveau de blanc — la valeur maximale que le CAN peut produire (par exemple 16 383 pour 14 bits). Le resultat est une valeur a virgule flottante entre 0.0 (noir) et 1.0 (sortie maximale du capteur) pour chaque pixel. Des valeurs superieures a 1.0 peuvent apparaitre apres la multiplication de la balance des blancs et representent des canaux ecretes (satures).

La formule de normalisation :

pixel_normalized = (raw_ADC - black_level[color]) / (white_level - black_level[color])

Elle s'applique par pixel, en utilisant le niveau de noir correspondant a la couleur CFA de ce pixel (R, G1, G2 ou B). Le resultat est borne a ≥ 0.0 mais pas borne a ≤ 1.0, car l'etape de balance des blancs suivante peut pousser les valeurs au-dela de 1.0 pour les canaux dont les multiplicateurs sont superieurs a 1.

Partie II — Balance des blancs : la physique de la temperature de couleur

La balance des blancs est l'etape qui nous plonge au coeur de la science de la couleur. Pour comprendre ce que fait reellement votre curseur de temperature, il faut comprendre comment les physiciens decrivent les sources lumineuses, ce qui nous ramene a 1900 et aux travaux de Max Planck sur le rayonnement thermique.

Rayonnement du corps noir et lieu planckien

Un « corps noir » est un objet idealise qui absorbe tout rayonnement et qui, une fois chauffe, emet de la lumiere dont le spectre est entierement determine par sa temperature. La loi de Planck donne la distribution spectrale de puissance de ce rayonnement a n'importe quelle temperature. Chauffez un corps noir a 1 800 K (kelvins) et il rougeoie profondement. A 2 856 K, il produit le jaune chaud d'une ampoule a incandescence. A 5 500 K, il se rapproche de la lumiere du soleil a midi. A 10 000 K et au-dela, il apparait d'un blanc bleute.

L'intuition essentielle : la couleur d'un corps noir a une temperature donnee peut etre representee comme un point unique dans un espace chromatique bidimensionnel. Lorsqu'on trace la couleur d'un corps noir pour toutes les temperatures de 1 667 K a 25 000 K, on obtient une courbe reguliere appelee le lieu planckien. Cette courbe est la colonne vertebrale de la temperature de couleur. Quand votre appareil affiche « 5500K », cela signifie que l'eclairage de la scene a la meme chromaticite qu'un corps noir chauffe a 5 500 kelvins.

Lumiere de lever de soleil projetant des tons dores et chauds sur un paysage brumeux
La lumiere chaude du lever de soleil a une temperature de couleur correlee d'environ 3 000–3 500 K. Le bleu froid de l'ombre ouverte peut depasser 10 000 K. La balance des blancs compense ces differences en ajustant les gains de chaque canal du capteur.

CIE 1931 : la carte de toutes les couleurs

En 1931, la Commission Internationale de l'Éclairage (CIE) a defini un cadre mathematique pour decrire la couleur qui reste aujourd'hui le fondement de toute la science de la couleur. L'espace colorimetrique CIE 1931 associe a chaque couleur visible une paire de coordonnees, x et y, appelees coordonnees de chromaticite. Le diagramme complet — la fameuse forme en fer a cheval que vous avez vue dans les illustrations des manuels — contient toutes les couleurs perceptibles par l'oeil humain.

Le lieu planckien est une courbe a l'interieur de ce diagramme, partant de la region orange-rouge (basses temperatures) et balayant vers le blanc puis le bleu (hautes temperatures). Chaque point de cette courbe correspond a la couleur d'un corps noir chauffe a une temperature specifique.

Pour tracer une temperature specifique sur cette courbe, la methode standard utilise l'approximation de Kim et al. (2002), un ensemble d'equations polynomiales qui calculent la chromaticite x a partir de la temperature, puis la chromaticite y a partir de x :

Approximation du lieu planckien (Kim, Kang & Moon, 2002) :

For T < 4000 K:
  x = -0.2661239×10&sup9;/T³ - 0.2343589×10&sup6;/T² + 0.8776956×10³/T + 0.179910

For T ≥ 4000 K:
  x = -3.0258469×10&sup9;/T³ + 2.1070379×10&sup6;/T² + 0.2226347×10³/T + 0.240390

For T < 2222 K:
  y = -1.1063814 x³ - 1.34811020 x² + 2.18555832 x - 0.20219683

For 2222 K ≤ T < 4000 K:
  y = -0.9549476 x³ - 1.37418593 x² + 2.09137015 x - 0.16748867

For T ≥ 4000 K:
  y =  3.0817580 x³ - 5.87338670 x² + 3.75112997 x - 0.37001483

Valide pour 1 667 K – 25 000 K. Precision : Δx,y < 0.0001 sur toute la plage. C'est l'approximation utilisee par la plupart des processeurs RAW professionnels.

L'ancienne approche — celle que l'on trouve encore dans de nombreux outils open-source — utilise l'approximation de Tanner Helland, un ensemble d'equations plus simple concu pour le rendu a l'ecran, et non pour la science de la couleur. Les formules de Helland convertissent directement la temperature en valeurs RGB, en contournant completement le cadre CIE. Cela fonctionne de maniere adequate pour des aperçus couleur a l'ecran, mais c'est imprecis pour la correction de balance des blancs car cela ne tient pas compte de la geometrie du diagramme de chromaticite. Les erreurs sont faibles aux temperatures moyennes (4000–7000 K) mais augmentent significativement aux extremes, la ou precisement les photographes creatifs en N&B aiment travailler.

De la chromaticite aux multiplicateurs de balance des blancs

Une fois que nous avons les coordonnees CIE (x, y) de l'illuminant cible, nous devons les convertir en multiplicateurs rouge, vert et bleu que le pipeline applique a chaque pixel. La conversion suit une chaine precise :

Chromaticite → multiplicateurs BB, etape par etape :

  1. CIE xy → XYZ : A partir du point de chromaticite (x, y), calculer les valeurs tristimulus avec Y = 1 (luminance unitaire) :
    X = x / y
    Y = 1.0
    Z = (1 - x - y) / y
    
  2. XYZ → sRGB lineaire : Appliquer la matrice IEC 61966-2-1 (le standard sRGB, reference au D65) :
    R =  3.2404542 X - 1.5371385 Y - 0.4985314 Z
    G = -0.9692660 X + 1.8760108 Y + 0.0415560 Z
    B =  0.0556434 X - 0.2040259 Y + 1.0572252 Z
    
  3. Inversion : Les multiplicateurs BB sont l'inverse des valeurs RGB de l'illuminant. Un illuminant chaud (orangeâtre) a un R eleve et un B faible, donc il faut reduire R et amplifier B pour compenser :
    R_mul = 1 / R
    G_mul = 1 / G
    B_mul = 1 / B
    
  4. Normalisation : Diviser tous les multiplicateurs par G_mul pour que le vert = 1.0. Cela empeche la luminosite globale de changer lors du decalage de la BB :
    Final: [R_mul/G_mul,  1.0,  B_mul/G_mul]
    

Le resultat est un triplet de nombres. A 3200 K (tungstene), on obtient quelque chose comme [0.52, 1.0, 2.66] — le rouge est attenue de moitie, le bleu est amplifie de pres de trois fois. A 10000 K (ombre), on obtient [1.14, 1.0, 0.70] — le rouge amplifie, le bleu attenue. Le pipeline multiplie chaque pixel Bayer par le multiplicateur correspondant a sa couleur CFA. C'est pourquoi la balance des blancs se fait avant le demosaicage : elle opere sur les donnees brutes du capteur, un pixel a la fois, avant toute reconstruction de couleur.

Table de reference des multiplicateurs BB (teinte = 0) :

Temperature Illuminant R mul G mul B mul Effet sur le N&B
2 500 K Bougie 0.37 1.00 5.48 Tons chauds tres sombres, tons froids lumineux
3 200 K Tungstene 0.52 1.00 2.66 Peau sombre, ciel bleu lumineux
4 000 K Fluorescent 0.65 1.00 1.73 Contraste modere, leger dominante froide
5 500 K Lumiere du jour 0.85 1.00 1.13 Quasi neutre, rendu equilibre
6 500 K Nuageux / D65 0.94 1.00 0.95 Presque parfaitement neutre
8 000 K Ombre 1.05 1.00 0.80 Tons chauds lumineux, ciel bleu sombre
10 000 K Ciel bleu 1.14 1.00 0.70 Fort assombrissement du ciel, tons chauds rehausses

L'axe de teinte : se deplacer perpendiculairement au lieu planckien

Le curseur de temperature deplace votre point blanc le long du lieu planckien. Mais les sources lumineuses reelles ne se situent pas parfaitement sur cette courbe. Les lumieres fluorescentes, les LED et les conditions d'eclairage mixte produisent des chromaticites qui tombent en dehors du lieu, decalees vers le vert ou le magenta. Le curseur de teinte corrige ce decalage.

Pour comprendre correctement le fonctionnement de la teinte, nous avons besoin d'un second espace colorimetrique CIE : le CIE 1960 UCS (Uniform Chromaticity Scale, echelle de chromaticite uniforme). Le diagramme xy de 1931 presente un defaut significatif : des distances egales dans le diagramme ne correspondent pas a des differences perceptuelles egales. Un decalage de 0.01 dans la region verte ressemble a un changement de couleur enorme, tandis que le meme decalage dans la region bleue est a peine perceptible. L'espace UCS corrige cela en deformant les coordonnees pour les rendre plus perceptuellement uniformes.

La conversion de CIE 1931 (x, y) vers CIE 1960 (u, v) est directe :

CIE 1931 xy ↔ CIE 1960 UCS (u, v) :

Forward:
  u = 4x / (-2x + 12y + 3)
  v = 6y / (-2x + 12y + 3)

Inverse:
  x = 3u / (4 + 2u - 8v)
  y = 2v / (4 + 2u - 8v)

Dans l'espace UCS, les lignes isothermiques — lignes a temperature de couleur correlee constante — sont perpendiculaires au lieu planckien. Le parametre de teinte deplace le point de chromaticite le long de ces lignes isothermiques.

Dans l'espace UCS, le lieu planckien est une courbe reguliere, et a n'importe quelle temperature, la direction perpendiculaire (la ligne isothermique) pointe le long de l'axe vert–magenta. Un decalage dans une direction ajoute du vert ; un decalage dans l'autre ajoute du magenta. Cela est geometriquement precis et perceptuellement uniforme, contrairement a l'approche naive de simplement multiplier le canal vert par un facteur.

L'implementation calcule la direction tangente du lieu a la temperature courante par une difference finie (en evaluant le lieu a T−50 K et T+50 K), puis la fait pivoter de 90° pour obtenir la perpendiculaire. La valeur de teinte determine l'amplitude du decalage le long de cette perpendiculaire, avec ±100 correspondant approximativement a ±0.02 Δuv — une plage calibree pour correspondre au comportement d'Adobe Camera Raw et de DxO.

Le mode « Tel que pris » : lire la balance des blancs de l'appareil

Lorsque vous selectionnez la balance des blancs « Tel que pris » (As Shot), le processeur lit les coefficients de BB que l'appareil a stockes dans le fichier RAW au moment de la prise de vue. Ces coefficients sont les propres multiplicateurs rouge, vert et bleu de l'appareil, determines par son algorithme de balance des blancs automatique (ou le preset BB selectionne manuellement) a l'instant de l'exposition.

Ces coefficients fournis par l'appareil sont generalement stockes sous la forme de quatre valeurs [R, G1, B, G2] dans les metadonnees du RAW. Le processeur les normalise en divisant par le coefficient vert, donnant des multiplicateurs relatifs a vert = 1.0. C'est le point de depart le plus « fidele » car il reflete l'evaluation de l'eclairage de la scene par l'appareil, mais pour le travail en N&B, c'est rarement le choix optimal, car l'appareil optimisait pour une couleur neutre, pas pour la separation tonale.

Partie III — Debruitage sur la mosaique Bayer

Le debruitage est l'une des etapes les plus determinantes du pipeline, et son positionnement importe enormement. La plupart des logiciels grand public debruitent apres le demosaicage, operant sur l'image RGB entierement reconstruite. Les processeurs de qualite professionnelle debruitent avant le demosaicage, directement sur les donnees Bayer. La difference est significative.

Quand on debruite apres le demosaicage, le bruit a deja ete melange entre les canaux par l'algorithme d'interpolation. Le bruit rouge a fuse dans l'estimation du vert, le bruit bleu dans le rouge, et le debruiteur doit tenter de demeler cette contamination croisee. Quand on debruite sur les donnees Bayer, le bruit de chaque pixel est independant et pur dans son canal. Le debruiteur travaille sur une entree plus propre et produit un resultat plus propre.

La contrepartie est que le debruitage Bayer est techniquement plus difficile. On ne peut pas utiliser de filtres 2D standards car les pixels adjacents sont de couleurs differentes. Un pixel rouge en position (0,0) a des voisins verts en (0,1) et (1,0) et un voisin bleu en (1,1). Les moyenner n'aurait aucun sens. Il faut au contraire restreindre le filtre aux pixels de meme couleur CFA, espaces de deux pixels dans chaque direction.

Filtrage bilateral sur la mosaique Bayer

Le filtre bilateral est le cheval de trait du debruitage a preservation des contours. Il a ete introduit par Tomasi et Manduchi en 1998 et reste l'un des outils de debruitage les plus pratiques grace a sa simplicite, sa rapidite et son comportement reglable.

Un flou gaussien conventionnel moyenne les pixels voisins ponderes par la distance : les pixels proches contribuent davantage que les lointains. Cela lisse le bruit mais detruit egalement les contours. Le filtre bilateral ajoute un second terme de ponderation : les pixels contribuent davantage s'ils ont une intensite similaire a celle du pixel central. Au niveau d'un contour, les pixels de l'autre cote de la frontiere ont des intensites tres differentes, ils recoivent donc un poids quasi nul et ne provoquent pas de flou a travers le contour.

Formule du filtre bilateral :

                    Σ w_s(||p-q||) · w_r(|I(p) - I(q)|) · I(q)
BF[I](p) = ─────────────────────────────────────────────────
                    Σ w_s(||p-q||) · w_r(|I(p) - I(q)|)

where:
  w_s(d) = exp(-d² / 2σ_s²)     spatial weight (Gaussian in distance)
  w_r(d) = exp(-d² / 2σ_r²)     range weight (Gaussian in intensity)
  σ_s = spatial sigma         controls blur radius
  σ_r = range sigma           controls edge sensitivity

σ_s controle la portee spatiale du filtre. Des valeurs plus grandes produisent un flou sur une zone plus etendue. σ_r controle la tolerance a la difference d'intensite. Un petit σ_r preserve meme les contours subtils ; un grand σ_r applique un flou a travers les contours moderes.

Sur la mosaique Bayer, le filtre ne considere que les pixels de meme couleur CFA. Pour un pixel rouge en position (row, col), les voisins sont en (row±2, col), (row, col±2), (row±2, col±2), etc. — toujours avec un pas de 2 dans chaque direction. Le sigma spatial est typiquement fixe a 1.5 (en espacement entre pixels de meme couleur), et le sigma de plage est ajuste par le parametre de force : σ_r = 0.02 + force × 0.08, ou la force varie de 0 a 1.

Le filtre bilateral est rapide (O(n × r²) ou r est le rayon du noyau en espacement de meme couleur) et previsible. Sa faiblesse est qu'il peut produire des artefacts de discretisation sur les degrades lisses a forte intensite, car la ponderation par plage cree des marches discretes plutot que des transitions douces.

Non-Local Means (NLM) : debruitage par patchs

Non-Local Means, introduit par Buades, Coll et Morel en 2005, adopte une approche fondamentalement differente. Au lieu de comparer des intensites de pixels individuels, il compare des patchs — de petits voisinages rectangulaires autour de chaque pixel. Deux pixels dont les patchs sont similaires sont consideres comme « apparentes » meme s'ils sont spatialement eloignes. Cela permet a l'algorithme de trouver et de moyenner des motifs repetes a travers l'ensemble de l'image, produisant des resultats remarquablement propres tout en preservant la texture.

Mur en pierre texture montrant le detail fin et le motif du grain
Les textures fines comme la pierre, le tissu et la peau sont le terrain ou le debruitage NLM demontre sa superiorite. En comparant des patchs plutot que des pixels individuels, il peut moyenner des regions de texture similaires tout en preservant la structure de la texture elle-meme.

Formule du Non-Local Means :

                  Σ w(p, q) · I(q)
NLM[I](p) = ────────────────────────
                  Σ w(p, q)

where:
  w(p, q) = exp(-||P(p) - P(q)||² / h²)

  P(p) = the patch of pixels around p (e.g. 7×7 neighborhood)
  ||P(p) - P(q)||² = sum of squared differences between patches
  h = filtering parameter (controls strength)

La recherche de patchs similaires est limitee a une fenetre de recherche autour de chaque pixel (par exemple 11×11 en espacement de meme couleur) pour des raisons de faisabilite calculatoire. La taille des patchs et le rayon de recherche sont les deux parametres cles.

Sur la mosaique Bayer, NLM opere sur des sous-images. Les quatre positions CFA (R, G1, G2, B) sont extraites en images separees au quart de la resolution. NLM s'execute independamment sur chaque sous-image, puis les resultats sont reecrits dans la mosaique pleine resolution. Cela garantit que chaque plan couleur est debruite sans contamination inter-canaux.

Le cout calculatoire est substantiel : O(n × patch² × search²) par pixel. Pour une image de 45 megapixels avec des patchs de 7×7 et des fenetres de recherche de 11×11, cela represente environ 600 operations par pixel par sous-image, soit environ 27 milliards d'operations au total. C'est pourquoi NLM est typiquement 5–10× plus lent que le filtre bilateral. Sur un processeur multi-coeurs moderne avec traitement parallele, un fichier RAW de 24 megapixels prend 2–5 secondes pour NLM contre 0.3–0.8 secondes pour le bilateral.

Quand utiliser lequel

Critere Bilateral NLM
Vitesse Rapide (~0.5s pour 24 MP) Lent (~3s pour 24 MP)
Preservation des contours Bonne Excellente
Preservation des textures Moderee (peut lisser les details fins) Excellente (la correspondance de patchs preserve les textures repetitives)
Ideal pour Bruit faible a modere (ISO ≤ 3200) Bruit eleve (ISO ≥ 3200), sujets textures
Artefacts Discretisation sur les degrades a forte intensite Rare halo pres des contours a tres haut contraste
Recommandation N&B Bon choix par defaut pour un traitement rapide Privilegie pour les tirages d'art / exposition

Partie IV — Recuperation des hautes lumieres

Lorsqu'un photosite recoit trop de photons, son puits de charge sature et le CAN lit la valeur maximale. Le pixel est « ecrete ». Sur un capteur monocanal, cela signifierait une perte totale d'information. Mais dans une mosaique Bayer, l'ecretage atteint rarement les trois canaux simultanement. Le ciel bleu, par exemple, peut ecreter le canal bleu tandis que le rouge et le vert restent en dessous de la saturation. Une chemise blanche peut ecreter le rouge et le vert tandis que le bleu effleure a peine le plafond.

La recuperation des hautes lumieres exploite cet ecretage partiel. Lorsqu'un ou deux canaux sont satures mais que les autres ne le sont pas, l'algorithme estime les valeurs manquantes a partir des canaux survivants en utilisant les rapports etablis par la balance des blancs. Si les multiplicateurs BB nous indiquent que R devrait valoir 0.85× la valeur du vert dans cette partie de la scene, et que le vert n'est pas ecrete, on peut reconstruire une valeur rouge plausible.

Le parametre de force controle l'agressivite avec laquelle l'algorithme reintegre les valeurs recuperees dans l'image. A 0%, les canaux ecretes sont simplement bornes au blanc. A 100%, l'algorithme reconstruit autant qu'il le peut. En pratique, une recuperation au-dela de 60–70% tend a produire des hautes lumieres plates et grisatres qui ont perdu leur qualite lumineuse. Pour le travail en N&B, ou le caractere tonal des hautes lumieres est critique, une recuperation moderee (40–60%) donne generalement les meilleurs resultats.

Partie V — Demosaicage : reconstruire ce que le capteur n'a pas capture

Le demosaicage est l'etape la plus intensive en calcul et la plus complexe algorithmiquement du pipeline. Sa mission : prendre une mosaique ou chaque pixel n'a qu'une seule couleur, et produire une image ou chaque pixel possede les trois. Deux tiers des donnees de votre image finale sont fabriques par cet algorithme. La qualite de cette fabrication determine si votre image a des contours nets ou des artefacts en fermeture eclair, si le detail fin est preserve ou etale, et si vous voyez du faux moire chromatique sur les textures a haute frequence.

Interpolation bilineaire : la reference de base

L'approche la plus simple : pour chaque couleur manquante a chaque pixel, moyenner les plus proches voisins de cette couleur. Pour trouver la valeur verte a un pixel rouge, moyenner les quatre pixels verts environnants (au-dessus, en dessous, a gauche, a droite). Pour trouver la valeur rouge a un pixel bleu, moyenner les quatre pixels rouges environnants (en diagonale).

L'interpolation bilineaire est rapide et facile a comprendre, mais fondamentalement defaillante. Elle suppose que la couleur varie de maniere reguliere a travers l'image, ce qui est vrai dans les zones uniformes mais catastrophiquement faux au niveau des contours. A la frontiere nette entre un objet rouge et un fond vert, le filtre bilineaire moyenne allegrement les pixels rouges d'un cote avec les pixels verts de l'autre, produisant un contour etale et frange de couleur. Sur les motifs a haute frequence (tissages, grillages, murs de briques), il genere du moire : de faux motifs qui n'existent pas dans la scene originale.

Malgre ses defauts, l'interpolation bilineaire sert de reference de vitesse. Quand on a besoin de traiter des milliers d'images rapidement et que la qualite absolue n'est pas critique (planches contact, aperçus rapides, donnees d'entrainement pour le machine learning), le bilineaire fait le travail en un temps minimal.

PPG : Patterned Pixel Grouping

PPG, decrit par Chuan-Kai Lin en 2009, ameliore le bilineaire en rendant l'interpolation sensible a la direction. Au lieu de moyenner aveuglement tous les voisins, il estime le gradient (taux de variation) dans les directions horizontale et verticale et interpole le long de la direction presentant le plus petit gradient — la direction ou l'image est plus lisse.

Interpolation verte PPG a un pixel rouge :

Horizontal gradient:
  grad_H = |G_left - G_right| + |2·R_center - R_left2 - R_right2|

Vertical gradient:
  grad_V = |G_up - G_down| + |2·R_center - R_up2 - R_down2|

If grad_H < grad_V:
  G = (G_left + G_right)/2 + (2·R_center - R_left2 - R_right2)/4

If grad_V < grad_H:
  G = (G_up + G_down)/2 + (2·R_center - R_up2 - R_down2)/4

If grad_H == grad_V:
  G = average of both estimates

Le second terme de chaque gradient est une correction laplacienne (Hamilton & Adams, 1997) : il utilise la derivee seconde du canal de meme couleur pour affiner l'estimation. Cela reduit le frange de couleur que produit le simple moyennage.

Le test de gradient est l'innovation cle de PPG. Au niveau d'un contour vertical, le gradient horizontal est important (les couleurs changent rapidement de gauche a droite) tandis que le gradient vertical est faible (les couleurs sont similaires de haut en bas). PPG choisit la direction verticale, interpolant le long du contour plutot qu'a travers celui-ci. Cela preserve la nettete des contours a un cout calculatoire modeste.

PPG est typiquement 1.5–2× plus lent que le bilineaire et produit des resultats sensiblement meilleurs sur les contours. Sa faiblesse est qu'il ne considere que deux directions (horizontale et verticale), ce qui le met en difficulte sur les contours diagonaux et les textures fines ou la direction d'interpolation optimale n'est ni H ni V.

AMaZE : l'etat de l'art

AMaZE (Aliasing Minimization and Zipper Elimination) a ete developpe pour RawTherapee par Emil Martinec et represente l'etat de l'art actuel du demosaicage open-source. Il etend l'approche directionnelle a quatre directions et utilise une strategie de fusion sophistiquee fondee sur une analyse d'homogeneite locale.

Facade architecturale detaillee avec des motifs geometriques repetitifs
Les motifs architecturaux a haute frequence avec des details fins et repetitifs constituent le test de resistance ultime pour un algorithme de demosaicage. Le bilineaire produit du moire visible ; PPG le reduit ; AMaZE l'elimine grace au filtrage median de la chrominance.

Pipeline AMaZE (4 passes) :

  1. Interpolation verte directionnelle : Calculer des estimations du vert dans 4 directions — horizontale (H), verticale (V), diagonale +45° et diagonale −45°. Chacune utilise la correction laplacienne de Hamilton-Adams pour sa direction.
  2. Fusion pilotee par l'homogeneite : Pour chaque direction, calculer la variance des differences de couleur (R−G ou B−G) dans un voisinage 3×3. Les directions a plus faible variance (resultats plus homogenes) sont plus fiables. L'estimation finale du vert est une combinaison ponderee, utilisant la variance inverse comme poids. Les directions qui produisent des differences de couleur lisses et coherentes recoivent le plus d'influence.
  3. Interpolation R/B : Avec le canal vert entierement reconstruit, interpoler le rouge et le bleu par la methode des differences de couleur. Au lieu d'interpoler R directement (ce qui ignore la correlation entre canaux), interpoler la difference (R−G) puis ajouter le vert connu. Cela exploite le fait que les differences de couleur varient plus lentement que les canaux individuels a travers l'image.
  4. Filtre median de chrominance : Un filtre median 3×3 est applique aux canaux R−G et B−G. L'operation mediane supprime les pics de fausse couleur (artefacts de moire) sans estomper les contours, car la mediane resiste aux valeurs aberrantes. C'est l'etape « anti-moire » et l'un des avantages majeurs d'AMaZE sur les algorithmes plus simples.

L'analyse d'homogeneite de l'etape 2 est ce qui separe AMaZE des methodes directionnelles plus simples. Considerez un pixel au niveau d'un contour quasi diagonal. Les interpolations horizontale et verticale traversent toutes deux le contour et produisent des differences de couleur incoherentes (forte variance). L'interpolation diagonale alignee avec le contour reste d'un seul cote et produit des resultats coherents (faible variance). AMaZE selectionne automatiquement la direction diagonale dans ce cas, ce que PPG ne peut pas faire.

Le cout calculatoire est environ 3–5× celui de PPG, du fait des quatre passes d'interpolation et de l'analyse d'homogeneite. Sur un processeur 8 coeurs moderne traitant un fichier RAW de 24 megapixels, AMaZE prend environ 500–800 ms contre 150–250 ms pour PPG. Pour des images individuelles, cette difference est negligeable. Pour le traitement par lots de milliers de fichiers, elle devient un facteur significatif.

Choisir son algorithme

Algorithme Vitesse Qualite des contours Moire Ideal pour
Bilineaire 1× (reference) Mediocre Fort Aperçus, planches contact, entrainement ML
PPG 1.5–2× Bonne Modere Usage general, traitement par lots
AMaZE 3–5× Excellente Minimal Tirages d'art, expositions, detail critique

Pour la photographie N&B specifiquement, le choix importe moins qu'on pourrait le croire. L'essentiel de ce contre quoi le demosaicage lutte — fausse couleur, moire chromatique — disparait lors de la conversion en monochrome. Ce qui subsiste, c'est la resolution en luminance et la definition des contours, ou AMaZE conserve un avantage mais ou PPG est souvent suffisant. Si vous imprimez en 50×75 cm a partir d'un capteur de 45 megapixels, la difference entre AMaZE et PPG peut etre visible dans les textures fines de tissus. En 20×25 cm ou a l'ecran, c'est presque impossible a distinguer.

Partie VI — Matrice de couleur : parler la langue du capteur

Apres le demosaicage, vous disposez d'une image RGB complete. Mais les valeurs R, G, B sont dans l'espace colorimetrique natif de l'appareil — determine par la reponse spectrale des colorants du CFA du capteur. Le « rouge » d'un capteur Canon n'est pas le meme que le « rouge » d'un capteur Nikon. Leurs filtres rouges laissent passer des longueurs d'onde differentes, de sorte que la meme scene produit des valeurs RGB differentes sur des appareils differents.

La matrice de couleur transforme ces valeurs RGB natives de l'appareil en un espace colorimetrique standard (sRGB, via CIE XYZ comme intermediaire). La transformation est une multiplication matricielle 3×3 :

| X |   | m00  m01  m02 |   | R_cam |
| Y | = | m10  m11  m12 | · | G_cam |
| Z |   | m20  m21  m22 |   | B_cam |

then:

| R_sRGB |   |  3.2405  -1.5372  -0.4986 |   | X |
| G_sRGB | = | -0.9693   1.8760   0.0416 | · | Y |
| B_sRGB |   |  0.0556  -0.2040   1.0572 |   | Z |

La premiere matrice (cam → XYZ) est specifique a chaque modele d'appareil et est typiquement stockee dans le fichier RAW ou dans une base de donnees indexee par marque/modele. La seconde matrice (XYZ → sRGB) est un standard fixe. Les deux sont souvent pre-multipliees en une seule matrice 3×3 pour des raisons d'efficacite.

Pour le travail en N&B, l'etape de matrice de couleur reste importante meme si la sortie sera monochrome. La matrice affecte la luminosite relative des differentes couleurs, ce qui controle directement la maniere dont elles se traduisent en tons de gris. La contourner signifierait que votre conversion N&B est fondee sur la reponse spectrale de l'appareil plutot que sur une colorimetrie standardisee, ce qui rend le resultat dependant de l'appareil et imprevisible.

Partie VII — Exposition, mixage N&B et gamma

Compensation d'exposition

La compensation d'exposition dans le domaine numerique est une simple multiplication. Un diaphragme de compensation d'exposition double les valeurs des pixels ; moins un diaphragme les divise par deux. La formule est :

pixel_corrected = pixel_linear × 2^EV

where EV is the exposure compensation in stops.

+1.0 EV = ×2.0    (one stop brighter)
-1.0 EV = ×0.5    (one stop darker)
+0.5 EV = ×1.414  (half a stop brighter)

Cela se fait dans l'espace de lumiere lineaire, avant la correction gamma. La relation exponentielle correspond a la physique de l'exposition : chaque diaphragme represente un doublement ou une division par deux de la lumiere. Comme les donnees sont encore lineaires a ce stade, la multiplication est physiquement exacte — elle equivaut a avoir utilise une vitesse d'obturation ou une ouverture differente au moment de la prise de vue, dans les limites de la plage dynamique du capteur.

Mixage des canaux N&B

Le mixeur de canaux convertit l'image couleur en monochrome en calculant une somme ponderee des trois canaux. C'est l'equivalent numerique du placement d'un filtre colore devant l'objectif en photographie N&B argentique. Un filtre rouge (fort poids du rouge) eclaircit les sujets rouges et assombrit les bleus. Un filtre bleu fait l'inverse.

luminance = R × w_red + G × w_green + B × w_blue

Standard luminance (Rec. 709):    0.2126 R + 0.7152 G + 0.0722 B
Yellow filter equivalent:         0.35 R   + 0.45 G   + 0.20 B
Orange filter equivalent:         0.50 R   + 0.35 G   + 0.15 B
Red filter equivalent:            0.60 R   + 0.30 G   + 0.10 B
Green filter equivalent:          0.20 R   + 0.55 G   + 0.25 B
Blue filter equivalent:           0.10 R   + 0.25 G   + 0.65 B

Les poids n'ont pas besoin de sommer a 1.0, mais s'ils sont significativement au-dessus ou en dessous de 1.0, la luminosite globale de l'image va se decaler. Dans une implementation soignee, les poids sont normalises en interne pour eviter les changements de luminosite non souhaites.

L'intuition essentielle pour les photographes N&B : la balance des blancs et le mixage de canaux sont des outils complementaires, pas des alternatives. La balance des blancs modifie les gains bruts des canaux avant le demosaicage, changeant les relations tonales fondamentales dans les donnees. Le mixeur de canaux selectionne ensuite la maniere dont ces canaux modifies contribuent a la luminance finale. Utilises ensemble, ils offrent un espace de controle bidimensionnel bien plus puissant que chacun isole.

Gamma sRGB

L'etape finale transforme les valeurs des pixels depuis la lumiere lineaire vers la courbe gamma sRGB. Cette transformation est necessaire parce que la perception humaine de la luminosite est non lineaire : nous sommes bien plus sensibles aux differences dans les tons sombres que dans les tons clairs. Une image encodee en lineaire affichee directement sur un moniteur apparait extremement sombre, avec tout le detail ecrase dans les ombres.

Fonction de transfert sRGB (IEC 61966-2-1) :

If C_linear ≤ 0.0031308:
  C_sRGB = 12.92 × C_linear

If C_linear > 0.0031308:
  C_sRGB = 1.055 × C_linear^(1/2.4) - 0.055

Ce n'est pas une simple fonction puissance. Le segment inferieur est lineaire (pour eviter les problemes numeriques pres de zero) et le segment superieur utilise un exposant de 1/2.4 (≈ 0.4167). L'effet global est similaire a un gamma de 2.2 mais plus precisement defini. C'est l'encodage standard pour tout contenu sRGB : images web, la plupart des moniteurs, et impression en gamut standard.

Sauter l'etape gamma produit un fichier en espace de lumiere lineaire. Cela est utile quand la sortie sera traitee ulterieurement dans un logiciel qui attend des donnees lineaires, ou quand on souhaite analyser les valeurs photometriques reelles. Mais pour l'affichage a l'ecran ou l'impression, l'encodage gamma est essentiel.

Partie VIII — Le pipeline complet

Voici le pipeline complet, avec chaque etape, son entree, sa sortie, et ce qu'elle modifie dans l'image :

# Etape Domaine Ce qu'elle fait Drapeau de bypass
1 Soustraction du noir Bayer (int) Soustrait le decalage de courant d'obscurite, normalise en [0,1] flottant --skip-black-sub
2 Balance des blancs Bayer (float) Multiplie chaque pixel CFA par le coefficient BB de sa couleur --skip-wb
3 Debruitage Bayer (float) Filtre bilateral ou NLM sur les pixels Bayer de meme couleur --skip-denoise
4 Recuperation des HL Bayer (float) Reconstruit les canaux ecretes a partir des voisins non ecretes --skip-hr
5 Demosaicage Bayer → RGB Interpole les couleurs manquantes (Bilineaire / PPG / AMaZE) --skip-demosaic
6 Matrice de couleur RGB (cam) → RGB (sRGB) RGB appareil → XYZ → sRGB via matrice 3×3 --skip-color
7 Exposition RGB lineaire Multiplie tous les pixels par 2EV --skip-exposure
8 Mixage N&B RGB → mono Somme ponderee des canaux R, G, B → luminance --skip-bw
9 Gamma Lineaire → sRGB Fonction de transfert sRGB pour affichage/impression --skip-gamma

L'ordre n'est pas arbitraire. La balance des blancs doit intervenir avant le demosaicage car les multiplicateurs BB modifient la sensibilite effective de chaque couleur CFA, ce qui affecte les calculs de gradient de l'algorithme de demosaicage. Le debruitage doit intervenir avant le demosaicage car le bruit est encore pur par canal sur les donnees Bayer. La matrice de couleur doit intervenir apres le demosaicage car elle necessite des triplets RGB complets. L'exposition doit intervenir avant le mixage N&B car les poids de mixage sont calibres pour des niveaux de luminosite specifiques. Le gamma doit etre en dernier car toutes les etapes precedentes operent en lumiere lineaire.

Dans un processeur RAW bien concu, chaque etape peut etre individuellement contournee, ce qui permet d'inspecter les resultats intermediaires a n'importe quel point du pipeline. Voir l'image apres le demosaicage mais avant la correction couleur, ou obtenir une sortie couleur encodee en lineaire pour un traitement externe. Ce type d'inspection etape par etape est inestimable pour comprendre ce que chaque etape apporte et pour diagnostiquer les problemes de traitement.

Postface : les frontieres du pipeline RAW

Certains processeurs RAW vont au-dela des algorithmes fondamentaux decrits ici. DxO PhotoLab, par exemple, est une reference en matiere de qualite de traitement RAW. Leurs avantages se repartissent en quelques categories :

Profils optiques par appareil. DxO calibre chaque combinaison appareil-objectif, en mesurant la distorsion, le vignetage, l'aberration chromatique et la nettete sur l'ensemble du champ. Leurs corrections ne sont pas des algorithmes generiques mais des tables de correspondance mesurees, specifiques a votre equipement exact. Constituer ce type de base de donnees de profils exige un laboratoire et des annees de mesures.

DxO DeepPRIME. Leur debruiteur par reseau de neurones, entraine sur des paires d'images bruitees et propres provenant d'appareils specifiques, produit des resultats que les algorithmes artisanaux comme NLM ne peuvent pas egaler a haut ISO. Le reseau a appris les caracteristiques de bruit specifiques de chaque capteur et peut separer le signal du bruit avec une precision remarquable.

Correction du flou optique. Les donnees de profilage de DxO incluent la FTM (Fonction de Transfert de Modulation) mesuree pour chaque objectif a chaque ouverture et chaque focale. Ils peuvent deconvoluer le flou optique, « deflouant » en quelque sorte l'objectif. C'est quelque chose qu'aucun algorithme de nettete generique ne peut reproduire car cela necessite la connaissance du noyau de flou specifique.

Ce sont des avantages tangibles fondes sur des donnees proprietaires. L'approche alternative est d'egaliser ou de depasser sur le plan algorithmique — balance des blancs CIE-correcte, demosaicage AMaZE, debruitage Bayer approprie — la ou la physique et les mathematiques sont publiques et bien comprises. Les corrections fondees sur les profils constituent un domaine complementaire qui necessite soit la contribution de la communaute, soit un partenariat avec des fournisseurs de donnees de calibration.


Eric K'DUAL
Ecrit par
Eric K'DUAL
Redacteur Craft numerique
Eric K'DUAL est un photographe et artiste numérique français basé en France. Passionné de code informatique et de photographie noir et blanc, il fait le pont entre l'artisanat traditionnel de la chambre noire et l'imagerie computationnelle moderne, construisant ses propres outils et poursuivant l'instant décisif en monochrome.