Colorimétrie : Capture One, DxO, ACR, Nikon Capture NX2...Dcraw

Démarré par jdc, Janvier 11, 2009, 17:27:06

« précédent - suivant »

jdc

 [at] Sansame

Dans le domaine du traitement de dématricage, il y a des querelles...mais ce qui ressort en point communs :
* il vaut mieux traiter le bruit avant interpolation (il y a mieux que les ondelettes, mais aujourd'hui c'est la base de Dcraw, un membre de l'équipe, un chercheur Americain, Emil Martinec développe actuellement de nouveaux processus très innovants et très prometteurs...).
* le bruit est aussi traité de manière préventive, en cartographiant les pixels à risque, pendant l'interpolation, c'est le cas de AFD qui est un processus entièrement nouveau issu de chercheurs à Hong-Kong et mis au point par M.LLorens et Paul Lee (lui même co-auteur de AHD, interpolation qui se trouve en variante dans de nombreux produits tels ACR, Lightroom...)
* pour la balance des blancs, là aussi , il vaut mieux le faire en RGGB, avant interpolation, pour diminuer les artefacts.
* etc.
Néanmoins il est également possible de le faire après... ce qui ne pose(rait) pas de problème...

La conversion rgb==> Lab ==> rgb est entièrement réalisée avec des "float" et/ou "en double précision". selon les cas (le 8 bits ferait tout perdre), de même les conversion rgb==>XYZ par inversion de matrice sont faits par calcul en double précision au lieu de copier la matrice inverse (pertes de précision). Les constantes utilisées pour la conversion XYZ=> Lab (epsilon, kappa, ..) sont définies en double précision, etc.  Il est indispensable de traiter le cas des valeurs de luminance 'L' et 'a' et 'b' qui sortent des limites > 128, > 100 ou négatives...De plus je vérifie (et j'ai vérifié) l'exactitude des résultats en comparant pour des pixels donnés les valeurs rgb avant et après conversion Lab en n'exécutant aucune opération. Les erreurs sont infimes de l'ordre de 1/100000 donc de l'ordre de la précision 16 bits (1/65536).

Je sais (on en parle dans certains forums aux USA) que cette pratique est contestée si on utilise les entiers et les calculs sur 8 bits- mais si on prend les précautions suffisantes - les risques sont quasi nuls...Le mode Lab permet d'accentuer en mode Lab (l'accentuation se fait juste après l'interpolation) et de traiter contraste / saturation sans toucher aux autres composantes.

Le filtre Laplacien (moiré, aliasing) ainsi que d'autres ("reinforce EECI", "median différentiel" pour artefacts de couleurs,...) ont pour origine les chercheurs de Hong-Kong et ont été mis au point en langage C par Paul Lee. J'ai juste apporté ma contribution, par exemple en rendant possible le choix du seuil du Laplacien, ou encore le nombre de pixels qui servent au calcul (3x3 pour les travaux de Paul Lee et D.Coffin... que j'ai porté à 5x5 bien sûr au choix car les temps de calcul sont plus longs).

J'espère avoir été assez clair...
:)

jdc

Pour la balance des blancs, c'est le travail de Dave Coffin, il n'y a rien de changé à son code, sinon quelques "arrangements" personnels, pour ajuster l'exposition et la récupération des HL..

Guillermo Luijk a fait un bon tutoriel sur Dcraw où il explique (en anglais ou en espagnol) les inconvénients de faire la BdB après interpolation
http://www.guillermoluijk.com/tutorial/dcraw/index_en.htm

En fait cette balance des blancs consiste à équilibrer 4 canaux RGGB. pour cela le logiciel possède plusieurs algorithmes qui sont ceux qu'ont retrouve habituellement :
* soit on se sert de la Bdb du boîtier, c'est à dire qu'on se sert des 4 multiplicateurs de canaux, r1, r2, r3 et r4 inscrits dans les exifs. Ces coefficients valent par exemple pour un D700 :
    * pour 2700K 1.066406, 1, 2.679687, 1
    * pour 4170K 1.523437, 1, 1.566406, 1
    * pour 10000K 2.480469, 1, 1,1
   * la table comprend pour un D700 : 65 listes de valeurs... et chaque type de boîtier (5DII, D3, A900, etc) possède ses caractéristiques propres.
* soit on se sert de la surface entière de l'image qu'on considère comme une "box" grise de 10M° de pixels (ou plus) qu'on essaye d'équilibrer
* soit on se sert d'une zone réputée grise parfaite (référence à la prise de vue = charte de gris,...) et on équilibre les 4 canaux RGGB, à l'issue on a de nouvelles valeurs r1,r2,r3,r4 qu'on fait agir sur la matrice de Bayer.

Les canaux verts peuvent être déséquilibrés ce qui dans certains cas peut entraîner des labyrinthes avec notamment l'interpolation AHD et certains capteurs (Olympus..). Manuel LLorens a mis au point (il a un Olympus...) un processus pour équilibrer ces canaux verts et ceci avant même la BdB.

L'interpolation en "bricolant" (c'est un peu péjoratif, mais traduit bien les arrangements des pixels qui se font par convolution) va légèrement fausser les calculs en introduisant de petites erreurs.
Une fois cela fait, on opère un éventuel débruitage (ondelletes), j'ai inversé ces données dans l'information que j'ai donnée sur le processus...

Je connais très bien les travaux de b.Lindbloom, mais ces exemples comme vous le dites se référent a des calculs sur 8 bits, qui si on les fait entraînent de lourdes erreurs

:)

Olivier-P


Avant interpolation, mais forcément vis à vis d'un espace ( profil ).

Il y a des documents, illisibles en détails pour ma connaissance personnelle, qui argumentent les choix possibles, et la méthode. J'ignore ce que Coffin a retenu. Principalement deux écoles s'affrontaient si ma mémoire est bonne, un espace de taille restreinte genre srgb, ou un CIERGB. Le papier indique que le CIERGB a été plus ou moins abandonné pour caler les blancs, car donnant des résultats moins bons. Ce profil premier n'indique en aucun cas les profils suivants, soyons clairs.
Amitiés 
Olivier

Olivier-P


Pardon, CIE XYZ, pas CIERGB.

"The advantage of the white point preservation constraint
when assuming maximum ignorance (MI) spectral
correlation statistics is discussed elsewhere. For
consistency's sake, the least squares regressions were
performed on linear RGB values. There may be some
advantage to minimizing the mean square error in a more
perceptual RGB space, such as one with a gamma function
of approximately 2.2, but this was not investigated.
However, it is important to note that the mean square error
was minimized in linear ITU-R BT.709 RGB space, as
opposed to linear CIE XYZ space
."

nb : ITU709 = sRGB.
Voici une étude de différentes expérimentations de dématricage.

www.photus.eu/img/gamut_cic97.pdf
Amitiés 
Olivier

jdc

Je ne sais pas ce que font les autres produits...

Mais dans le cas de Dcraw, la balance des blancs est assurée avant interpolation, sur des valeurs rggb, c'est à dire où un espace couleur n'a pas été affecté.

Le calcul est "simple" et prend en compte les multiplicateurs de canaux enregistrés lors de la prise de vue.

1- Soit on se sert de ces valeurs (paramètre -w) et on obtient la bdb du boîtier.

2- Soit on entre les coordonnées d'une zone réputée neutre(paramètre -A x y dx dy), le logiciel calcule avec la matrice de Bayer, la valeur moyenne correspondant à la somme des 4 composantes rggb, divisée par le nombre de pixels de la zone et corrige les coefficients initiaux. A noter que si x=0, y=0 dx=largeur dy=hauteur, on réalise la fonction balance des blancs automatique en prenant en compte la surface du capteur en entier.

3- Soit on entre des valeurs libres (paramètre - r a b c d), et là le logiciel prend en compte ces valeurs.

C'est sur ce point 3 que Dcraw est aujourd'hui "limité". Dans la version de Perfectraw - qui reprend une interface graphique - la future version 1.0 (aujourd'hui c'est la 0.65) introduira les possibilités d'entrer par choix de l'utilisateur des valeurs préétablies données par les constructeurs et qui permettront de "corriger" sensiblement la Bdb, en entrant des valeurs de type "tungstène", "fluorescent", "nuageux", etc., 6300K, 3200K,...A noter qu'il est possible d'entrer ces valeurs manuellement par la commande -r de Dcraw.

A titre d'information, par exemple pour un Nikon D3 les coefficients à appliquer à -r a b c d sont :
* pour Incandescent a=1.16796 b=1 c=2.31640 d=1
* pour Fluorescent    a=1.6875 b=1 c=2.10156 d=1
* pour Daylight         a=1.8164 b=1 c=1.35546 d=1
* etc.

C'est après interpolation et d'autres traitements qu'on affecte un espace colorimétrique (sRGB, Adobe, Prophoto...
:)

Olivier-P



Si tu n'as pas un espace, rggb ou n'importe quelle autre valeur n'a pas de référent. Il faut donc un espace temporaire.
Amitiés 
Olivier

jdc

Dans le code source en langage C, réalisé par Dave Coffin, les valeurs rggb qui servent :
a) à réaliser la balance des blancs
b) retoucher les aberrations chromatiques
c) réduire le bruit par ondelettes
d) interpoler
d) retoucher les HL
f) etc.
Ont pour origine la lecture de la matrice de Bayer : fonction FC() et BAYER() qui décryptent les valeurs inscrites sur le capteur.

L'équipe de développement de Perfectraw (G.Luijk, M.LLorens, F.Ariznav, Egon, P.Lee, E.Martinec...) et moi même,  avons ajouté des fonctionnalités toujours avant l'affectation d'un espace colorimétrique :
a) réglage pondéré de l'exposition
b) nouveaux algorithmes d'interpolation
c) filtres medians et Laplaciens
d) etc.

Je réalise (ce n'est pas repris dans Perfectraw à ce jour), une conversion rgb ==> XYZ => Lab puis "opérations", puis le traitement inverse Lab ==> XYZ==>rgb, pour effectuer des "opérations" en mode Lab : accentuation, examen du gamut, traitement du contraste et de la saturation, traitement des BL, etc.
Cette conversion de travail provisoire est effectuée après l'interpolation.

La conversion rgb==XYZ où on affecte l'espace de travail de sortie (sRGB, Adobe, WideGamut, Prophoto...), ainsi que l'affectation d'un gamma est réalisée en final, juste avant la production du TIFF.

:)

Olivier-P


L'espace de la balance n'a strictement rien à voir avec celui de sortie.

Si tu ne vois aucune application de profil, c'est que les rgbcam sont en XYZ par défaut. Autrement dit les valeurs sont déjà alignées, en D65 d'ailleurs, dans l'équilibre du capteur. "Ne pas avoir d'espace" est une impossibilité totale. XYZ est la donne de départ ( sauf tc en D65 à traduire en XYZ D50 dans les docs, à voir selon ).

C'est donc l'option de rester en XYZ chez Coffin, indiquée dans le papier.
Une autre est possible, comme dans C1 pour exemple, avec une primo projection en un espace court pour faire les balances*, c'est le "no-correction" inclus dans le logiciel. C'est la seconde option du papier pdf. Elle est plus précise en crète des gris d'apres cette étude.

Naturellement, très loin de cela, on applique ensuite un profil LUT de sortie aux raw, bien différents du XYZ ou autre.
* la recommandation de C1 pour admettre des profils créés à la place de leur grand profils externe, est de sortir les chartes dans ce no-correction, c'est la seule façon d'accepter un autre profil externe dans la routine de C1. Certains n'ayant pas compris cela se heurte à des impossibilités. La primo projection est toujours "no-correction" chez C1, et ensuite seulement on peut appliquer notre profil perso par exemple. C'est pourquoi on doit imprimer le no correction, et l'analyser, pour correspondre au premier travail de C1 et poursuivre les taches.i]
Amitiés 
Olivier

jdc

Je viens de mettre à jour mon site avec 2 évolutions de ma version personnelle de Dcraw :
1) possibilité d'agir sur les "niveaux" par la commande -B a b c  : 'a' active la commande, 'b' et 'c' permettent d'agir sur le contraste. Ces deux paramètres correspondent au pourcentage de pixels qui après la commande "niveau" seraient supérieurs à 65535 ou inférieurs à 0. (les valeurs sont bien évidemment bornées). Pour 'a' et 'b' des valeurs vers 0.001 donnent généralement des résultats acceptables (à tester bien sûr)

2) ajout d'une possibilité supplémentaire de la bibliothèque LCMS

J'ai modifié en profondeur les paramètres d'accès aux fonctionnalités "LCMS" de Dcraw :

    * en maintenant les fonctionnalités prévues par Dave Coffin, activées par -p profil.icc -o espace.icm, qui concernent  ce qui est couramment appelé les profils "internes", c'est à dire qui s'appliquent avant l'affectation d'un espace colorimétrique, je n'ai jamais réussi, malgré de nombreux essais, sans gamma, avec gamma, en modifiant ou non la cible des données spectrales et/ou XYZ/Lab, à obtenir des résultats satisfaisants...d'où le choix d'un nouveau processus
    * Nouveau processus pour travailler avec des profils d'entrée :
         1. élaboration d'un profil ICC d'étalonnage de boîtier :
                o à partir d'une mire étalonnée et d'une prise de vue conforme en termes de balance des blancs et d'exposition (voir mon site);
                o traiter le raw avec Dcraw_91 avec la ligne de commande suivante : Dcraw_91 -v -A a b c d -o e -4 -T -g 4 -Y 0 1 -y f  Mire.raw, ou 'a b c et d' sont les coordonnées de la cellule servant à la balance des blancs, 'f ' le paramètre pour ajuster l'exposition et 'e' le choix de l'espace de construction du profil:
                      + après expérience, il vaut mieux choisir pour 'e' 4 (Prophoto) qui préservera au mieux l'ensemble du gamut, mais on peut aussi choisir, sRGB ou AdobeRGb voire '10' sans espace colorimétrique. Dans ce dernier cas, les résultats sont acceptables au lieu de très bons pour Prophoto.
                      + élaborer le profil ICC avec le profileur à partir des données spectrales  ou XYZ/Lab et du TIIF obtenu précédemment

         2. utilisation du profil ICC:
                o c'est ici que j'ai modifié Dcraw et LCMS (de manière ponctuelle)...
                o On se sert à la fois de l'espace de référence d'élaboration du profil, et de l'espace de travail qu'on choisira. Ligne de commande :
                      + Dcraw_91 -w -v -o 4 -4 -T -g 4 -L profil.icc -X output.icm i  photo.raw; où:
                            # 'profil.icc' est le profil d'étalonnage (avec ou sans modifications de type contraste, saturation,...)
                            # 'output.icm' est l'espace de travail choisi, par exemple AdobeRGB, PhotogamutRGB, Prophoto, sRGB
                            # 'i' est l'intention : 0=perceptuel; 1 relative; 2 saturation; 3 absolue

         3. les résultats sur la mire 'JDC-Rouli' 468 couleurs sont excellents...comparables à ce qu'on obtient avec les logiciels habituels du commerce (DxO, NX2, Photoshop...)
:)

Terapixel


Jean-Claude

Dommage pour tout ce travail, alors que les conditions de départ ne sont pas correctes !

NX2 est un logiciel qui tient compte de la configuration du boitier qui a pris le NEF et qui ici était config par défaut Nikon si j'ai bien compris les explications !

Le rendu par défaut Nikon est fait pour plaire pour accrocher les regard aussi bien en couleurs, qu'en saturation, contraste et accentuation.
Le Nikoniste averti cale son boitier ou NX2 pour un rendu juste, neutre, avec une dynamique maximale,