matlab实现k-均值聚类分割图像
我用的是图像矩阵直接运算,处理图像的速度还可以,运行的话,图像基本都是秒出。
注意:
1.这是直接对图像进行处理的k-均值聚类法,输入的图像位深是24位
2.我这里的k设置的是2
代码:
img=imread('D:\03.jpg');
img=rgb2gray(img);
x=double(img);
[m,n]=size(x);
z(:,1)=x(1,1);
z(:,2)=x(1,5);
z1=ones(m,n)*z(:,1);
z2=ones(m,n)*z(:,2);
flag=1;
while flag
d1=abs(z1-x);
d2=abs(z2-x);
d3=d1-d2;
[x1,y1]=find(d3<0);
[x2,y2]=find(d3>=0);
z3=0;
for i=1:length(x1)
z3=z3+sum(x(x1(i),y1(i))/length(x1));
end
z4=0;
for j=1:length(x2)
z4=z4+sum(x(x2(j),y2(j))/length(x2));
end
z5=ones(m,n)*z3;
z6=ones(m,n)*z4;
if z1==z5
flag=0;
xw=zeros(m,n);
for i=1:length(x1)
xw(x1(i),y1(i))=img(x1(i),y1(i));
end
imshow(xw);
break;
else
z1=z5;
z2=z6;
end
end
效果:
这是输入的原始图像
这是是输出的图像:
输入图:
输出图: