如何计算 RGBA 颜色空间中两种颜色之间的相似度?(当然背景颜色是未知的)
我需要通过为图像中的每个像素找到最佳调色板条目来将 RGBA 图像重新映射到 RGBA 颜色调色板*。
在 RGB 颜色空间中,可以假定最相似的颜色是欧几里得距离最小的颜色。但是,这种方法在 RGBA 中不起作用,例如,从rgba(0,0,0,0)
to的欧几里得距离rgba(0,0,0,50%)
小于 to rgba(100%,100%,100%,1%)
,但后者看起来要好得多。
我正在使用预乘 RGBA 颜色空间:
r = r×a
g = g×a
b = b×a
我已经尝试过这个公式(编辑: 请参阅下面的答案以获得更好的公式):
Δr² + Δg² + Δb² + 3 × Δa²
但它看起来并不理想——在具有半透明渐变的图像中,它会发现导致不连续/锐边的错误颜色。不透明颜色和 alpha 之间的线性比例看起来很可疑。
最佳配方是什么?
*) 为简单起见,我忽略了误差扩散、伽马和心理视觉色彩空间。
稍微相关:如果你想在这个非欧几里得 RGBA 空间中找到最接近的颜色,vp-trees是最好的。