photoshop 调色刀效果背后的算法是什么?

What is the algorithm behind photoshop palette knife effect?

我正在尝试寻找 Photoshop 中使用的某些效果背后的算法,甚至是总体思路。具体来说,就是简化图像颜色的 调色刀 效果。例如下图:

变成这样:

我希望将具有相似颜色的每组像素变成一个或两种颜色的简单块(实时),就像在 Photoshop 中发生的那样。任何有关执行此操作的方法的想法都将受到赞赏。

按照 tucuxi 的建议,我可以 运行 像 kNN 这样的分类算法来为每个图像选择 K 主色(视频中的帧),然后将每个像素的颜色更改为最接近 k 代表的颜色。我将把代码放在这里,非常感谢任何改进它的建议。

既然要选择代表色,可以进行如下操作:

  1. 从图像中总共存在的 N 种颜色中选择 K 种颜色
  2. 对于图像中的每个像素,将其替换为所选 K 中最接近的颜色

要实现第 1 步,您可以 运行 比实际 color-space 多 k-nearest-neighbors。在 WxH 图像中,您有 WxH 像素,每个像素都有一种颜色。您选择 K 种随机颜色作为质心,将最接近的像素添加到每个颜色,一段时间后,您完成了 K 种不同的颜色,more-or-less 代表了图像中最重要的颜色(就不太重要的颜色而言)远离所有其他人)。请注意,这只是一种可能的聚类算法 - 我相信有很多关于替代方案及其相对优点的文献。

步骤 2 相对容易得多。对于每个原始像素,计算到所选 K 种颜色中每一种的距离,并用最接近的颜色替换它。