Сходство / расстояние цветов в цветовом пространстве RGBA

Как вычислить сходство между двумя цветами в цветовом пространстве 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

и I ' мы пробовали эту формулу ( править: См. ответ ниже, чтобы получить более точную формулу ):

Δr² + Δg² + Δb² + 3 × Δa²

, но она не выглядит оптимальной - на изображениях с полупрозрачными градиентами она находит неправильные цвета, вызывающие неоднородность / резкие края. Линейные пропорции между непрозрачными цветами и альфа-каналом кажутся подозрительными.

Какая оптимальная формула?


*) для простоты ответа на этот вопрос I ' m игнорируя диффузию ошибок, гамму и психовизуальные цветовые пространства.


Слегка связано: если вы хотите найти ближайший цвет в этом неевклидовом пространстве RGBA, vp-деревья являются лучшими.

29
задан Community 23 May 2017 в 12:09
поделиться