Semelhança / distância da cor no espaço de cores RGBA

Como calcular a semelhança entre duas cores no espaço de cores RGBA? (onde a cor do plano de fundo é desconhecida, é claro)

Preciso remapear uma imagem RGBA para uma paleta de cores RGBA encontrando omelhor entrada da paleta para cada pixel na imagem *.

No espaço de cores RGB, pode-se supor que a cor mais semelhante seja aquela com a menor distância euclidiana. No entanto, essa abordagem não funciona em RGBA, por exemplo, distância euclidiana dergba(0,0,0,0) parargba(0,0,0,50%) é menor do quergba(100%,100%,100%,1%), mas o último parece muito melhor.

Estou usando o espaço de cores RGBA pré-multiplicado:

r = r×a
g = g×a
b = b×a

e eu tentei essa fórmula (editar: Veja a resposta abaixo para uma melhor fórmula):

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

mas nãoVeja ideal - em imagens com gradientes semitransparentes, encontra cores erradas que causam descontinuidades / bordas nítidas. Proporções lineares entre cores opacas e alfa parecem duvidosas.

Qual é a fórmula ideal?

*) para simplificar esta questão, estou ignorando a difusão de erros, gama e espaços de cores psicovisuais.

Ligeiramente relacionado: se você deseja encontrar a cor mais próxima nesse espaço RGBA não euclidiano,vp-trees são os melhores.

questionAnswers(5)

yourAnswerToTheQuestion