4

所以我开始研究应用于图像的“简单”颜色减少。我花了最后一天研究它是如何工作的,并设法在这里找到似乎是一个不错的算法来试验:中值切割算法

这里的输出是 n 种颜色的调色板。我还没有确保这个算法确实有效,但我假设它确实有效。我想做的是获取该输出并将其应用于生成调色板的图像。

我不能说我精通颜色压缩格式和图像方面的所有深入知识,但我想知道如何应用调色板而不必从带有索引调色板的图像格式开始(即 GIF)。

我在想,对于每个像素,我计算当前像素的颜色与调色板中每种颜色之间的差异,并将该像素替换为差异最小的调色板颜色。这是一种可行的方法吗?

注意 - 我查看了各种库(ImageMagick),但这些似乎有点过分;我对图像处理所做的最多的事情就是减少调色板——没有比这更复杂的了。这就是为什么我认为实现这个算法将是满足我需求的最简单方法。

4

2 回答 2

3

最快的方法是使用八叉树进行颜色查找。

想法是将所有调色板颜色索引添加到八进制树,然后向根节点询问最接近的颜色。当询问最接近的颜色时,如果每个节点(可以访问调色板)处于最深级别,则返回其自己的颜色索引,或者向相应的子节点(请求的颜色)询问其最接近的颜色索引。如果没有对应的孩子,它会向所有孩子询问最近的颜色索引,并返回颜色距离最小的那个。

基本上,八叉树将大大减少需要进行的距离比较的次数。这可以通过预先计算所有距离来加速。

这是我的实现... http://www.codeproject.com/Tips/1046574/OctTree-Based-Nearest-Color-Search

于 2015-11-07T03:37:40.500 回答
1

我认为这是一种可行的方式。您计算的差异应该是此处显示的欧几里得差异 但是您可以进行一些优化。您不需要每次都计算新的差异。例如,如果您已经计算过了,您可以填充查找表以便直接使用正确的颜色

于 2012-04-30T11:26:16.637 回答