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 存储在 CENTERS
和 IDX
中的图像中存在的质心/代表颜色为您提供了每个像素的成员资格。 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);
我目前正在从事与颜色相关的项目 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 存储在 CENTERS
和 IDX
中的图像中存在的质心/代表颜色为您提供了每个像素的成员资格。 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);