gpt4 book ai didi

algorithm - RGB 相似色近似算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:35:14 27 4
gpt4 key购买 nike

鉴于在 RGB 中我们可以表示 256^3 种组合 = 16,777,216 种颜色,并且由于人眼只能区分大约 10,000,000 种颜色,因此显然有多余的 6,777,216 种 RGB 组合,在颜色上无法与对应颜色区分开来。

我认为,压缩算法在逼近帧中颜色范围的空间差异时在此基础上工作。考虑到这一点,如何可靠地计算给定颜色是否在与另一种颜色的“相似性”范围内?

当然,“相似性”将是某种可以调整的任意/可调参数,但这无论如何都是一个近似值。那么有没有指针、伪代码、直观的代码示例和资源可以帮助我对这样的函数建模?

非常感谢您的帮助

最佳答案

计算颜色之间距离的方法有很多种,最简单的方法是在任何颜色空间的颜色分量上定义。这些是 RGB 颜色 (r1,g1,b1) 和 (r2,g2,b2) 之间的常见“距离”或度量:

  • L1: abs(r1-r2) + abs(g1-g2) + abs(b1-b2)
  • L2:sqrt((r1-r2)² + (g1-g2)² + (b1-b2)²)
  • L: max(abs(r1-r2), abs(g1-g2), abs(b1-b2))

然而,这些并没有考虑到人类视觉对颜色的敏感度低于对亮度的敏感度这一事实。为获得最佳效果,您应该将 RGB 转换为分别对亮度和颜色进行编码的颜色空间。然后在新的颜色空间中使用上述指标之一,可能给亮度分量更多的权重而给颜色分量更少的权重。

彼此无法区分的颜色区域称为MacAdam ellipses . CIELUV 中的椭圆几乎变成圆形和 CIELAB颜色空间,这非常适合计算,但不幸的是,从 RGB 到这些颜色空间并不是那么简单。

JPEG 将颜色转换为 YCbCr ,其中 Y 是亮度,两个 C 编码颜色,然后将 C 分量的分辨率减半。您可以这样做,然后使用上述指标之一的加权版本,例如:

diff = sqrt(1.4*sqr(y1-y2) + .8*sqr(cb1-cb2) + .8*sqr(cr1-cr2)) 

color difference上的文章在维基百科中有更多不同颜色空间的例子。

关于algorithm - RGB 相似色近似算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12069494/

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