← На главную

Энтузиаст превратил оттенки кожи в цветовое пространство TUV

04.08.2026 15:16 · hackernews

Энтузиаст вручную разметил большое количество RGB-цветов, чтобы построить простое «достаточно хорошее» цветовое пространство для оттенков кожи. Он собрал веб-интерфейс, где цвет накладывался на нарисованное лицо, и перемещал его между категориями «да» и «нет». Получилось облако точек в форме банана, вытянутое от тёмных тонов к светлым и смещённое к красному. Чтобы с ним было удобнее работать, автор применил метод главных компонент (PCA) с N=3 из библиотеки scikit-learn. PCA повернул и выровнял данные, превратив их в пространство XYZ. Дальше он вручную подгонял уравнения в Desmos 3D: взял сферу в пространстве TUV и растягивал её, пока она не совпала с облаком размеченных цветов. Это был честный guess and check, без регрессии. Сам автор называет метод ненаучным, но рабочим.

В итоге получились функции, переводящие TUV в RGB. На их основе сделаны color picker на Javascript и процедурный генератор оттенков на Python. Пикер управляется тремя осями T, U и V. Они соответствуют парам Deep/Fair, Flushed/Ochre и Cool/Warm. Интересно, что эти направления возникли сами после PCA — автор не закладывал их заранее. Пространство похоже на HSL/HSV, но не совпадает с ним: V меняется от синего к оранжевому, а не от серого к насыщенному цвету.

Отдельный параметр R² — радиус сферы в этом пространстве. Он управляет разнообразием оттенков. При R²=0.1 почти нет вариаций, 1.0 — минимум для случайной генерации, 1.5 даёт хороший баланс реализма и разнообразия, 2.0 — уже возможны мультяшные выбросы, а 10 — для фэнтези. Уменьшение радиуса не срезает только тёмные или только светлые тона: равномерно сужаются все направления, так что выбор остаётся сбалансированным. Если опустить R² к нулю, получается нейтральный «неоднозначный» тон. По нему можно проверять, не смещено ли пространство.

Автор признаёт ограничения. Кожа не сводится к одному цвету: на восприятие влияют кровоток, меланин, рассеяние света, веснушки, витилиго, шрамы. Некоторые болезни дают оттенки вне «правдоподобного» диапазона — аргирия делает кожу сине-серой, высокий билирубин — желтоватой. Цвета по-разному выглядят на разных экранах и при разном освещении. Плюс разметка субъективна: это один человек, а не исследовательская группа.

Отдельно он поднимает тему расизма и колоризма: светлые тона исторически ценились больше, тёмные — маргинализировались. Эмодзи от Unicode Consortium дают пять оттенков, косметические бренды — до 50, а в редакторах персонажей иногда просто огромная палитра. Ни один вариант не покрывает реальное разнообразие. В статье собраны видео Нимы Танг, Кэт Блак, Vox, эссе Остина Уокера об Animal Crossing, проект Humanae Анхелики Дасс и блог Writing With Color. Дальше автор хочет почистить код, выложить его в репозиторий, привлечь больше людей для разметки, попробовать symbolic regression и моделировать упрощённые состояния вроде желтухи или аргирии.

Читать оригинал →