5 matlab image image-processing quantization k-means
我目前正在研究与颜色量化相关的项目.该算法意味着作为初始步骤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);
Run Code Online (Sandbox Code Playgroud)
算法的下一步是找到最流行的颜色(包含图像中最多像素的颜色).这似乎很容易,但当我试图从IDX变量中提取时,我有点卡住了.
kmeans返回存储在图像中的质心/代表颜色,CENTERS并IDX为您提供每个像素的成员资格。的每一行CENTERS都是一个质心,并告诉您需要引用图像中的像素在聚类后分配到的IDX哪一行。CENTERS
如果您想找到“最流行的颜色”,我假设您指的是最常出现的颜色。在这种情况下,mode对集群成员向量应用一个操作,然后使用它进行索引CENTERS以获得最受欢迎的集群:
idx_popular = mode(IDX);
popular_colour = CENTERS(idx_popular,:);
Run Code Online (Sandbox Code Playgroud)
作为kmeans一种随机算法,您的簇质心很可能在每次迭代时都不同 - 无论它们是完全不同还是相同但顺序不同都受算法的影响。
我建议您运行该kmeans算法几次,以确保您确实以高概率获得最受欢迎的颜色。Replicates这可以通过在运行时指定标志来完成kmeans:
num_repeats = 5; %// For example
[IDX,CENTERS] = kmeans(mat, N, 'Replicates', num_repeats);
Run Code Online (Sandbox Code Playgroud)