如何在PGM图像上使用K均值实现矢量量化

时间:2012-03-13 14:19:43

标签: java k-means

要求做, 在PGM文件上使用KMeans进行矢量量化(或图像压缩)
图像是PMG文件,b =块大小,k =次数,t =迭代,-g =初始质心

图像是这样的 126 131 128 126 129 130 127 128 130 123 132 128 131 124 131 129 。 。 129

算法1 K-means算法 要求:输入数据X = {x1; x2; ... xN},簇数K,其中K <= N,初始 对质心的猜测Y = {y1; y2; .. yK},最大迭代次数T。

  

表示t = 1; 2; .... T做什么    对于i = 1; 2; .... N做
     从当前集合Y中找到最接近xi的质心      将xi分配给最近的质心    结束为    对于j = 1; 2; .... K做
     将yj更新为分配给yj的向量的平均值    结束为    结束为

在K-means之后,我们将原始数据减少为K个原型向量Y的列表,作为
以及对于X中的每个向量,原型向量的索引最接近,即, X = {x1; X2; .. xN} - &gt; Y = {y1; Y2; .. yK},L = {l1; L2; .... lN};
其中每个li在1到K之间的整数中表示哪个原型向量xi是
最接近的一次。代替X,仅存储或传输Y和L.例如,使用b = 4
和K = 256,对于420x300像素的图像(123 KB未压缩)我们需要存储
X = 256 x {16字节} + Y = 7875 {字节} s~12 KB:
存储用于存储L

为了从压缩数据重建图像,我们简单地为每个b x b块 用它最接近块的derasterised原型矢量(回想一下 每个块对应于具有索引值Li的矢量xi

我要问的是,我完全不知道将更新yj指定为矢量的平均值以及如何重建图像是什么意思,任何人都可以向我解释。 是的,这是家庭作业,但如果有人能指出我正确的方向,我真的迷失了。

1 个答案:

答案 0 :(得分:0)

所以最初你只是对质心(y's)应该是什么进行随机猜测。假设你想要3个星团,最初你猜测质心Y = {126,128,130}。在每次迭代使用最接近的质心放置簇中的每个点之后,再次计算Y.因此,如果您的质心y1(在此示例中最初为126)得到X的{126,126,127},则您的新Y1是这3个点的平均值(126.33)。同样适用于y2和y3。