您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于matlab的图像K均值聚类算法程序
K均值聚类法分为如下几个步骤:一、初始化聚类中心1、根据具体问题,凭经验从样本集中选出C个比较合适的样本作为初始聚类中心。2、用前C个样本作为初始聚类中心。3、将全部样本随机地分成C类,计算每类的样本均值,将样本均值作为初始聚类中心。二、初始聚类1、按就近原则将样本归入各聚类中心所代表的类中。2、取一样本,将其归入与其最近的聚类中心的那一类中,重新计算样本均值,更新聚类中心。然后取下一样本,重复操作,直至所有样本归入相应类中。三、判断聚类是否合理采用误差平方和准则函数判断聚类是否合理,不合理则修改分类。循环进行判断、修改直至达到算法终止条件。clcclearticRGB=imread('test5.jpg');%读入像img=rgb2gray(RGB);[m,n]=size(img);subplot(2,2,1),imshow(img);title('图一原图像')subplot(2,2,2),imhist(img);title('图二原图像的灰度直方图')holdoff;img=double(img);fori=1:200c1(1)=25;c2(1)=125;c3(1)=200;%选择三个初始聚类中心r=abs(img-c1(i));g=abs(img-c2(i));b=abs(img-c3(i));%计算各像素灰度与聚类中心的距离r_g=r-g;g_b=g-b;r_b=r-b;n_r=find(r_g=0&r_b=0);%寻找最小的聚类中心n_g=find(r_g0&g_b=0);%寻找中间的一个聚类中心n_b=find(g_b0&r_b0);%寻找最大的聚类中心i=i+1;c1(i)=sum(img(n_r))/length(n_r);%将所有低灰度求和取平均,作为下一个低灰度中心c2(i)=sum(img(n_g))/length(n_g);%将所有低灰度求和取平均,作为下一个中间灰度中心c3(i)=sum(img(n_b))/length(n_b);%将所有低灰度求和取平均,作为下一个高灰度中心d1(i)=abs(c1(i)-c1(i-1));d2(i)=abs(c2(i)-c2(i-1));d3(i)=abs(c3(i)-c3(i-1));ifd1(i)=0.001&&d2(i)=0.001&&d3(i)=0.001R=c1(i);G=c2(i);B=c3(i);k=i;break;endendRGBimg=uint8(img);img(find(imgR))=0;img(find(imgR&imgG))=128;img(find(imgG))=255;tocsubplot(2,2,3),imshow(img);title('图三聚类后的图像')subplot(2,2,4),imhist(img);title('图四聚类后的图像直方图')
本文标题:基于matlab的图像K均值聚类算法程序
链接地址:https://www.777doc.com/doc-4588897 .html