3

我正在研究颜色量化算法。

这是基本过程:

  • 将图像转换为一组三维向量(例如 RGB 空间)。
  • 将该集合放入集合列表中。
  • 虽然列表中的套数少于您想要的颜色数:
    • 从列表中删除最差的集合。
    • 把它一分为二。
    • 在列表中添加两个新集。
  • 完毕。

我所说的“最差集合”是指每个向量与平均向量之间的累积距离较大的集合。

这就是我“拆分集合”的方式:

  • 通过将所有向量相加并除以向量计数来计算平均向量。
  • 计算由每个向量与平均向量之间的绝对差组成的向量。对其进行归一化,我们得到一个平面的法线,将我们的向量集分成相等的两半。
  • 根据向量属于平面的哪一侧,使用这个法线二将集合分成两组。

这基本上是可行的,但图像调色板看起来很奇怪,就像从线性渐变中挑选出来的......

我的算法完全错误吗?有人可以帮忙吗?

4

3 回答 3

3

问题是您的算法很大程度上取决于初始集。因为您只拆分集合,所以如果彼此非常接近的两个点在开始时恰好位于不同的集合中,它们将始终位于不同的集合中。情况不妙。

所以是的 - 这比 k-means 算法差。

于 2011-08-26T11:01:50.277 回答
2

颜色量化的第一步是从N种颜色中选择具有代表性的K种颜色。
然而,对于具有如此多颜色的图像,一些渐变/条带问题是不可避免的。
然后误差扩散和抖动通过用可用颜色近似不可用颜色,通过以模仿不可用颜色的方式混合和匹配可用颜色来工作。

前 6 种颜色量化算法

这里有一些输出示例:

原始图像: 通过 NeuQuant 神经网络量化算法 减少到 256 色:通过 Xialoin Wu 的快速最优颜色量化算法减少到 256 色: 原始照片: 通过 NeuQuant 神经网络量化算法 减少到 256 色:通过 Pairwise Nearest 减少到 256 色邻域量化算法:
原始图像

通过 NeuQuant 神经网络量化算法减少到 256 种颜色

通过 Xialoin Wu 的快速优化颜色量化算法减少到 256 种颜色


原始照片
通过 NeuQuant 神经网络量化算法减少到 256 种颜色
通过成对最近邻量化算法减少到 256 种颜色

读者可以看到,前 5 种颜色量化算法中误差扩散和抖动的编码非常相似。
每种算法都有自己的优势。我分享颜色量化的来源,以邀请进一步讨论和改进。
此类源代码是用 C++ 编写的,以获得最佳性能。它还可以作为学习机器学习的机会。

于 2018-03-01T14:48:04.113 回答
1

我看不出这比 k-means 算法更好。也许你应该只做常规的k-means。

于 2011-08-26T10:39:06.500 回答