kmeans算法的matlab实践

时间:2021-02-01 20:06:14

把图像中所有的像素点进行RGB聚类分析,然后输出看结果

 img = imread('qq.png');

 %取出R矩阵,并将这个R矩阵拉成一列
imgR = img(:,:,1);
imgR = imgR(:); %取出G矩阵,并将这个G矩阵拉成一列
imgG = img(:,:,2);
imgG = imgG(:); %取出B矩阵,并将这个B矩阵拉成一列
imgB = img(:,:,3);
imgB = imgB(:); %把R G B拼起来 每一行代表每个点的RGB值 总计有 W*H行
imgRGB = [imgR imgG imgB]; %对imgRGB进行聚类算法,默认应该是欧拉距离
[classIndex, classRGB] = kmeans(double(imgRGB), 3);
classRGB = int32(classRGB); %把3个中心点的RGB值作为输出值,使图像只有那么3种颜色
for i=1:size(classIndex,1) if(classIndex(i) == 1)
imgRGB(i,:) = classRGB(1,:);
end if(classIndex(i) == 2)
imgRGB(i,:) = classRGB(2,:);
end if(classIndex(i) == 3)
imgRGB(i,:) = classRGB(3,:);
end end %最后把数据转回图像的矩阵,显示出来
[height,width] = size(img);
width = width/3;
for j=1:width
for i=1:height
img(i,j,1) = imgRGB(i+(j-1)*height,1); %把R提取出来赋回去
img(i,j,2) = imgRGB(i+(j-1)*height,2); %把G提取出来赋回去
img(i,j,3) = imgRGB(i+(j-1)*height,3); %把B提取出来赋回去
end
end imshow(img);

kmeans算法的matlab实践kmeans算法的matlab实践kmeans算法的matlab实践kmeans算法的matlab实践

第二张是上面代码的结果

第三张用3个颜色代表了3个类

第四张,设置K为4,也即会分成4类,搞了4种颜色