颜色相似度

4
我正在编写一个与图像相关的程序,需要对图像进行海报化处理。这意味着我需要将颜色分组,但是我很难确定如何判断两种颜色之间的相似度。
给定RGB颜色,我至少可以想到两种方法来比较它们的不同:
1. |r1 - r2| + |g1 - g2| + |b1 - b2| 2. sqrt((r1 - r2)^2 + (g1 - g2)^2 + (b1 - b2)^2)
如果我转换为HSV,我还可以想到其他方法。
因此,我想问,忽略速度,有什么最好的方法来判断两种颜色的相似度?最好指的是最接近人眼的准确度。

如果您忽略速度,您希望根据哪些标准来确定最佳选择? - Sneakyness
我是指最接近人眼的准确度,但你说得对,我已经修改了。 - ReaperUnreal
@ReaperUnreal:实际上,posterize 也意味着量化。 - EFraim
在HSV模式下工作。色调对于视觉来说是最重要的,饱和度/明度的差异只有色调的一半那么明显。 - Martin Beckett
3个回答

1

如果速度不是问题,最准确的方法是获取一些样本图像并使用不同的距离截止值(距离由Color_difference页面上的一个方程确定,这意味着您必须使用其中列出的某个颜色空间进行计算,然后转换为sRGB或其他格式[这也意味着如果图像一开始不在该空间中,则需要先将其转换为另一个颜色空间]),然后让大量人员检查这些图像,以查看哪种截止值对他们而言最好,然后采用多数人同意的图像的截止值。

基本上,这在很大程度上是一个主观性问题;事实上,它还取决于您希望图像有多么风格化,甚至您可能希望添加某种控制,以便可以随时更改截止距离。

如果速度成为问题和/或您想要更简单明了,那么只需使用第二个距离计算选择(即CIE76方程;请确保使用Lab*颜色空间),截止值约为2或2.3。


0

如果你要转向HSV(或类似空间),以下是一些注释:

  • 在H上的差异:0°和359°之间的差异在数字上很大,但在知觉上是可以忽略的。

  • 如果V或S很小,则H的差异也很小。

  • 对于计算机视觉应用程序,更重要的不是感知差异(主要用于涂料制造商),而是这些颜色是否属于同一对象/段或者不是。这意味着我们可能会部分忽略V,因为它可能会受到光照条件的影响。


0
你说的“posterize the image”是什么意思?
如果你想将颜色聚类到不同的区间,你应该看一下聚类分析

没错,但我需要能够区分不同颜色才能将它们聚类。 - ReaperUnreal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接