如何找到最合适的 X 颜色来表示图像?

How to find the most fitting X Colors to represent an image?

假设我们有一个 [1..n] 像素格式 (r,g,b) 的图像。

我们现在可以选择格式 (r,g,b) 的 X 种颜色来生成第二张相同大小的图像。 这 X 种颜色中的每一种都将代表 n/x 自由选择的新图像像素。

现在我们计算从原始图像到新生成图像的平方偏差,方法是遍历两个图像上 [1..n] 中的每个像素对,并将它们的色差求和 sqrt(sqr(R1- R2)+平方(G1-G2)+平方(B1-B2)).

现在假设我们分配了所有 X 颜色,以使平方偏差之和最小。

我的问题是:如何找到完美的 X 颜色以便在完美分布后我们的平方偏差与其他颜色集相比最小?

如果某些信息丢失或不清楚(由于我的英语不好),请告诉我。

谢谢!

PS: 为了更好地理解,我添加了一个 X = 4 的示例。颜色的分布几乎是最佳的,但我确定我没有选择完美的 4 种颜色来表示原始图像。

不幸的是我没有发布图片的声誉,所以我添加了 link 来代替 Before-After example for X=4

问题叫做color quantization,即给定n种输入颜色,最多给定m < n种输出颜色,找到最佳的颜色值分配,使得总颜色误差和是最小的。

最佳量化是NP hard,大致意思是没有已知的算法在一般情况下有效,不必尝试所有可能的组合。

有 --however-- 各种近似算法,其中大部分是基于 聚类算法 ,因为问题本质上等同于定位 m n 个点中的点,使得(少数)m 个点与所有(多个)n 个点之间的距离之和最小。

另请注意,使用 RGB space 中的欧几里得距离绝不是确定 colorimetric color difference 的好方法。