Étape 1 — Charger une image depuis un lien ou un fichier local

Objectif de cette étape : charger l'image source (depuis une URL ou un fichier local) et l'afficher proprement dans un <canvas>. Le calcul des canaux (Lab, T1, T2, etc.) sera branché à l'étape 2.

link Collez l'URL d'une image *CORS-enabled* (sinon le canvas sera protégé et l'analyse des pixels sera impossible).
Fichier
Choisissez une image locale (aucune contrainte CORS).
Étape 2 — Chargement + calcul des canaux (Lab, T1, T2, chroma)

Chargez une image (URL *CORS-enabled* ou fichier local), puis basculez le canal affiché sur chacun des deux canvas (A et B). Conversion stricte sRGB->lin->XYZ->Lab (D65), calcul T1=a*+b*, T2=a*-b*, chroma=√(a*²+b*²), normalisation robuste (P2–P98).

image Image source / Infos
Source:
Taille:
Pixels:
tune Normalisation

view_module Vue A
view_module Vue B
view_module original
Notes techniques — pipeline et affichage
  • Conversion colorimétrique : sRGB -> lin (gamma), linRGB -> XYZ (D65), XYZ -> Lab avec blanc D65 (Xn=0.95047, Yn=1.00000, Zn=1.08883).
  • Canaux dérivés :
    • T1 : score chaud/froid via warmCoolScore (projection sur un axe chaud 60° et pondération par la chroma). Modes disponibles :
      • absolute : utilise directement les composantes a*/b*.
      • relative_global : soustrait la moyenne globale de a*/b* avant projection.
      • relative_local : soustrait un flou gaussien (σ=50 px) pour compenser les tendances locales.
    • T2 = a* - b*.
    • chroma = √(a*² + b*²).
  • Normalisation :
    • L* : 0->100 (affiché en 0->255 gris).
    • Signés (a*, b*, T1, T2) : bornes ±max(|P2|,|P98|) si « Robuste », sinon bornes sur min/max des données; mapping divergeant bleu->noir->rouge.
    • chroma : 0->P98 (ou 0->max si Robuste décochée), affiché en niveaux de gris.