gpt4 book ai didi

similarity - RGBA 颜色空间中的颜色相似度/距离

转载 作者:行者123 更新时间:2023-12-02 01:20:45 27 4
gpt4 key购买 nike

如何计算 RGBA 颜色空间中两种颜色之间的相似度?(背景颜色当然未知)

我需要通过查找图像中每个像素的最佳调色板条目*,将 RGBA 图像重新映射到 RGBA 颜色调色板。

在 RGB 颜色空间中,最相似的颜色可以假定为具有最小欧氏距离的颜色。但是,这种方法不适用于 RGBA,例如从 rgba(0,0,0,0)rgba(0,0,0,50%) 的欧几里得距离code> 比 rgba(100%,100%,100%,1%) 小,但后者看起来要好得多。

我正在使用预乘 RGBA 色彩空间:

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

我已经尝试过这个公式(编辑: See the answer below for better formula ):

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

但它看起来不是最佳的 - 在具有半透明渐变的图像中,它会发现导致不连续/锐边的错误颜色。不透明颜色和 Alpha 之间的线性比例看起来很可疑。

最佳公式是什么?

<小时/>

*)为了简单起见,我忽略了误差扩散、 Gamma 和心理视觉色彩空间。

<小时/>

稍微相关:如果你想在这个非欧几里得 RGBA 空间中找到最接近的颜色,vp-trees是最好的。

最佳答案

终于找到了!经过彻底的测试和实验,我的结论是:

  • 正确的方法是计算两种颜色之间的最大可能差异。
    具有任何估计平均值/典型差异的公式都有不连续的空间。

  • 我无法找到无需将 RGBA 颜色与某些背景混合即可计算距离的工作公式。

  • 无需考虑所有可能的背景颜色。它可以简化为分别为每个 R/G/B channel 混合最大值和最小值:

    1. channel =0为背景混合两种颜色的 channel ,测量平方差
    2. channel=max为背景混合两种颜色的 channel ,测量平方差
    3. 两者中取较高者。

幸运的是,当您使用预乘 Alpha 时,与“白色”和“黑色”混合是微不足道的。

预乘 Alpha 颜色空间的完整公式是:

rgb *= a // colors must be premultiplied
max((r₁-r₂)², (r₁-r₂ - a₁+a₂)²) +
max((g₁-g₂)², (g₁-g₂ - a₁+a₂)²) +
max((b₁-b₂)², (b₁-b₂ - a₁+a₂)²)

C Source including SSE2 implementation .

关于similarity - RGBA 颜色空间中的颜色相似度/距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com