Dar*_*ius 7 algorithm colors approximation
鉴于在RGB中我们可以表示256 ^ 3种组合= 16,777,216种颜色,并且由于人眼只能区分大约10,000,000种,因此显然有6,777,216种RGB组合的过剩,其色彩与对应颜色无法区分.
压缩算法在此基础上工作,当我相信帧中颜色范围的空间差异近似时.考虑到这一点,如何可靠地计算给定颜色是否在与另一个颜色"相似"的范围内?
当然,"相似性"将是某种可以调整的任意/可调参数,但无论如何这都是近似值.那么任何指针,伪代码,直观的代码示例,资源都有帮助我建模这样的功能吗?
非常感谢您的帮助
Jon*_*oni 12
有许多计算颜色之间距离的方法,最简单的方法是在任何颜色空间的颜色组件上定义.这些是RGB颜色(r1,g1,b1)和(r2,g2,b2)之间常见的"距离"或度量标准:
然而,这些没有考虑到人类视觉对颜色不如亮度敏感的事实.为获得最佳效果,您应该从RGB转换为分别编码亮度和颜色的颜色空间.然后在新颜色空间中使用上述度量之一,可能会给亮度分量增加更多权重,而对颜色分量则减少.
彼此难以区分的颜色区域称为麦克亚当椭圆.椭圆在CIELUV和CIELAB颜色空间中变得近似圆形,这对于计算很有用,但遗憾的是从RGB进入这些颜色空间并不那么简单.
JPEG将颜色转换为YC b C r,其中Y为亮度,两个C为编码颜色,然后将C分量的分辨率减半.您可以执行相同操作,然后使用上述度量标准之一的加权版本,例如:
diff = sqrt(1.4*sqr(y1-y2) + .8*sqr(cb1-cb2) + .8*sqr(cr1-cr2))
Run Code Online (Sandbox Code Playgroud)
维基百科中关于色差的文章有更多不同色彩空间的例子.
可以使用The CIEDE2000色差公式计算感知色差.所述CIEDE2000公式是基于LCH颜色空间(光度,色度和色调).LCH颜色空间表示为圆柱体(请参见此处的图像).
CIE76色差公式是一种不太准确(但更易于管理)的模型,它基于Lab色彩空间(L*a*b*).RGB或CMYK值与L*a*b*之间没有简单的公式转换,因为RGB和CMYK颜色模型与设备有关.首先需要将RGB或CMYK值转换为特定的绝对色彩空间,例如sRGB或Adobe RGB.此调整将取决于设备,但来自变换的结果数据将与设备无关,允许将数据转换为CIE 1931颜色空间,然后转换为L*a*b*.此文章解释程序和公式.