Matlab颜色量化

Matlab Color Quantization

我目前正在从事与颜色相关的项目 quantization.The 算法暗示初始步骤 k-means 算法。到目前为止我的代码:

N = 10;
K=7;
I=imread('baboon.bmp');
Idouble = double(I);
mat=zeros(size(I,1)*size(I,2),size(I,3));
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);

mat(:,1)=R(:);
mat(:,2)=G(:);
mat(:,3)=B(:);
[IDX,CENTERS] = kmeans(mat,N);

算法的下一步是找到最受欢迎的颜色(图像中包含最多像素的颜色)。这看起来很容易,但是当我试图从 IDX 变量中提取它时,我有点卡住了。

kmeans returns 存储在 CENTERSIDX 中的图像中存在的质心/代表颜色为您提供了每个像素的成员资格。 CENTERS 的每一行都是一个质心,因此,IDX 会告诉您 CENTERS 中的哪一行,您需要参考图像中的像素在聚类后被分配到。

如果您想查找 "most popular colour",我假设您指的是最经常出现的。在这种情况下,将 mode 操作应用于您的集群成员向量,然后使用它索引到 CENTERS 以获得最受欢迎的集群:

idx_popular = mode(IDX);
popular_colour = CENTERS(idx_popular,:);

小注

由于 kmeans 是一种随机算法,您的簇质心很可能在每次迭代时都不同 - 无论它们是完全不同还是相同但顺序不同取决于算法。

我会建议你运行几次kmeans算法,以确保你确实以高概率获得最受欢迎的颜色。这可以通过在 运行ning kmeans:

时指定 Replicates 标志来完成
num_repeats = 5; %// For example
[IDX,CENTERS] = kmeans(mat, N, 'Replicates', num_repeats);