Методика

Как мы считаем цветотип

Формулы, константы и пределы — те же, что в коде. Ничего не угадываем там, где можно померить.

Коротко

Цветотипка поправляет цвета кадра по белому листу, переводит кожу, глаза и волосы в CIELAB, считает 4 оси колорита и расстояние до 12 прототипов подтипов. Доли подтипов — softmax расстояний, уверенность — по отрыву первой доли от второй. Всё считает браузер; формулы публичные, код свой.

Формулы и тексты сверены . Как мы считаем

1. Белый лист и поправка света

Камера телефона сама подстраивает баланс белого и экспозицию, поэтому цвет кожи на снимке зависит от лампы и окна. Белый лист под подбородком — эталон. Зона листа — от 72% до 90% высоты рамки, ширина 56%. Лист найден, если у самых ярких 60% пикселей зоны яркость Y ≥ 0,25, а насыщенность (max − min) / max по линейным каналам меньше 0,25.

Поправка — по каналам в линейном sRGB: каждый канал умножается так, чтобы лист стал белым D65 с яркостью Y = 0,88. Это и поправка оттенка света, и экспозиции. Снимок — 12 кадров за 1,2 секунды, по каждой зоне берётся медиана; лист должен быть ярче щёк хотя бы в 1,15 раза, пересвеченных пикселей — меньше 3%.

Техническое задание предлагало адаптацию Bradford (Lam, 1985) в XYZ. На проверке — кадр под лампой A — она оставляла по коже ΔE2000 около 6 при нашем пороге 3; поправка по каналам даёт почти 0 и совпадает с тем, как на видео работает фильтр тканей. Поэтому в расчёте — поправка по каналам.

2. Светомер

Пока камера включена, 4 раза в секунду мы меряем лист: оттенок света по McCamy (1992) из xy листа до поправки, яркость Y (0–1) и ровность. Камера подстраивает баланс белого сама, поэтому это оттенок света в кадре, а не показания прибора.

ПоказаниеПорогПодсказка
Оттенок, K< 4 000тёплая лампа, подойдите к окну — снижает уверенность
Оттенок, K4 000–5 000нейтральный
Оттенок, K5 000–7 000дневной, хорошо
Оттенок, K> 7 000тень или пасмурно
Яркость Y< 0,3темно — снижает уверенность
Пересвет> 3% пикселей с каналом ≥ 250пересвет — снижает уверенность; камера с регулировкой экспозиции уменьшает её на шаг
Ровностьлевая и правая половины листа по Y > 1,3 разасвет сбоку — снижает уверенность
Ровностьпо K > 1 000свет смешанный — снижает уверенность

3. Точки замера

Овал лица в рамке 3:4 — центр по x 50%, по y 42%, ширина 48%, высота 54%. Размеры зон — в долях ширины овала W:

  • Щека — пятно радиусом 0,06·W; вторая щека зеркально, кожа — медиана обеих.
  • Радужка — самый тёмный круг радиусом 0,04·W в глазной зоне 0,22·W × 0,1·W; замер — кольцо от 30 до 90% радиуса без 5% самых светлых (блики) и 20% самых тёмных (зрачок) пикселей.
  • Волосы — пятно 0,08·W × 0,04·W у виска.

Цвета переводятся sRGB → линейный → XYZ (D65) → CIELAB (IEC 61966-2-1, CIE 15:2004). Для палитр — OKLab и OKLCH (Ottosson, 2020), разница цветов — ΔE2000 (CIE 142-2001; проверка на 34 парах Sharma, Wu, Dalal, 2005).

4. Оси колорита

S — кожа, H — волосы, E — глаза; L, C, h — светлота, хрома и угол оттенка в CIELAB. Все оси обрезаются до [−1; 1], контраст — до [0; 1].

ОсьФормула
Температура t0,6·tS + 0,25·tH + 0,15·tE; tS = (hS − 56°) / 9°; tH = (CH − 10) / 8, у чёрных (LH < 20) — 0; tE = ±min(1, CE / 15): «+» при hE 20–110°, «−» при 150–300°, 0 у зелёных; светлые серые (CE < 5, LE ≥ 35) — −0,3
Светлота v(0,5·LS + 0,3·LH + 0,2·LE − 45) / 20
Контраст kmax(|LS − LH|, |LS − LE|) / 60; низкий < 0,35, средний до 0,6, высокий выше
Чистота c0,5·(CS − 22) / 10 + 0,3·(CE − 12) / 10 + 0,2·(k − 0,5) / 0,3

Что подстроено по эталонным лицам: середина шкалы хромы кожи 22 и шаг 10 (в техническом задании — 18 и 8: медиана хромы кожи на 10 эталонных лицах — 23,5, и с 18 почти все выходили «чище среднего»); правило серых глаз — только для светлой радужки (у тёмно-карих хрома тоже мала, но они не холодные).

5. 12 прототипов и доли

Доля подтипа — softmax(−d² / 0,25), где d² — квадрат расстояния по (t; v; c) до прототипа. Доля сезона — сумма трёх его подтипов. Уверенность — по отрыву первой доли от второй: ≥ 0,15 — «уверенно» (только камера с листом и без предупреждений светомера), ≥ 0,06 — «скорее», меньше — «между X и Y». По фото, по вопросам и без листа — не выше «скорее»; если свет не поправлен (фото без белого, камера без листа), «скорее» — только при отрыве ≥ 0,15.

Подтипtvc
Светлая весна+0,4+0,8+0,2
Тёплая весна+0,8+0,3+0,3
Яркая весна+0,4+0,1+0,8
Светлое лето−0,4+0,8−0,2
Холодное лето−0,8+0,3−0,2
Мягкое лето−0,3+0,1−0,8
Мягкая осень+0,3−0,1−0,8
Тёплая осень+0,8−0,3−0,3
Тёмная осень+0,4−0,8−0,2
Тёмная зима−0,4−0,8+0,2
Холодная зима−0,8−0,3+0,3
Яркая зима−0,4−0,1+0,8

Пары тканей сдвигают свою ось на ±0,2, решающая пара (фирменные цвета двух ближайших подтипов) умножает долю выбранного на 1,5, потом доли нормируются заново.

6. Пределы

  • Телефон сам подстраивает баланс белого и экспозицию, иногда смягчает кожу. Лист снимает основную ошибку, но бумага с оптическим отбеливателем чуть синит — это около 2–4 ΔE. Лучше обычная офисная бумага.
  • Размеченного набора «правильных» подтипов нет, колористы и сами расходятся. Мы сверяли сезон на синтетических эталонных лицах с тремя сервисами-конкурентами и проверяли поправку на кадрах под лампой A и светом D75.
  • Распознавания лица нет: лицо ставите в овал вы, точки двигаются руками. Так быстрее и легче — модель распознавания весит около 17 МБ.
  • По фото без белого и по вопросам результат приблизительный — так и подписан.

Источники

Формулы сверены . Код свой, без библиотек цвета.

  • IEC 61966-2-1:1999. Multimedia systems and equipment — Colour measurement and management — Part 2-1: Default RGB colour space — sRGB.
  • CIE 15:2004. Colorimetry, 3rd edition (CIELAB, D65, источник A).
  • CIE 142-2001. Improvement to industrial colour-difference evaluation (ΔE2000).
  • G. Sharma, W. Wu, E. N. Dalal. The CIEDE2000 color-difference formula: implementation notes, supplementary test data, and mathematical observations. Color Research & Application 30(1), 2005.
  • C. S. McCamy. Correlated color temperature as an explicit function of chromaticity coordinates. Color Research & Application 17(2), 1992.
  • K. M. Lam. Metamerism and colour constancy. PhD thesis, University of Bradford, 1985 (матрица Bradford — для сравнения).
  • B. Ottosson. A perceptual color space for image processing (OKLab), 2020.