Методика
Как мы считаем цветотип
Формулы, константы и пределы — те же, что в коде. Ничего не угадываем там, где можно померить.
Коротко
Цветотипка поправляет цвета кадра по белому листу, переводит кожу, глаза и волосы в 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 | тёплая лампа, подойдите к окну — снижает уверенность |
| Оттенок, K | 4 000–5 000 | нейтральный |
| Оттенок, K | 5 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].
| Ось | Формула |
|---|---|
| Температура t | 0,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 |
| Контраст k | max(|LS − LH|, |LS − LE|) / 60; низкий < 0,35, средний до 0,6, высокий выше |
| Чистота c | 0,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.
| Подтип | t | v | c |
|---|---|---|---|
| Светлая весна | +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.