Kai*_*ann 77 algorithm rgb comparison colors
我正在寻找一种比较两种RGB颜色并生成其相似性值的算法(其中相似性意味着"与人类平均感知相似").
有任何想法吗?
编辑:
由于我不能回答,我决定将我的"解决方案"作为问题的编辑.
我决定在我的应用程序中使用(非常)小的真彩色子集,以便我可以自己处理颜色的比较.我使用大约30种颜色,并使用它们之间的硬编码距离.
由于它是一个iPhone应用程序,我使用Objective-C,实现或多或少是一个表示下表的矩阵,它显示了颜色之间的距离.
Gha*_*uni 55
欧几里德空间中的RGB距离不是"非常类似于人类的感知"
你可以使用YUV颜色空间,它考虑到这个因素:

您也可以使用CIE颜色空间来实现此目的.
编辑:
我要提到YUV颜色空间是一种廉价的近似值,可以通过简单的公式计算出来.但它在感性上并不统一.感知统一意味着颜色值中相同量的变化应产生大约相同视觉重要性的变化.如果您需要更精确和更严格的指标,您必须考虑CIELAB颜色空间或另一个感知均匀空间(即使没有简单的转换公式).
JHo*_*lta 17
我建议使用CIE94(DeltaE-1994),它被认为是人类色彩感知的体面代表.我在计算机视觉相关的应用程序中使用了很多,我对结果非常满意.
然而,执行这样的比较计算起来相当昂贵:
RGB to XYZ 两种颜色XYZ to LAB 两种颜色Diff = DeltaE94(LABColor1,LABColor2)公式(伪代码):
Ste*_*ung 13
人类感知的色度弱于强度.
例如,在商业视频中,YCbCr/YPbPr颜色空间(也称为Y'UV)降低了色度信息的分辨率,但保留了亮度(Y).在诸如4:2:0和4:2:2的数字视频压缩中,由于相对较弱的感知而降低了色度比特率.
我相信你可以计算一个距离函数,它比亮度(Y)具有更高的优先级,而不是优先于色度的优先级.
此外,在低强度下,人类视觉实际上是黑白的.因此,优先级函数是非线性的,因为对于低亮度(Y),您对色度的权重越来越小.
更科学的公式:http://en.wikipedia.org/wiki/Color_difference
这里有关于色距的很好的写作:http: //www.compuphase.com/cmetric.htm
如果资源消失,作者的结论是使用该公式(代码中)可以实现两种RGB颜色之间距离的最佳低成本近似.
typedef struct {
unsigned char r, g, b;
} RGB;
double ColourDistance(RGB e1, RGB e2)
{
long rmean = ( (long)e1.r + (long)e2.r ) / 2;
long r = (long)e1.r - (long)e2.r;
long g = (long)e1.g - (long)e2.g;
long b = (long)e1.b - (long)e2.b;
return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
Run Code Online (Sandbox Code Playgroud)