@porneL Напишите себе программу, которая спросит вас, какой цвет выглядит лучше, запишите результаты, а затем проведите регрессионный анализ, чтобы придумать шаблон. Это похоже на то, что делают графические системы, чтобы позволить пользователям откалибровать сглаживание шрифта в соответствии с тем, что «выглядит лучше». Чтобы защититься от собственных предубеждений, вы можете попросить разных людей запустить программу и отправить результаты.
ычислить сходство между двумя цветами в цветовом пространстве RGBA? (где цвет фона неизвестен конечно)
Мне нужно переназначить изображение RGBA в палитру цветов RGBA, найдяЛучший запись палитры для каждого пикселя в изображении *.
В цветовом пространстве RGB можно предположить, что наиболее сходным цветом является цвет с наименьшим евклидовым расстоянием. Однако этот подход не работает в RGBA, например, евклидово расстояние отrgba(0,0,0,0)
вrgba(0,0,0,50%)
меньше чемrgba(100%,100%,100%,1%)
, но последний выглядит намного лучше.
Я использую предварительно умноженное цветовое пространство RGBA:
r = r×a
g = g×a
b = b×a
и я попробовал эту формулу (редактировать: Смотрите ответ ниже для лучшей формулы):
Δr² + Δg² + Δb² + 3 × Δa²
но это не таксмотрю оптимальный - в изображениях с полупрозрачными градиентами он находит неправильные цвета, которые вызывают разрывы / острые края. Линейные пропорции между непрозрачными цветами и альфа кажутся подозрительными.
Какая оптимальная формула?
*) для простоты этого вопроса я игнорирую диффузию ошибок, гамма и психовизуальные цветовые пространства.
Немного связано: если вы хотите найти ближайший цвет в этом неевклидовом пространстве RGBA,Vp-деревья являются лучшим.