将图像片段优化为多个调色板

时间:2017-04-23 12:22:49

标签: c# colors

有没有人知道如何通过颜色的相似性将大量图像分组到选定数量的组中,那么每组的所有图像都可以缩小为使用相同的(16色)调色板?

看,我一直在搞乱N64图形(特别是Command& Conquer ROM),并且遇到了一种特殊的地形图存储机制。一系列(4位)图像,引用少量外部16色调色板。

每块地形被划分为24x24像素的“瓷砖”,并且每个地形都可以选择一个选择(少于16个)的调色板中的一个。但是,原始数据从不妨碍对此进行优化,并对单个地形块内的所有切片使用相同的16色调色板。

由于最初的PC游戏有256色图像,我想为它编写一个优化器并尝试重新转换所有地形。基本上,这可以归结为将所有地形的所有24x24平铺(数千个平铺,全部放在一起),将它们分成有限数量的具有相似颜色的组,然后为每个组生成最佳的16色调色板。因此,它比为整个群体生成单个调色板更复杂。

我有许多索引图像操作的辅助函数(复制和粘贴,将颜色与调色板匹配,类似的东西),编写实际的颜色缩减部分也可能不是什么大问题; Stack Overflow上有大量的代码。它只是我难以理解的初始颜色分析部分。

请注意,我不需要实际的图像相似度算法。我见过其中的几个。这是关于图像上使用的 colors 以及它们在图像上的使用量的具体而言。

[编辑]

通过一些研究,我发现解决这个问题的最佳方法是使用称为" K-means群集的方法"。

一位深入了解色彩和图像的朋友建议我将实际算法设为K-clustering方法,其中集群所有成员接近的方法是"接近于生成当前群集的16色调色板"。这可以通过将每个图像颜色的欧几里德距离的总和与其最接近的调色板匹配量化为一个值(尽管具有超过16种不同颜色的图像我可能必须使用平均值,因为多个颜色将匹配一个调色板匹配)。所以我将尝试这种方法。

有趣的是,生成调色板的生成方法很可能是K-means函数本身......

0 个答案:

没有答案