Colour A
Colour B (for ΔEz comparison)
ΔEz ≈ 1 corresponds to a just-noticeable difference (JND) at moderate luminance.
Display Luminance
1101001 00010 000
JzAzBz requires absolute nits — sRGB is mapped to Y_absolute = Y_relative × peak_nits. CIELAB uses relative Y/Yn, so it is invariant to luminance scaling.
Shortcuts
R — reset  ·  C — copy JSON  ·  1 100 cd/m²  ·  2 203 cd/m²  ·  3 1000 cd/m²  ·  4 10 000 cd/m²
ΔEz =
ΔE2000 =
ΔEab =
Jz A = · Az A = · Bz A =
Jz B = · Az B = · Bz B =

JzAzBz / JzCzhz Coordinates (absolute, at current nits)

Colour Jz Az Bz Cz hz (°) Iz (PQ)
A
B
|ΔA−B|

Cz = √(Az²+Bz²) · hz = atan2(Bz,Az)·180/π · Jz range: 0 (black) → ~1 (10 000 cd/m²). Absolute nits = sRGB Y × peak_nits.

Inverse Transform Round-Trip (JzAzBz → XYZ → sRGB verification)

A round-trip
B round-trip

Jz,Az,Bz → Iz → PQ⁻¹ → LMS → XYZ (abs) → ÷ nits → sRGB. Perfect round-trip confirms numerical accuracy of both forward and inverse.

Cross-Space ΔE Comparison

Colour Space L/J component a component b component ΔE (simple) Notes

CIELAB / OKLab use relative luminance (nits-invariant). JzAzBz and ICtCp are nits-sensitive — values change with display luminance setting.

Luminance-Scaling Experiment (how each space tracks nits change)

Nits Jz (A) Cz (A) L* (CIELAB) L (OKLab) Jz (B) ΔEz

CIELAB L* is identical across all rows (divides by Y_n). Jz grows with nits — the key HDR advantage.

Active Parameter Summary

Parameter Colour A Colour B
Jz (lightness)
Cz (chroma)
hz (hue °)
ΔEz
ΔE2000
Display nits

Az–Bz Gamut Plane (at current nits)

Gold = A · Blue = B · Ring = Cz(A) · Thin outline = sRGB gamut boundary · Dashes = constant hue steps · Dots = Az/Bz axes

Jz vs Display Luminance (lightness response across HDR range)

Gold = JzAzBz A · Blue dash = JzAzBz B · Teal = CIELAB L*/100 · Green = OKLab L · Vertical dashed = current nits

JzCzhz Hue Wheel (hue angles of A and B)

Hue angle hz = atan2(Bz, Az) · Chroma Cz = √(Az²+Bz²) · Gold dot = A · Blue dot = B

ΔE Comparison — All Metrics

ΔEz (JzAzBz) · ΔE2000 · ΔEab (CIELAB) · ΔEok (OKLab) · ΔEICtCp

PQ Transfer Function (ST 2084) (vs cube-root and gamma 2.2)

Gold = PQ (ST 2084, Dolby) · Teal = Cube-root (CIELAB) · Blue = Gamma 2.2 · X = log₁₀(nits), Y = encoded signal (0–1)

Export & Share
JSON includes both colours' JzAzBz coordinates, ΔEz, Cz, hz, and nits. Share URL encodes hexA, hexB, nits.
JzAzBz — Standards Overview
Why JzAzBz? — CIELAB's Failure at HDR Luminance

CIELAB (1976) uses relative luminance: L* = 116·(Y/Yn)^(1/3) − 16. The same sRGB values produce identical L* on a 100 cd/m² and 1000 cd/m² display. This is wrong for HDR — the visual system responds to absolute luminance, not ratios alone.

Safdar et al. (2017) embedded the PQ (ST 2084) transfer function to encode 0–10 000 cd/m² perceptually. JzAzBz Jz lightness tracks absolute luminance, giving correct uniformity across the entire HDR range.

CIELAB problem:  L* = 116·(Y/Yn)^(1/3) − 16   relative, nits-invariant
JzAzBz:          XYZ_abs = XYZ_rel × peak_nits  absolute luminance
                 LMS → PQ-encode → opponent → Jz compression
Forward Transform: XYZ → JzAzBz (4 stages)
Stage 1: Pre-adapt for crosstalk (B=1.15, G=0.66)
  Xp = B·X − (B−1)·Z,  Yp = G·Y − (G−1)·X,  Za = Z

Stage 2: Adapted XYZ → LMS (Safdar matrix)
  L =  0.41478972·Xp + 0.579999·Yp  + 0.01464800·Za
  M = −0.20151000·Xp + 1.120649·Yp  + 0.05310080·Za
  S = −0.01660080·Xp + 0.26480000·Yp + 0.66847990·Za

Stage 3: PQ encode (SMPTE ST 2084)
  Lp = PQ(L),  Mp = PQ(M),  Sp = PQ(S)

Stage 4: Opponent + Jz compression
  Iz = 0.5·Lp + 0.5·Mp
  Az = 3.524·Lp − 4.066708·Mp + 0.542708·Sp
  Bz = 0.199076·Lp + 1.096799·Mp − 1.295875·Sp
  Jz = (1+D)·Iz / (1+D·Iz) − D0
       D = −0.56,  D0 = 1.6295e-11

Jz ≈ 0 for 0 cd/m², ≈ 0.167 for 100 cd/m² white, ≈ 1 for 10 000 cd/m² white (HDR peak).

Polar Form: JzCzhz (Lightness, Chroma, Hue)
Cz = √(Az² + Bz²)               chroma
hz = atan2(Bz, Az) × (180/π)    hue angle [0, 360)

Inverse:
Az = Cz · cos(hz·π/180)
Bz = Cz · sin(hz·π/180)

JzCzhz is the HDR analogue of CIELCh — useful for hue-preserving brightness edits, saturation adjustments, and hue rotation.

ΔEz — Simple Euclidean vs ΔE2000
JzAzBz — simple Euclidean:
  ΔEz = √(ΔJz² + ΔAz² + ΔBz²)

CIELAB ΔE2000 (complex):
  ΔE2000 = √((ΔL'/kL·SL)² + (ΔC'/kC·SC)² + (ΔH'/kH·SH)² + RT·(ΔC'/kC·SC)·(ΔH'/kH·SH))
  ...with SL, SC, SH hue-dependent corrections, RT rotation term

Safdar et al. showed ΔEz achieves lower average error than ΔE2000 on HDR datasets, with no correction factors. ΔEz ≈ 1 ≈ JND at moderate luminance.

PQ Transfer Function (SMPTE ST 2084) — The HDR Core
PQ OETF (Dolby, standardised SMPTE ST 2084):
  Yd = Y_nits / 10000
  m1 = 2610/16384 ≈ 0.1593
  m2 = 2523/128   ≈ 78.84
  c1 = 3424/4096  ≈ 0.8359
  c2 = 2413/128   ≈ 18.86
  c3 = 2392/128   ≈ 18.68

  E_PQ = ((c1 + c2·Yd^m1) / (1 + c3·Yd^m1))^m2

  Range: 0 → 1 over 0 → 10 000 cd/m²

PQ Inverse (EOTF):
  Yd = ((E^(1/m2) − c1) / (c2 − c3·E^(1/m2)))^(1/m1)

PQ matches the Barten (1999) contrast sensitivity function — 1% increments correspond to approximately equal perceived steps across all luminance levels. This is why JzAzBz uses PQ rather than a power law.

JzAzBz vs ICtCp (BT.2100) — Two HDR Colour Spaces
Property JzAzBz ICtCp
Year 2017 2016
Transfer PQ (ST 2084) PQ (ST 2084)
Input XYZ (absolute) BT.2020 linear
Opponent Az (red-green), Bz (yellow-blue) Ct (chrominance T), Cp (chrominance P)
ΔE simplicity Simple Euclidean Simple Euclidean
CIE adopted Not yet ITU-R BT.2100
Use case HDR gamut mapping, appearance HDR encoding, luma keying

Both use PQ for absolute luminance. ICtCp works from BT.2020 primaries and is optimised for broadcast. JzAzBz works from XYZ and is optimised for perceptual uniformity in colour appearance and gamut mapping.

Mathematical Models and Formulas

JzAzBz Forward Transform (XYZ → JzAzBz)

Input: XYZ (absolute, in cd/m²)

Step 1 — Pre-adaptation:
Xp = 1.15·X − 0.15·Z
Yp = 0.66·Y + 0.34·X
Za = Z

Step 2 — LMS (Safdar matrix):
[L M S]ᵀ = M_XYZ→LMS · [Xp Yp Za]ᵀ

M =
  [ 0.41478972 0.579999 0.01464800 ]
  [−0.20151000 1.120649 0.05310080 ]
  [−0.01660080 0.26480000 0.66847990 ]

Step 3 — PQ encode each channel:
Lp = PQ(L/10000), Mp = PQ(M/10000), Sp = PQ(S/10000)

Step 4 — Opponent channels:
Iz = 0.5·Lp + 0.5·Mp
Az = 3.524000·Lp − 4.066708·Mp + 0.542708·Sp
Bz = 0.199076·Lp + 1.096799·Mp − 1.295875·Sp
Jz = (1 + D)·Iz / (1 + D·Iz) − D0
  D = −0.56,   D0 = 1.6295499532821566e-11
References & Citations

Primary Source — JzAzBz

  1. Safdar, M., Cui, G., Kim, Y.J. & Luo, M.R. (2017). Perceptually uniform colour space for image signals including high dynamic range and wide colour gamut. Optics Express, 25(13), 15131–15151.

PQ Transfer Function

  1. SMPTE ST 2084:2014. High Dynamic Range Electro-Optical Transfer Function of Mastering Reference Displays (Perceptual Quantizer).
  2. Miller, S., Nezamabadi, M. & Daly, S. (2013). Perceptual Signal Coding for More Efficient Usage of Bit Codes. SMPTE Motion Imaging Journal, 122(4), 52–59.
  3. Barten, P.G.J. (1999). Contrast Sensitivity of the Human Eye and Its Effects on Image Quality. SPIE Press.

ICtCp and BT.2100

  1. ITU-R BT.2100-2 (2018). Image parameter values for high dynamic range television for use in production and international programme exchange.
  2. Lu, T., Pu, F., Yin, P., Chen, T., Husak, W., Pytlarz, J., Atkins, R., Froehlich, J. & Su, G.-M. (2016). ITP Colour Space and Its Compression Performance for High Dynamic Range and Wide Colour Gamut Video Distribution. ZTE Communications, 14(1).

CIELAB, OKLab, and Colour Appearance

  1. CIE 15:2004. Colorimetry, 3rd ed. (CIELAB definition).
  2. Ottosson, B. (2020). A perceptual colour space for image processing. OKLab.
  3. Fairchild, M.D. (2013). Color Appearance Models, 3rd ed. Chichester: Wiley.
  4. Li, C. et al. (2017). Comprehensive color solutions: CAM16, CAT16, and s-CIECAM16. Color Research & Application, 42(6), 703–718.
Batch Analysis — Random Colour Pair ΔEz

Generate 200 random sRGB colour pairs, compute JzAzBz at current nits, and show the ΔEz distribution. Includes JND threshold count (ΔEz < 1 ≈ indistinguishable) and statistical summary.

Batch Summary
N= Mean ΔEz= Median= Min= Max= ΔEz<1 (JND)= ΔEz<5=
ΔEz Distribution Histogram
Batch Results (first 50)
Colour A Colour B ΔEz Jz(A) Jz(B) |ΔJz|