Javascript 压缩像素集的图像颜色空间

Javascript 压缩像素集的图像颜色空间,javascript,image,algorithm,colors,compression,Javascript,Image,Algorithm,Colors,Compression,我收到一张上传的图片,将其大小调整为小于100×100,并提取每个像素的颜色。因此,关于压缩图像的所有数据都可以存储在四个变量中: width-(int)图像的总宽度 height-(int)图像的总体高度 颜色-(数组)具有唯一RGB值的对象数组 像素-(数组)索引引用颜色的二维数组 对于我的实现,我希望将颜色空间压缩到20种以下的唯一颜色。我应该使用什么样的算法来融合和减少像素所表达的独特颜色的数量 我没有这方面的伪代码,但我认为一定有某种方法可以找出最不同的二十种颜色(使用平均值中R、G和

我收到一张上传的图片,将其大小调整为小于100×100,并提取每个像素的颜色。因此,关于压缩图像的所有数据都可以存储在四个变量中:

width
-(int)图像的总宽度

height
-(int)图像的总体高度

颜色
-(数组)具有唯一RGB值的对象数组

像素
-(数组)索引引用颜色的二维数组

对于我的实现,我希望将颜色空间压缩到20种以下的唯一颜色。我应该使用什么样的算法来融合和减少像素所表达的独特颜色的数量

我没有这方面的伪代码,但我认为一定有某种方法可以找出最不同的二十种颜色(使用平均值中R、G和B值的最大方差)。然后,我可以将其他颜色分组到它们变化最小的其他颜色下,并平均每组接收到的值。然而,我不知道如何实现这一点,并且仍然怀疑这种方法的有效性


想法?

我同意吉姆·米切尔的观点。您需要使用JavaScript库进行颜色量化

颜色量化是将图像缩小数千倍的过程 或者将数百万种颜色转换为一种颜色更少的颜色(通常为256种)

您可以使用和在选项中设置所需的颜色编号

// options
var opts = {
    colors: 256, // desired palette size
    //...
};

在实现它之前,您可以看到这一点。

K-NN聚类到20个聚类将是最佳的,因为输入颜色和输出颜色之间的L2范数最小化听起来很简单,您只需要找出如何从两个不同的RGB对象获得色差大小(如果这确实是您确定想要的方法)。问题是我可以有多达10000种颜色,这可能是5000万种彼此之间的差异来组织。您要寻找的是所谓的。这是一个经过充分研究的领域。我使用了八叉树算法从16位颜色(65536种颜色)开始到256色。Wikipedia文章可以让您开始,并且有很多源代码示例可用。另请参见注释:您的
颜色通常被称为“颜色表”或“调色板”。但我建议您遵循BMP格式的理念(它们也支持16位):保留[x][y]数组,但只是为了占用预期的位,而不是与字节对齐[但是,16或32种颜色更好:基2]