5

I'm currently working on project which is related with color quantization.The algorithm implies as initial step k-means algorithm . My code untill now :

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);

Next step in the algorithm is finding the most popular color(the color which contains the most pixels in the image) . It seems very easy but somewhat I get stuck when I tried to extract that from IDX variable .

4

1 回答 1

1

kmeans返回存储在图像中的质心/代表颜色,CENTERSIDX为您提供每个像素的成员资格。的每一行CENTERS都是一个质心,它IDX告诉您CENTERS需要从哪一行引用图像中的像素在聚类后被分配给。

如果您想找到“最流行的颜色”,我假设您的意思是最常出现的. 在这种情况下,mode对您的集群成员向量应用一个操作,然后使用它来索引CENTERS以获得最流行的集群:

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

小注

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

我建议您运行该kmeans算法几次,以确保您确实以高概率获得最流行的颜色。这可以通过Replicates在运行时指定标志来完成kmeans

num_repeats = 5; %// For example
[IDX,CENTERS] = kmeans(mat, N, 'Replicates', num_repeats);
于 2015-08-31T15:45:22.897 回答