这个问题可能与人类心理学有关
我正在尝试制作一个使用有限的调色板重新创建位图图像的程序。我天真地以为我可以简单地找到红色/绿色/蓝色值的平方差,然后用它来量化颜色之间的平方差。但是在实践中,这似乎效果不佳,红色的阴影与紫色的阴影相匹配,依此类推。
有人对我可以使用的其他比较方法有什么建议吗?
int squaredDistance(colour a, colour b)
{
return (a.r - b.r)*(a.r - b.r) + (a.g - b.g)*(a.g - b.g) + (a.b - b.b)*(a.r - b.b);
}
int findClosestColour(colour a) //Returns id of colour that most closely matches
{
int smallestColourDistance = 195075;
int colourId = -1;
for(int i=0; i<NUMOFCOLOURS; i++)
{
if( squaredDistance(a, coloursById[i]) < smallestColourDistance)
{
smallestColourDistance = squaredDistance(a, coloursById[i]);
colourId = i;
if(smallestColourDistance == 0)
break;
}
}
return colourId;
}
最佳答案
在色彩科学中,这称为colour difference,并且有多种算法可以计算它,以下是其中一些:
Bruce Lindbloom有一个calculator,而Colour提供了一个矢量化的Python implementation。您必须先将RGB值转换为CIE Lab,然后才能使用任何Delta E实现。
在colour difference颜色外观模型的基础上还可以实现CIECAM02计算,尤其是CAM02-UCS色彩空间,它是CIECAM02基础色彩空间的统一版本。
关于c++ - 量化两种颜色之间相似度的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31879087/